sudo não pode dar comando ulimit?

3

Eu estou tentando escrever uma solução para outro usuário, quando notei que o sudo ulimit -c retorna o comando não encontrado. Então tentei isso:

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

$ ulimit -c
0

$ sudo -i
# ulimit -c
0

então ... funciona a partir do root, e funciona com o sudo, mas não com o sudo. Isso é um bug?

    
por j0h 16.10.2015 / 23:14

2 respostas

4

ulimit é um comando interno do shell, como cd você não pode usar como:

sudo cd /test/

da mesma forma você não pode usar

sudo ulimit -c

Este não é um programa separado. sudo procura um binário para executar, mas não há ulimit binário.

Se você quiser alterar seu limite, poderá definir limites no arquivo limits.conf . Esses limites são definidos em /etc/security/limits.conf ou /etc/security/limits.d/ . você pode ter ajuda de this pergunta

ou

usa o shell como:

sudo sh -c "ulimit -c"
sudo bash -c "ulimit -c"
sudo bash -c ulimit 
sudo sh -c "ulimit -n"
    
por pl_rock 17.10.2015 / 00:27
1
  

Isso é um bug?

Não. sudo não tem conhecimento de comandos incorporados aos vários shells, como ulimit e cd .

Você foi presenteado com duas maneiras de resolver isso - usando um shell como intermediário e ajustando os limites em outro lugar do que na própria linha de comando. Aqui está um terceiro, para as situações em que alguém está tentando usar esses comandos para fazer modificações no estado do processo, em vez de exibi-lo.

Se alguém pudesse executar os builtins do shell como sudo ulimit … ou sudo cd … para modificar o estado do processo, isso não seria particularmente útil. Isso não seria executado depois disso, no processo cujos limites ou diretório de trabalho foram alterados. Uma pessoa ajustaria os limites do processo ou o diretório de trabalho apenas para sair imediatamente do processo.

Mas existem conjuntos de ferramentas com comandos externos de carregamento em cadeia com estas funções. Eles fazem a mesma coisa que os integrantes do shell, mas também carregam a corrente para outro programa depois de terem feito isso.

Eles são os vários conjuntos de ferramentas da família daemontools - daemontools, daemontools-encore, nosh, perp, s6 , freedt e runit.

As ferramentas para definir limites e, em seguida, carregar a cadeia para outro programa são variadamente softlimit (daemontools), softlimit (freedt), softlimit (daemontools-encore) softlimit (nosh), s6-softlimit (s6), chpst (runit) e runlimit (perp). Portanto, pode-se executar, digamos, vim com um limite de tamanho de arquivo de núcleo alterado usando daemontools, daemontools-encore, nosh ou freedt com o comando:

sudo softlimit -c 0 vim
O

nosh também tem um comando ulimit similar que usa diferentes tamanhos de unidade para os vários limites para os usados com softlimit :

sudo ulimit -c 0 vim

O mesmo vale para a mudança do diretório, para o qual existem as chdir cadeia externa comando de carregamento:

sudo chdir /etc vim rc.local

e o cd comando externo de execline :

sudo /command/cd /etc vim rc.local
    
por JdeBP 17.10.2015 / 12:37