ulimit PICKLE: "Operation nicht erlaubt" und "Befehl nicht gefunden"

15

Ich versuche, die maximale Anzahl offener Dateien für den aktuellen Benutzer zu erhöhen

> ulimit -n
1024

Ich versuche mich zu steigern und scheitere wie folgt

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Also mache ich die natürliche Sache und versuche, mit zeitweiliger Erlaubnis zu laufen, aber scheitere

> sudo ulimit -n 4096
sudo: ulimit: command not found

Fragen

  1. Wie kann man ulimit erhöhen?
  2. Warum passiert dies?

Fedora verwenden 14

Paislee
quelle
Antwort auf gelöschten Kommentar: ulimit 4096funktioniert nicht. Ich denke -nist richtig. Als Proof of Concept klappt es wenn ich erstmal sudo su - root(aber nur für root wechsle).
Paislee
Was ist PICKLE? SU superuser.com/questions/79717/…
Ciro Santilli am

Antworten:

17

ulimitist eine eingebaute Shell, kein externer Befehl. Es muss eingebaut werden, da es auf den Shell-Prozess selbst einwirkt, z. B . cd: Die Grenzwerte sind wie das aktuelle Verzeichnis eine Eigenschaft dieses bestimmten Prozesses.

sudo bash -c 'ulimit -n 4096'würde funktionieren, aber es würde das Limit für den sudonur von aufgerufenen Bash-Prozess ändern , was Ihnen nicht helfen würde.

Für jede Grenze gibt es zwei Werte: die harte Grenze und die weiche Grenze. Nur root kann das harte Limit erhöhen. Jeder kann das harte Limit senken und das weiche Limit kann in beide Richtungen geändert werden, mit der einzigen Einschränkung, dass es nicht höher als das harte Limit sein darf. Die weiche Grenze ist der tatsächliche Wert, auf den es ankommt.

Daher müssen Sie festlegen, dass für alle Prozesse ein festes Limit für offene Dateien von mindestens 4096 festgelegt wird. Sie können das weiche Limit bei 1024 belassen. Erhöhen Sie das weiche Limit, bevor Sie den Prozess starten, für den viele Dateien erforderlich sind. In /etc/security/limits.conf, fügen Sie die Zeilen

paislee hard nofile 4096
paislee soft nofile 1024

Wo paisleeist der Name des Benutzers, unter dem Sie Ihren Prozess ausführen möchten? Führen Sie in der Shell, die den Prozess startet, für den Sie ein höheres Limit festlegen möchten, Folgendes aus

ulimit -Sn unlimited

die weiche Grenze auf die harte Grenze zu erhöhen.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Alternativen sudo bash -csind, sudo -iwelche eine Login-Shell sudo -sstarten und welche eine Shell starten. Es gelten dieselben Einschränkungen, dies kann jedoch unter anderen Umständen nützlich sein.
Bram
Vielen Dank. Darf ich einige verwandte Fragen stellen? Die anderen Antworten und Posts stackoverflow.com/a/17483998/156458 und unix.stackexchange.com/a/238413/674 sowie unix.stackexchange.com/a/169035/674 werden alle empfohlen sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Aber beide ulimit -c 1024und exec su $LOGNAME" wirkt sich nur auf die Schale geschaffen durch sudo, so was ist der Zweck des Befehls? exec su $LOGNAME"tut auch nichts Sinnvolles, um das geänderte Limit zu nutzen. Ich bin sehr verwirrt und frage mich, ob mir etwas fehlt.
StackExchange for All
Bitte beachten Sie, dass ulimit -Sn unlimiteddies bei den meisten Shells nicht funktioniert. Die richtige Methode besteht darin, zuerst anzurufen ulimit -aund dann anzurufen, ulimit -n <number>wobei <number das harte Limit ist (die rechte Spalte).
schily
3

Öffnen Sie die Datei /etc/security/limits.confund fügen Sie die Zeile hinzu <user> soft nofile <value>. für die Verwendung von " ulimitchange to root user" und versuchen Sie dasselbe.

harish.venkat
quelle