Warum funktioniert ulimit nicht, wenn es mit sudo ausgeführt wird?

9

Gut..

$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192

Warum ulimitrespektlos mich so barbarisch?

ntl0ve
quelle
1
Sie hätten das gleiche Problem mit cd.
David Schwartz

Antworten:

10

ulimitist Shell / Prozess spezifisch. Überspringen Sie die sudo.

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
Daniel Beck
quelle
Ich bin überrascht, sudodass beim Bestehen kein Fehler aufgetreten ist ulimit. Normalerweise benötigt es eine externe Binärdatei, ulimitist jedoch eine eingebaute Shell.
Amphetamachine
@amphetamachine Check out which ulimit. Nichts überraschendes.
Daniel Beck
Diese Antwort ist schrecklich irreführend und nicht hilfreich, selbst wenn sie auf einem Körnchen Wahrheit beruht.
Hmijail trauert um Rücktritte
3

Daniel Becks Antwort sagt nicht die ganze Wahrheit (in der Tat ist es ein bisschen Fingerspitzengefühl) und hilft Menschen nicht, die tatsächlich "sudo ulimit" machen müssen.

Das Problem ist, dass

  • ulimit hat weiche und harte Grenzen
  • Sobald Sie das harte Limit festgelegt haben, müssen Sie Superuser sein, um es wieder höher einzustellen
  • sudo startet eine neue Shell; Wenn Sie es verlassen, kehren Sie zu Ihrem alten Ulimit zurück!

Ausführliche Erklärung

Daniels Beispiel funktioniert nur in einer ganz bestimmten Situation (die zum Glück die Standardeinstellung ist).

Gegenbeispiel:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

Also setzen Sie das Limit mit ulimit -s, und das ging und setzte sowohl weiche als auch harte Limits. Jetzt können Sie es nicht mehr höher einstellen.
An diesem Punkt könnten Sie denken, es zu versuchen sudo; aber es wird nicht funktionieren, wegen dem, was Daniel geschrieben hat.

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

Was hier passiert ist, ist, dass sudoeine neue Shell gestartet wurde, in der sie lief ulimit; und in DIESER Shell wurde das neue Ulimit gesetzt. Aber dann hat diese Shell ihre Arbeit beendet, wurde abgerissen, und jetzt sind Sie wieder in Ihrer vorherigen Shell mit ihrem vorherigen Ulimit.

Beweis:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

Warum genau hat Daniels Beispiel funktioniert? Aufgrund der Standard-Hard- und Soft-Limits von ulimit konnte er das Soft-Limit auf das Hard-Limit verschieben. Wir können es in Zeitlupe machen, um den Trick zu zeigen:

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

Zusammenfassend: Wenn Sie Ihr hartes Limit festlegen und es erhöhen möchten, haben Sie in dieser Shell kein Glück , ... es sei denn, Sie bleiben als Superuser oder verwenden eine Beschwörung, um anschließend Berechtigungen zu löschen.

hmijail trauert um resignierte
quelle