Por que ulimit não funciona quando executado com sudo?


Respostas:


10

ulimité específico do shell / processo. Pule o sudo.

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384

Estou surpreso sudopor não ter cometido um erro ao passar ulimit; geralmente ele precisa de um binário externo, mas ulimité um shell embutido.
Amphetamachine

@amphetamachine Confira which ulimit. Nada de surpreendente nisso.
Daniel Beck

Essa resposta é terrivelmente enganosa e inútil, mesmo que baseada em um grão de verdade.
precisa saber é o seguinte

3

A resposta de Daniel Beck não diz toda a verdade (na verdade, é meio que útil), e não ajuda as pessoas que realmente precisam "sudo ulimit".

O problema é que

  • ulimit tem limites flexíveis e rígidos
  • Depois de definir o limite rígido, você precisa ser superusuário para ajustá-lo novamente
  • sudo inicia um novo shell; quando você sai, volta ao seu antigo limite!

Explicação detalhada

O exemplo de Daniel só funciona em uma situação muito específica (que felizmente é a padrão).

Contraexemplo:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

Então, você define o limite com ulimit -s, e isso foi e define os limites suave e rígido. Agora você está impedido de configurá-lo mais alto.
Nesse ponto, você pode pensar em tentar sudo; mas não vai funcionar, por causa do que Daniel escreveu.

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

O que aconteceu aqui é que sudoiniciou um novo shell, onde foi executado ulimit; e nessa concha, o novo ulimit foi definido. Mas então esse shell terminou seu trabalho, foi demolido e agora você está de volta ao seu shell anterior com seu ulimit anterior.

Prova:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

Então, por que exatamente o exemplo de Daniel funcionou? Por causa dos limites rígidos e flexíveis padrão do ulimit, ele poderia empurrar o limite flexível para o rígido. Podemos fazer isso em câmera lenta para mostrar o truque:

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

Em resumo: se você definir seu limite rígido e quiser aumentar, você não terá sorte nesse shell , ... a menos que permaneça como superusuário ou use algum encantamento para eliminar privilégios posteriormente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.