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.
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.
cd
.Respostas:
ulimit
é específico do shell / processo. Pule osudo
.fonte
sudo
por não ter cometido um erro ao passarulimit
; geralmente ele precisa de um binário externo, masulimit
é um shell embutido.which ulimit
. Nada de surpreendente nisso.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
Explicação detalhada
O exemplo de Daniel só funciona em uma situação muito específica (que felizmente é a padrão).
Contraexemplo:
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.O que aconteceu aqui é que
sudo
iniciou um novo shell, onde foi executadoulimit
; 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:
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:
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.
fonte