PROC(5) | Manual del Programador de Linux | PROC(5) |
proc - pseudo-sistema de ficheros de información de procesos
/proc es un pseudo-sistema de ficheros que se usa como interfaz para las estructuras de datos del núcleo en lugar de leer e interpretar /dev/kmem. La mayor parte de este sistema de ficheros es de sólo lectura, pero algunos ficheros permiten cambiar variables del núcleo.
El siguiente resumen proporciona una rápida visita a la jerarquía /proc.
cd /proc/20/cwd; /bin/pwd
Dese cuenta que la orden pwd es frecuentemente una orden interna del shell, y podría no funcionar adecuadamente. En bash, debe usar pwd -P.
(cat /proc/1/environ; echo) | tr "\000" "\n"
(Una razón por la que alguien querría hacer esto, la puede encontrar en lilo(8).)
En Linux 2.0 y versiones anteriores exe es un puntero al fichero binario que fue ejecutado y aparece como un enlace simbólico. Una llamada readlink(2) aplicada al fichero especial "exe" devuelve una cadena con el formato:
[dispositivo]:nodo-i
Por ejemplo, [0301]:1502 sería el nodo-i 1502 sobre el dispositivo con número mayor 03 (discos IDE, MFM, etc.) y número menor 01 (primera partición del primer disco.
find(1) con la opción -inum se puede usar para buscar el fichero.
Los programas que no leen de la entrada estándar, sino
que leen de un fichero, y que no escriben en la salida estándar,
sino que escriben en un fichero, pueden ser engañados de la
siguiente manera, suponiendo que -i es la opción que designa al
fichero de entrada y -o la opción que designa al fichero de
salida:
/proc/self/fd/N es aproximadamente lo mismo que /dev/fd/N en algunos sistemas UNIX y sistemas al estilo UNIX. De hecho, la mayoría de los guiones shell MAKEDEV de Linux enlazan simbólicamente /proc/self/fd con /dev/fd.
El formato es:
Dirección perms desplaz disp nodo-i ruta 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm 08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm 08058000-0805b000 rwxp 00000000 00:00 0 40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so 40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so 4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so 40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so 4013e000-40142000 rw-p 00000000 00:00 0 bffff000-c0000000 rwxp 00000000 00:00 0
donde dirección es el espacio de direcciones del proceso que ocupa, perms es un conjunto de permisos:
r = leer w = escribir x = ejecutar s = compartido p = privado (copia en escritura)
desplaz es el desplazamiento dentro del fichero/cosa, disp es el dispositivo (mayor:menor) y nodo-i es el nodo-i en ese dispositivo. 0 indica que no hay un nodo-i asociado a la región de memoria, como ocurriría con la región bss del proceso.
En Linux 2.0 no existe un campo que dé el nombre de la ruta.
Los campos, en orden, junto con sus indicadores de formato apropiados para scanf(3), son:
cache tamaño del buffer en KB capacity número de sectores driver versión del manejador geometry geometría física y lógica identify en hexadecimal media tipo de medio model número de modelo del fabricante settings configuración de la unidad smart_thresholds en hexadecimal smart_values en hexadecimal
La utilidad hdparm(8) proporciona acceso a esta información en un formato amigable.
La longitud total de este fichero es el tamaño de la memoria física (RAM) más 4KB.
A la información de este fichero se accede con el programa dmesg(8).
El formato es el mismo que el de free(1), salvo que los datos se dan en bytes y no en KB.
IP address HW type Flags HW address Mask Device 192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0 192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
Aquí `IP address' es la dirección IPv4 de la máquina y `HW type' es el tipo de hardware de la dirección según el RFC 826. `Flags' son las banderas internas de la estructura ARP (tal y como se definen en /usr/include/linux/if_arp.h) y `HW address' es, si se conoce, la dirección de la capa física asociada a la dirección IP.
·
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
indx ifterface_name dmi_u dmi_g dmi_address 2 eth0 1 0 01005e000001 3 eth1 1 0 01005e000001 4 eth2 1 0 01005e000001
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printer
Aquí `Num' es el número de entrada en la tabla del núcleo, `RefCount' es el número de usuarios del conector, `Protocol' es, actualmente, siempre 0, `Flags' representa las banderas internas del núcleo que contienen el estado del conector. Actualmente, `Type' es siempre 1 (los conectores de dominio UNIX del tipo datagrama todavía no están soportados en el núcleo). `St' es el estado interno del conector y `Path' es, si existe, la ruta asociada del conector.
También se puede escribir en algunos de estos ficheros para reconfigurar el subsistema o para activar y desactivar ciertas características.
echo `scsi add-single-device 1 0 5 0` > /proc/scsi/scsi hará que el host scsi1 explore el canal SCSI 0 en busca de un dispositivo en la dirección ID 5 LUN 0. Si ya hay un dispositivo conocido en esa dirección o si la dirección es inválida, se devolverá un error.
La lectura de estos ficheros mostrará normalmente la configuración del manejador y el host, estadísticas, etc.
La escritura en estos ficheros permite diferentes cosas sobre diferentes hosts. Por ejemplo, con las órdenes latency y nolatency, el superusuario puede activar y desactivar en el manejador eata_dma el código para la medición de la latencia de las órdenes. Con las órdenes lockup y unlock, el superusuario puede controlar las búsquedas de bus simuladas por el manejador scsi_debug.
cache-name num-active-objs total-objs object-size num-active-slabs total-slabs num-pages-per-slabVea slabinfo(5) para más detalles.
que contienen a su vez más ficheros y subdirectorios.
Se puede encontrar documentación para los ficheros de /proc/sys/binfmt_misc en el fichero Documentation/binfmt_misc.txt de los fuentes del núcleo.
El fichero dentry-state contiene seis números, nr_dentry, nr_unused, age_limit (edad en segundos), want_pages (páginas solicitadas por el sistema) y dos valores ``tontos''. nr_dentry parece ser 0 todo el tiempo. nr_unused seems parece ser el número de dentries sin usar. age_limit es la edad en segundos tras la cual se puede reclamar una entrada dentry cuando hay poca memoria y want_pages no es cero después de que el núcleo haya llamado a shrink_dcache_pages() y no se haya reducido todavía el tamaño de la dcache.
El fichero dir-notify-enable se puede usar para activar o desactivar en todo el sistema la interfaz dnotify descrita en fcntl(2). Un valor 0 en este fichero desactiva la interfaz y un valor 1 la activa.
El fichero dquot-max muestra el número máximo de entradas de cuota de disco en la caché correspondiente. Este fichero no existe en algunos sistemas (2.4). Si el número de entradas libres en la caché de cuotas de disco es muy pequeño y el número de usuarios simultáneos que tiene es muy grande, tal vez quiera subir este límite.
El fichero dquot-nr el número de entradas de cuota de disco asignadas y el número de entradas libres.
El fichero file-max es un límite global del sistema sobre el número de ficheros abiertos por todos los procesos. (Véase también setrlimit(2), que un proceso puede usar para establecer el límite por proceso, RLIMIT_NOFILE, del número de ficheros que se pueden abrir.) Si obtiene un montón de mensajes de error que indican que se ha quedado sin manejadores de fichero, intente incrementar este valor:
echo 100000 > /proc/sys/fs/file-max
La constante del núcleo NR_OPEN impone un límite superior sobre el valor que se puede colar en file-max.
Sin incrementa file-max, asegúrese de incrementar inode-max a 3-4 veces el nuevo valor de file-max, o se quedará sin nodos-i.
El fichero (de sólo lectura) file-nr proporciona el número de ficheros abiertos en este momento. Contiene tres números: el número de manejadores de fichero asignados, el número de manejadores de fichero libres y el número máximo de manejadores de fichero. El núcleo reserva manejadores de fichero dinámicamente, pero no los libera otra vez. Si el número de ficheros asignados está cercano al máximo, debería considerar el incrementar dicho máximo. Cuando el número de manejadores de fichero libres es grande, ha encontrado un pico en su uso de manejadores de fichero y probablemente no necesite incrementar el máximo.
El fichero inode-max contiene el número máximo de nodos-i en memoria. Este fichero podría no existir en algunos sistemas (2.4). Este valor debería ser 3-4 veces más grande que el valor de file-max, ya que stdin, stdout y los conectores de red también necesitan un nodo-i para poder manejarlos. Si se queda sin nodos-i con frecuencia, necesitará incremetar este valor.
El fichero inode-nr contiene contiene los dos primeros valores de inode-state.
El fichero inode-state contiene siete números: nr_inodes, nr_free_inodes, preshrink y cuatro valores sin utilidad. nr_inodes es el número de nodos-i que el sistema ha asignado. Este número puede ser ligeramente mayor que inode-max ya que Linux reserva nodos-i usando páginas enteras. nr_free_inodes representa el número de nodos-i libres. preshrink es distinto de cero cuando nr_inodes > inode-max y el sistema necesita recortar la lista de nodos-i en lugar de reservar más.
El fichero lease-break-time especifica el periodo de gracia que el núcleo concede a un proceso que posee un arrendamiento de fichero (fcntl(2)) después de que le haya enviado una señal a ese proceso notificándole que otro proceso está esperando para abrir el fichero. Si el arrendatario no elimina o reduce la categoría del arrendamiento dentro del periodo de gracia, el núcleo elimina el arrendamiento por la fuerza.
El fichero leases-enable se puede usar para activar o desactivar los arrendamientos de ficheros (fcntl(2)) de forma global. Si este fichero contiene el valor 0, los arrendamientos están desactivados. Si el valor es distinto de 0, los arrendamientos están permitidos.
Los ficheros overflowgid y overflowuid le permiten cambiar el valor del UID y GID fijos. El valor por omisión es 65534. Algunos sistemas de ficheros sólo permiten UIDs y GIDs de 16 bits, aunque en Linux los UIDs y GIDs son de 32 bits. Cuando uno de estos sistemas de ficheros está montado con escrituras permitidas, cualquier UID y GID que excediera 65535 se traduciría al valor de desbordamiento antes de ser escrito en disco.
El fichero super-max controla el número máximo de superbloques y, por tanto, el número máximo de sistemas de ficheros montados que puede tener el núcleo. Sólo necesita incrementar super-max si necesita montar más sistemas de ficheros que el valor actual de super-max le permite. El fichero super-nr contiene el número de sistemas de ficheros montados actualmente.
El fichero acct contiene tres números: highwater, lowwater y frequency. Si está activa la contabilidad de procesos al estido de BSD, estos valores controlan su comportamiento. Si el espacio libre en el sistema de ficheros donde se encuentra el registro cae por debajo del porcentaje `lowwater', la contabilidad se suspende. Si el espacio libre supera el porcentaje `highwater', la contabilidad se reanuda. `Frequency' determina la frecuencia con la que el núcleo comprueba la cantidad de espacio libre (el valor está en segundos). Los valores por omisión son 4, 2 y 30. Esto es, suspende la contabilidad si el espacio libre es igual o inferior al 2%; reanúdala si el espacio libre es igual o superior al 4%; considera válida la información sobre el espacio libre durante 30 segundos.
El fichero cap-bound contiene el valor del conjunto de capacidades limitantes del núcleo. (expresado como un entero decimal con signo). Durante un exec, se hace un Y-lógico entre este conjunto y la capacidades permitidas al proceso.
El fichero core_uses_pid se puede usar en Linux 2.4 para controlar la forma de dar nombre a un fichero de vaciado de memoria (``core dump''). Si este fichero contiene el valor 0, el fichero simplemente se llama core. Si el valor es distinto de cero, el fichero de vaciado de memoria incluye el ID del proceso en un nombre de la forma core.PID.
El fichero ctrl-alt-del controla la gestión de la combinación Ctrl-Alt-Del del teclado. Cuando el valor de este fichero es 0, se captura Ctrl-Alt-Del y se envía al programa init(1) para tratar un reinicio elegante. Cuando este valor es > 0, la reacción de Linux a un ``Vulcan Nerve Pinch'' (tm) (N.T.: frase con la que también se conoce al saludo de los tres dedos) será un reinicio inmediato, sin ni siquiera escribir en disco los buffers modificados. Nota: cuando un programa (como dosemu) tiene el teclado en modo `crudo', el programa interpreta ctrl-alt-del antes de que la combinación de teclas alcance la capa tty del núcleo y es asunto del programa decidir qué hacer con ella.
Los ficheros domainname y hostname se pueden usar para establecer el nombre de dominio NIS/YP y el nombre de host de su ordenador exactamente de la misma forma que las órdenes domainname y hostname, es decir:
# echo "darkstar" > /proc/sys/kernel/hostname
# echo "mydomain" > /proc/sys/kernel/domainname
tienen el mismo efecto que
# hostname "darkstar"
# domainname "mydomain"
Observe, sin embargo, que el clásico darkstar.frop.org tiene el nombre de host ``darkstart'' y el nombre de dominio DNS (Internet Domain Name Server) ``frop.org'', que no se debe confundir con el nombre de dominio NIS (Network Information Service) o YP (Yellow Pages). En general, estos dos nombres de dominio son diferentes. Para una discusión más detallada, vea la página de manual hostname(1).
Si al fichero htab-reclaim (sólo en PowerPC) se le asigna un valor distinto de cero, el PowerPC htab (vea el fichero del núcleo Documentation/powerpc/ppc_htab.txt) se reduce cada vez que el sistema alcanza el bucle ocioso.
El fichero l2cr (sólo en PowerPC) contiene una bandera que controla la caché L2 de las placas base de los procesadores G3. Si contiene 0, la caché se desactiva. Una valor distinto de cero la activa.
El fichero modprobe se describe en el fichero Documentation/kmod.txt de los fuentes del núcleo.
El fichero msgmax es un límite global del sistema que especifica el número máximo de bytes de un único mensaje escrito en una cola de mensajes System V.
El fichero msgmni define el límite global del sistema para el número de identificadores de colas de mensajes. (Este fichero sólo existe en Linux 2.4 y posteriores.)
El fichero msgmnb es un parámetro global del sistema que se usa para inicializar el valor msg_qbytes para las colas de mensajes creadas posteriormente. El valor de configuración msg_qbytes especifica el número máximo de bytes que se pueden escribir en una cola de mensajes.
Los ficheros ostype y osrelease dan subcadenas de /proc/version.
Los ficheros overflowgid y overflowuid duplican los ficheros /proc/sys/fs/overflowgid y /proc/sys/fs/overflowuid.
El fichero panic da los accesos de lectura/escritura sobre la variable del núcleo panic_timeout. Si esto es 0, el núcleo entrará en un bucle infinito ante una situación de pánico; si no es cero, indica que el núcleo debe autoreinicializarse después de ese número de segundos. Cuando usa el manejador del dispositivo guardián software, el valor recomendado es 60.
El fichero powersave-nap (sólo en PowerPC) contiene una bandera. Si está activa, Linux-PPC usará el modo `nap' de ahorro de energía, en caso contrario usará el modo `doze'.
Los cuatro valores del fichero printk son console_loglevel, default_message_loglevel, minimum_console_level y default_console_loglevel. Estos valores influyen en el comportamiento de printk() cuando se muestran o guardan en registro mensajes de error. Vea syslog(2) para obtener más información sobre los diferentes `loglevels' (niveles de registro). Los mensajes con una prioridad mayor que console_loglevel se mostrarán en la consola. Los mensajes sin una prioridad explícita se mostrará con prioridad default_message_level. minimum_console_loglevel es el valor mínimo (el más alto) que se puede asignar a console_loglevel. default_console_loglevel es el valor por omisión para console_loglevel.
El directorio random contiene varios parámetros que controlan el funcionamiento del fichero /dev/random.
El fichero real-root-dev se documenta en el fichero Documentation/initrd.txt de los fuentes del núcleo.
El fichero reboot-cmd (sólo en Sparc) parece ser una forma de proporcionar un argumento al cargador de arranque de la ROM/Flash de la SPARC. ¿Quizás para decirle qué hacer tras rearrancar?.
El fichero rtsig-max se puede usar para ajustar el número máximo de señales (encoladas) POSIX de tiempo real que pueden estar pendientes en el sistema.
El fichero rtsig-nr muestra el número de señales POSIX de tiempo real que hay encoladas actualmente.
El fichero sem (disponible desde la versión 2.4 de Linux) contiene 4 números que definen límites para los semáforos IPC de System V. Estos campos son, en orden:
El fichero sg-big-buff muestra el tamaño del buffer del dispositivo SCSI genérico (sg). Todavía no puede ajustarlo, pero puede cambiarlo al compilar editando include/scsi/sg.h y cambiando el valor de SG_BIG_BUFF. No obstante, no debería existir ninguna razón para cambiar este valor.
El fichero shmall contiene un límite global del sistema para el número total de páginas de memoria compartida System V.
El fichero shmmax se puede usar para consultar y establecer el límite en tiempo de ejecución del tamaño máximo de segmento (IPC de System V) de memoria compartida que se puede crear. Actualmente, se permiten en el núcleo segmentos de memoria compartida de hasta 1 Gb. El valor por omisión de este valor es SHMMAX.
El fichero shmmni (disponible desde la versión 2.4 de Linux) especifica el número máximo de segmentos de memoria compartida System V que se pueden crear en todo el sistema.
El fichero version contiene una cadena como:
#5 Wed Feb 25 21:49:24 MET 1998.TP
El `#5' significa que ésta es la quinta compilación del núcleo a partir de esta base de los fuentes y la fecha que hay detrás indica el instante en el que se construyó el núcleo.
El fichero zero-paged (sólo en PowerPC) contiene una bandera. Cuando está activa (valor distinto de cero), Linux-PPC se decicará a rellenar páginas con ceros en el bucle ocioso, posiblemente acelerando la ejecución de get_free_pages.
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
cat(1), find(1), free(1), mount(1), ps(1), tr(1), uptime(1), chroot(2), mmap(2), readlink(2), syslog(2), slabinfo(5), hier(7), arp(8), dmesg(8), hdparm(8), ifconfig(8), lsmod(8), lspci(8), netstat(8), procinfo(8), route(8) /usr/src/linux/Documentation/filesystems/proc.txt
Esto conforma aproximadamente con el núcleo 2.4.17 de Linux. Por favor, actualice esto cuando sea necesario.
Ultima actualización para la versión 2.4.17 de Linux.
Observe que muchas cadenas (por ejemplo, el entorno y la línea de ordenes) están en formato interno, con los subcampos terminados por bytes NUL, por lo que puede encontrar que las cosas son más legibles si usa od -c o tr "\000" "\n" para leerlas. Alternativamente, también funciona bien echo `cat <file>`.
Esta página de manual está incompleta, posiblemente inexacta y es el tipo de cosas que necesitan ser actualizadas con mucha frecuencia.
El material sobre /proc/sys/fs y /proc/sys/kernel se basa en gran medida en los ficheros de documentación de los fuentes del núcleo escritos por Rik van Riel.
13 julio 2002 |