2013-07-05 14 views
42

Ich war mit Ubuntu 12.04, auf dem ich ulimit -n laufen, es zeigt 1024, Ich möchte meine offene Datei Grenze von 1024 auf 65535 erhöhen, also habe ich den folgenden Befehl versucht:Befehl nicht gefunden, wenn sudo ulimit

sudo ulimit -n 65535 

aber ich erhalte den folgenden Fehler:

sudo: ulimit: command not found 

Wie die Datei Grenze 1024-65535 zu erhöhen? Jede Hilfe wird geschätzt.

+1

Fragen zu ** allgemeiner Computerhardware und -software ** sind für Stack Overflow off-topic, es sei denn, sie betreffen direkt Tools, die hauptsächlich zum Programmieren verwendet werden. Sie können möglicherweise Hilfe zu [Unix & Linux] (http://unix.stackexchange.com) erhalten. –

+0

Diese Frage ist nützlich für mongodb, fügte dieses Tag hinzu. – jcollum

+0

Neue Frage zu Unix: http://unix.stackexchange.com/questions/81843/sudo-ulimit-command-not-found –

Antwort

94

ulimit ist eine Shell eingebaut wie cd, kein separates Programm. sudo sucht nach einer Binärdatei zum Ausführen, aber es gibt keine ulimit Binärdatei, weshalb Sie die Fehlermeldung erhalten. Sie müssen es in einer Shell ausführen.

Während Sie jedoch root sein müssen, um das Limit auf 65535 zu erhöhen, möchten Sie Ihr Programm wahrscheinlich nicht als root ausführen. Nachdem Sie das Limit erhöht haben, sollten Sie wieder zum aktuellen Benutzer wechseln.

Um dies zu tun, führen Sie:

sudo sh -c "ulimit -n 65535 && exec su $LOGNAME" 

und Sie werden eine neue Shell, ohne Root-Rechte, aber mit der erhöhten Grenze bekommen. Die exec bewirkt, dass die neue Shell den Prozess durch sudo Privilegien ersetzt, so dass Sie nach dem Beenden dieser Shell nicht versehentlich wieder als root enden.

+0

Leichte Optimierung funktionierte perfekt für mich: sudo sh -c "ulimit -u 1000000 & & ulimit - n 100000 && exec su $ LOGNAME " – Dasmowenator

+0

Beachten Sie, dass dies eine lose Umgebung für den Benutzer macht. – user367890

0

Ich hatte in der Vergangenheit mit solchen Problemen umzugehen. Da es keinen setuid-Mechanismus für Shell-Skripte gibt (weil es unsicher ist), habe ich festgestellt, dass das Schreiben eines einfachen C-Wrappers mit einem setuid ausreicht und dann einen Systemaufruf verwendet, um die ulimits des laufenden Prozesses zu modifizieren, bevor Privilegien fallengelassen und die Shell ausgeführt werden Skript.