En este tutorial para principiantes, aprenderá sobre el comando ulimit en Linux. Aprenderá a usarlo para controlar las asignaciones de recursos del sistema.
¿Que es ulimit en Linux?
Ulimit es un comando de shell incorporado diseñado para mostrar, asignar y limitar recursos. Es fundamental que cualquier sistema regule este tipo de controles.
Este tipo de control se puede aplicar a nivel global, de grupo y de usuario. Además de garantizar un procesamiento fluido de las tareas, evita que los procesos no deseados puedan devorar los recursos del sistema, como la memoria RAM y la potencia de la CPU.
Ulimit está vinculado a un archivo de configuración de seguridad. Su ubicación exacta puede variar, pero normalmente es algo como /etc/security/limits.conf
. Ulimit nos permite editar esa configuración rápidamente.
Límites blandos vs. duros
Como usuario, puede ajustar su configuración ulimit.
Quizás se pregunte por qué incluso establecer un límite si un usuario puede ajustarlo. Aquí es donde entran en juego los límites blandos y duros.
Entonces, desde la perspectiva del administrador, es posible que prefiera que su usuario se mueva alrededor de un valor determinado. Este sería su límite suave (digamos 25).
Luego, podría establecer un límite estricto que ese usuario no podría exceder (50). El usuario estaría autorizado a aumentar su límite de 25 a 50.
Usando ulimit en Linux
Esta es la sintaxis del comando ulimit:
ulimit <options>
Mostrar todos los límites para cualquier usuario
Puede mostrar todo tipo de límites para un usuario específico de esta manera:
ulimit -a user_name
El -a
flag mostrará todas las opciones y su configuración para su nombre de usuario específico.
Si omite el nombre de usuario, muestra los límites para usted. Déjame mostrarte los límites establecidos para mí por defecto:
[email protected]:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31503
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31503
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Sus valores predeterminados pueden ser diferentes a los míos, por supuesto. Esta vista muestra una descripción, la bandera asignada (que se puede usar para cambiar los límites) y la configuración.
Mostrar límites estrictos y flexibles
También es posible ver cualquiera de estos límites respectivos con una bandera.
Para mostrar límites flexibles, use la opción -S:
ulimit -S
Para mostrar límites estrictos, use la opción -H:
ulimit -H
Es más útil combinarlos con banderas específicas de arriba. Entonces, si desea verificar el límite estricto en la cantidad máxima de procesos de usuario, debe escribir:
[email protected]:~$ ulimit -Hu
31503
Cambiar los límites (temporalmente)
Ahora, cambiemos ese valor a 31500 para fines de demostración y verifiquemos el límite estricto nuevamente.
[email protected]:~$ ulimit -u 31500
[email protected]:~$ ulimit -Hu
31500
Vale la pena señalar que cualquier cambio que le permita su privilegio solo se escribirá temporalmente y afectará su caparazón actual.
Para confirmar esto, salí de mi shell y creé una nueva terminal y obtuve el valor predeterminado original.
[email protected]:~$ ulimit -Hu
31503
La siguiente sección muestra cómo hacer que los cambios sean permanentes.
Hacer cambios permanentes a ulimit
Como mencioné al comienzo del artículo, ulimit se rige por /etc/security/limits.conf. Si desea realizar cambios permanentes en los ulimits de cualquier usuario, deberá realizar cambios en el archivo de seguridad como root.
Al editar, debe incluir estos cuatro elementos:
<domain> <type> <item> <value>
Aquí está el texto que agregué al archivo para establecer el límite estricto en la cantidad de procesos para el usuario christoper (es decir, mi propia cuenta):
christopher hard nproc 2000
Tenga en cuenta que es una buena práctica no habilitar la cuenta raíz a menos que sea plenamente consciente de las posibles consecuencias. He hecho esto en una máquina virtual para que no tengas que hacerlo tú mismo.
[email protected]:~$ su
Password:
[email protected]:/home/christopher# nano /etc/security/limits.conf
[email protected]:/home/christopher# exit
exit
[email protected]:~$ ulimit -u
20000
Como puede ver, el límite de 'christopher' se cambió a 20000.
¿Cómo sabe qué palabra clave usar para editar el archivo /etc/security/limits.conf? Bueno, aquí hay una tabla que incluye posibles palabras clave de artículos y sus descripciones:
Palabra clave del elemento | Descripción |
---|---|
núcleo | limita el tamaño del archivo principal (KB) |
datos | tamaño máximo de datos (KB) |
fsize | tamaño máximo de archivo (KB) |
bloqueo de memoria | espacio máximo de direcciones bloqueado en la memoria (KB) |
sin archivo | número máximo de descriptores de archivos abiertos |
rss | tamaño máximo del conjunto residente (KB) |
pila | tamaño máximo de pila (KB) |
procesador | tiempo máximo de CPU (MIN) |
nproc | número máximo de procesos |
como | límite de espacio de direcciones (KB) |
inicios de sesión máximos | número máximo de inicios de sesión para este usuario |
maxsyslogins | número máximo de inicios de sesión en el sistema |
prioridad | la prioridad para ejecutar el proceso de usuario con |
bloqueos | número máximo de bloqueos de archivos que el usuario puede mantener |
pendiente de firma | número máximo de señales pendientes |
cola de mensajes | :memoria máxima utilizada por las colas de mensajes POSIX (bytes) |
agradable | máxima prioridad agradable permitida para elevar a valores:[-20, 19] |
rtprio | prioridad máxima en tiempo real |
chroot | cambiar raíz a directorio (específico de Debian) |
Tipo de límite | Descripción |
---|---|
duro | límite estricto |
suave | límite flexible |
– | límite rígido y flexible |