Una de las funcionalidades avanzadas de /proc/ es, como decíamos, la posibilidad de modificar algunos de los parámetros internos del núcleo sin tener que recompilarlo y reiniciar el sistema. Esta sección presenta un pequeño resumen de cómo realizarlo.
Como cualquier programa en ejecución, el núcleo de Linux posee internamente un conjunto de variables globales (o parámetros) que reflejan y/o condicionan su funcionamiento. Algunos de estas variables, como por ejemplo los procesos que se están ejecutando, la ocupación de la memoria o los sistemas de archivos montados, pueden ser consultados por el usuario mediante la lectura de los archivos correspondientes del directorio /proc/, tal como veíamos en la sección anterior. Pero /proc/ permite también la modificación en línea de algunas de esas variables, sin necesidad de reiniciar el sistema, de forma que podemos ajustar el comportamiento del núcleo dinámicamente. Para ello se dispone del directorio /proc/sys/.
El directorio /proc/sys/ contiene un subárbol de directorios y archivos en el que se organizan muchos parámetros del núcleo, subdivididos por categorías (es decir, por subdirectorios). Los archivos pueden tener permisos sólo de lectura o bien permitir su modificación, aunque sólo al administrador (root). Estas dos posibilidades indican, respectivamente, archivos que muestran información sobre parámetros y otros que permiten además, la modificación de estos parámetros. En este último caso, si sobreescribimos el contenido del archivo, estaremos cambiando el parámetro correspondiente del núcleo. Por ejemplo:
[root@yoda root]# cat /proc/sys/kernel/hostname yoda.dsic.upv.es [root@yoda root]# echo obiwan.dsic.upv.es > /proc/sys/kernel/hostname [root@yoda root]# cat /proc/sys/kernel/hostname obiwan.dsic.upv.es
Los subdirectorios más significativos de /proc/sys/ son los siguientes:
/proc/sys/dev/. Este directorio proporciona los parámetros de configuración de algunos dispositivos físicos conectados al sistema, como por ejemplo unidades de cdrom. Por ejemplo:
[root@yoda root]# ls -l /proc/sys/dev/cdrom/ total 0 -rw-r--r-- 1 root root 0 dic 9 11:51 autoclose -rw-r--r-- 1 root root 0 dic 9 11:51 autoeject -rw-r--r-- 1 root root 0 dic 9 11:51 check_media -rw-r--r-- 1 root root 0 dic 9 11:51 debug -r--r--r-- 1 root root 0 dic 9 11:51 info -rw-r--r-- 1 root root 0 dic 9 11:51 lock [root@yoda root]# cat /proc/sys/dev/cdrom/info CD-ROM information, Id: cdrom.c 3.12 2000/10/18 drive name: sr0 drive speed: 40 drive # of slots: 1 Can close tray: 1 Can open tray: 1 Can lock tray: 1 Can change speed: 1 Can select disk: 0 Can read multisession: 1 Can read MCN: 1 Reports media changed: 1 Can play audio: 1 Can write CD-R: 1 Can write CD-RW: 1 Can read DVD: 0 Can write DVD-R: 0 Can write DVD-RAM: 0
Mediante la modificación de archivos como autoclose o autoeject (que pueden contener 0 o 1) podemos controlar la activación o desactivación de esas características de la unidad de cd.
/proc/sys/fs/. Este directorio contiene numerosos parámetros concernientes a los sistemas de archivos montados en el sistema, incluyendo cuotas, manejadores de archivo, inodos, etc:
[root@yoda root]# ls -l /proc/sys/fs/ total 0 dr-xr-xr-x 2 root root 0 dic 9 12:10 binfmt_misc -r--r--r-- 1 root root 0 dic 9 12:10 dentry-state -rw-r--r-- 1 root root 0 dic 9 12:10 dir-notify-enable -rw-r--r-- 1 root root 0 dic 9 12:10 file-max -r--r--r-- 1 root root 0 dic 9 12:10 file-nr -r--r--r-- 1 root root 0 dic 9 12:10 inode-nr -r--r--r-- 1 root root 0 dic 9 12:10 inode-state -rw-r--r-- 1 root root 0 dic 9 12:10 lease-break-time -rw-r--r-- 1 root root 0 dic 9 12:10 leases-enable -rw-r--r-- 1 root root 0 dic 9 12:10 overflowgid -rw-r--r-- 1 root root 0 dic 9 12:10 overflowuid dr-xr-xr-x 2 root root 0 dic 9 12:10 quota
Por ejemplo, si quisiéramos incrementar la cantidad de manejadores de fichero (es decir, el número máximo de ficheros que pueden ser abiertos simultáneamente), deberíamos incrementar la cantidad que aparece en file-max.
/proc/sys/kernel/. El contenido de este directorio incluye aspectos de configuración y parámetros que afectan directamente el funcionamiento del núcleo, como por ejemplo el comportamiento de [Ctl]-[Alt]-[Supr] para reiniciar el sistema, el nombre del ordenador (ver ejemplo arriba), el número máximo de hilos de ejecución que el núcleo puede ejecutar, etc.
/proc/sys/net/. Este directorio permite ver y controlar el funcionamiento de muchos aspectos del núcleo relacionados con la red, incluyendo los diferentes protocolos queimplementa Linux (ethernet, ipx, ipv4, ipv6, etc. Por ejemplo, para permitir la retransmisión de paquetes entre dos tarjetas de red conectadas al ordenador, haríamos lo siguiente:
[root@yoda root]# echo 1 > /proc/sys/net/ipv4/ip_forward
/proc/sys/vm/. Este subdirectorio permite la configuración del subsistema de memoria virtual del núcleo, como por ejemplo el funcionamiento del servicio (o "demonio") de intercambio (kswapd), la cantidad de memoria que se dedicará a buffers del núcleo, el número máximo de áreas de memoria que pueden tener los procesos, etc.
Como alternativa a escribir directamente el valor (o los valores) en los archivos de /proc/sys/, Linux dispone de un mandato denominado sysctl, que puede ser utilizado para leer y modificar todos los parámetros del kernel que se ubican en ese directorio. Por ejemplo, para modificar el nombre de la máquina, como veíamos arriba, podríamos ejecutar lo siguiente:
[root@yoda root]# cat /proc/sys/kernel/hostname yoda.dsic.upv.es [root@yoda root]# sysctl -w kernel.hostname=obiwan.dsic.upv.es kernel.hostname = obiwan.dsic.upv.es [root@yoda root]# cat /proc/sys/kernel/hostname obiwan.dsic.upv.es
La orden sysctl se utiliza para leer y modificar claves que, como vemos, coinciden con las rutas de los archivos correspondientes dentro del directorio /proc/sys/. Para un listado completo de las claves que podemos modificar, podemos teclear sysctl -a.