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


Antworten:


10

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.