¿Por qué ulimit no funciona cuando se ejecuta con sudo?

9

Bien..

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

¿Por qué ulimitme falta el respeto de una manera tan bárbara?

ntl0ve
fuente
1
Tendría el mismo problema con cd.
David Schwartz

Respuestas:

10

ulimites shell / proceso específico. Sáltate el sudo.

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
Daniel Beck
fuente
Me sorprende sudoque no haya dado un error al pasar ulimit; Por lo general, necesita un binario externo, pero ulimites un shell incorporado.
anfetamáquina
@amphetamachine Echa un vistazo which ulimit. Nada sorprendente al respecto.
Daniel Beck
Esta respuesta es terriblemente engañosa e inútil, incluso si se basa en un grano de verdad.
hmijail llora a los despedidos el
3

La respuesta de Daniel Beck no dice toda la verdad (de hecho es un juego de manos), y no ayuda a las personas que realmente necesitan hacer "sudo ulimit".

El problema es ese

  • ulimit tiene límites suaves y duros
  • una vez que establezca el límite estricto, debe ser superusuario para volver a establecerlo más alto
  • sudo inicia un nuevo shell; cuando salgas, ¡estás de vuelta a tu viejo ulimit!

Explicación detallada

El ejemplo de Daniel solo funciona en una situación muy específica (que afortunadamente es la predeterminada).

Contraejemplo:

$ 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

Entonces, estableciste el límite con ulimit -s, y eso fue y estableciste límites suaves y duros. Ahora está bloqueado para configurarlo más alto.
En este punto, puede pensar en intentarlo sudo; pero no funcionará, por lo que escribió Daniel.

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

Lo que sucedió aquí es que sudocomenzó un nuevo shell, donde se ejecutó ulimit; y en ESA shell, se estableció el nuevo ulimit. Pero entonces ese caparazón terminó su trabajo, fue derribado, y ahora estás de vuelta en tu caparazón anterior con su ulimit anterior.

Prueba:

$ 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
$

Entonces, ¿por qué funcionó exactamente el ejemplo de Daniel? Debido a los límites duros y blandos predeterminados de ulimit, podría empujar el límite blando al duro. Podemos hacerlo en cámara lenta para mostrar el truco:

$ 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
$

En resumen: si establece su límite estricto y desea subirlo, no tiene suerte en ese shell , ... a menos que permanezca como superusuario o use algún encantamiento para eliminar privilegios después.

hmijail llora a los residentes
fuente