web-dev-qa-db-fra.com

commande introuvable lors de l'utilisation de Sudo ulimit

J'utilisais ubuntu 12.04, sur lequel je lance ulimit -n, il affiche 1024, Je souhaite augmenter la limite de fichiers ouverts de 1024 à 65535, j'ai donc essayé la commande suivante:

Sudo ulimit -n 65535

mais j'obtiens l'erreur suivante:

Sudo: ulimit: command not found

Comment augmenter la limite de fichiers de 1024 à 65535? Toute aide serait appréciée.

44
sunpy

ulimit est un shell intégré comme cd, pas un programme séparé. Sudo cherche un binaire à exécuter, mais il n'y a pas de binaire ulimit, c'est pourquoi vous obtenez le message d'erreur. Vous devez l'exécuter dans un shell.

Cependant, même si vous devez être root pour augmenter la limite à 65535, vous ne voudrez probablement pas exécuter votre programme en tant que root. Donc, après avoir augmenté la limite, vous devriez revenir à l'utilisateur actuel.

Pour cela, lancez:

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

et vous obtiendrez un nouveau shell, sans privilèges root, mais avec la limite levée. La variable exec fait en sorte que le nouveau shell remplace le processus par les privilèges Sudo. Ainsi, une fois que vous avez quitté ce shell, vous ne vous retrouverez plus accidentellement en tant que root.

97
andrewdotn

J'ai eu à traiter de tels problèmes par le passé. Puisqu'il n'y a pas de mécanisme setuid pour les scripts Shell (car il n'est pas sécurisé), j'ai trouvé qu'il était suffisant d'écrire un simple wrapper en C avec un setuid, puis d'utiliser un appel système pour modifier les ulimits du processus en cours avant de supprimer des privilèges et d'exécuter votre Shell. scénario.

0
Craig