web-dev-qa-db-fra.com

sudo ne peut pas donner la commande ulimit?

J'essaie d'écrire une solution pour un autre utilisateur lorsque j'ai remarqué que Sudo ulimit -c renvoie une commande introuvable. Alors j'ai essayé ceci:

$ Sudo ulimit -c
  Sudo: ulimit: command not found

$ ulimit -c
0

$ Sudo -i
# ulimit -c
0

donc ... ça marche à partir de la racine, et ça marche avec Sudo, mais pas avec Sudo. Est-ce un bug?

3
j0h

ulimit est une commande intégrée à Shell telle que cd que vous ne pouvez pas utiliser comme:

Sudo cd /test/

de même, vous ne pouvez pas utiliser

Sudo ulimit -c

Ce n'est pas un programme séparé. Sudo recherche un binaire à exécuter, mais il n'y a pas de ulimit binaire.

Si vous souhaitez modifier votre limite, vous pouvez définir des limites dans le fichier limits.conf. Ces limites sont définies dans /etc/security/limits.conf ou /etc/security/limits.d/. vous pouvez prendre l'aide de cette question

ou

utiliser Shell comme:

Sudo sh -c "ulimit -c"
Sudo bash -c "ulimit -c"
Sudo bash -c ulimit 
Sudo sh -c "ulimit -n"
4
pl_rock

Est-ce un bug?

Sudo n'a aucune connaissance des commandes intégrées aux différents shells, comme ulimit et cd.

On vous a présenté deux façons de résoudre ce problème: utiliser un shell comme intermédiaire et ajuster les limites ailleurs que sur la ligne de commande elle-même. En voici une troisième, pour les situations où l’on essaie d’utiliser de telles commandes pour modifier l’état du processus plutôt que de l’afficher.

Si vous pouviez exécuter les commandes intégrées Shell en tant que _Sudo ulimit …_ ou _Sudo cd …_ pour modifier réellement l'état du processus, cela ne serait pas particulièrement utile. Cela ne fonctionnerait plus après, dans le processus dont les limites ou le répertoire de travail avaient été modifiés. On ajusterait les limites du processus ou le répertoire de travail uniquement pour quitter immédiatement le processus.

Mais il existe des jeux d'outils avec des commandes externes à chargement en chaîne avec ces fonctions. Ils font la même chose que les commandes intégrées du shell, mais chargent également la chaîne dans un autre programme après l'avoir fait.

Ils sont les divers outils de la famille daemontools-family - daemontools, daemontools-encore, nosh, perp, s6, freedt et runit.

Les outils permettant de définir les limites puis de charger en chaîne dans un autre programme sont diversement softlimit (daemontools), softlimit (freedt), softlimit (daemontools-encore) softlimit (nosh), s6-softlimit (s6), chpst (runit) et runlimit (perp). Donc, on pourrait exécuter, par exemple, vim avec une limite de taille de fichier principale modifiée à l'aide de daemontools, daemontools-encore, nosh ou freedt avec la commande:

Sudo softlimit -c 0 vim

nosh a également une commande similaire ulimit qui utilise différentes tailles d’unités pour les différentes limites de celles utilisées avec softlimit:

Sudo ulimit -c 0 vim

Il en va de même pour la modification du répertoire pour lequel il existe la commande nosh chdir external chain-loading:

Sudo chdir/etc vim rc.local

et la cd commande externe de execline :

Sudo/commande/cd/etc vim rc.local
1
JdeBP