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?
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"
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