A pesar de que el sistema de archivos proc es virtual y la información que contiene se construye cada vez que el usuario realiza una operación de lectura, el nombre de los archivos y directorios que podemos encontrar en el directorio /proc/ está predefinido por el núcleo y es bien conocido.
Esta sección presenta un repaso de los archivos y directorios más relevantes, junto con instrucciones para interpretar su contenido. Para una descripción más exhaustiva, se recomienda documentación especializada como la "Reference Guide" de Red Hat 9 que mencionábamos en el apartado anterior, o la propia página de manual de "proc" (man proc).
Algunos de los archivos más importantes son los siguientes:
/proc/cmdline. Muestra los parámetros con los que se inició el núcleo en tiempo de arranque. Por ejemplo:
auto BOOT_IMAGE=linux ro BOOT_FILE=/boot/vmlinuz-2.4.20-20.8 hdc=ide-scsi root=LABEL=/
/proc/cpuinfo. Identifica el tipo de procesador del sistema y sus parámetros. Por ejemplo:
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 7 model name : Pentium III (Katmai) stepping : 3 cpu MHz : 498.858 cache size : 512 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse bogomips : 996.14
/proc/filesystems. Muestra los sistemas de ficheros que actualmente soporta el núcleo. Es necesario disponer del soporte de sistema de ficheros con el que está formateada una partición (o disquete, cd, etc.) para poder montarlo y así acceder a su contenido. Por ejemplo:
nodev rootfs nodev bdev nodev proc nodev sockfs nodev tmpfs nodev shm nodev pipefs ext2 nodev ramfs iso9660 nodev devpts nodev usbdevfs nodev usbfs nodev autofs nodev binfmt_misc vfat
La primera columna indica si actualmente existe alguna partición montada con dicho sistema de archivos (vacío) o no (nodev). La segunda columna indica el tipo de sistema de archivos. Si el núcleo soporta otros sistemas de archivos como módulos que aún no se han cargado, estos no aparecen en la lista (hasta que son cargados, obviamente).
/proc/meminfo. Muestra información sobre el uso actual de la memoria RAM, indicando la cantidad de memoria utilizada en varios conceptos (compartida, en "buffers" de entrada/salida, libre, intercambio, etc.). Veamos un ejemplo:
total: used: free: shared: buffers: cached: Mem: 393965568 203403264 190562304 0 5488640 111288320 Swap: 526409728 0 526409728 MemTotal: 384732 kB MemFree: 186096 kB MemShared: 0 kB Buffers: 5360 kB Cached: 108680 kB SwapCached: 0 kB Active: 175636 kB ActiveAnon: 65804 kB ActiveCache: 109832 kB Inact_dirty: 452 kB Inact_laundry: 0 kB Inact_clean: 3756 kB Inact_target: 35968 kB HighTotal: 0 kB HighFree: 0 kB LowTotal: 384732 kB LowFree: 186096 kB SwapTotal: 514072 kB SwapFree: 514072 kB
Las dos primeras líneas muestran un resumen del estado de la memoria RAM y de la memoria de intercambio (o swap), con cantidades expresadas en bytes. El resto de líneas muestran la misma información de manera más detallada y expresada en Kbytes. Los campos más relevantes son MemTotal (memoria física total), MemFree (memoria física no utilizada actualmente), SwapTotal (total de memoria de intercambio) y SwapFree (cantidad de memoria de intercambio no utilizada actualmente).
/proc/modules. Muestra un listado de los módulos de núcleo presentes en el sistema (cargados actualmente o no). Este listado puede variar sensiblemente de un sistema a otro (en un núcleo monolítico puro, estaría vacío). Por ejemplo:
nls_iso8859-1 3516 1 (autoclean) nls_cp437 5148 1 (autoclean) vfat 13100 1 (autoclean) fat 38776 0 (autoclean) [vfat] sr_mod 18200 0 (autoclean) ymfpci 45516 0 (autoclean) ac97_codec 14600 0 (autoclean) [ymfpci] uart401 8420 0 (autoclean) [ymfpci] sound 74196 0 (autoclean) [uart401] soundcore 6500 4 (autoclean) [ymfpci sound] binfmt_misc 7464 1 autofs 13332 0 (autoclean) (unused) ipt_REJECT 4024 2 (autoclean) iptable_filter 2412 1 (autoclean) ip_tables 15096 2 [ipt_REJECT iptable_filter] ide-scsi 12176 0 scsi_mod 107608 2 [sr_mod ide-scsi] ide-cd 35808 0 cdrom 33728 0 [sr_mod ide-cd] CDCEther 14492 1 acm 7904 0 (unused) mousedev 5588 1 keybdev 2976 0 (unused) hid 22340 0 (unused) input 5920 0 [mousedev keybdev hid] usb-uhci 26412 0 (unused) usbcore 78944 1 [CDCEther acm hid usb-uhci]
La primera columna muestra el nombre del módulo, la segunda su tamaño en memoria (en bytes), la tercera si está actualmene cargado (1) o no (0) y la cuarta y la quinta muestran información sobre si está en uso por otros módulos o no y, en su caso, cuáles son estos módulos).
/proc/mounts. Proporciona información sobre los sistemas de archivos actualmente montados en el sistema (ver ejemplo en sección anterior).
/proc/swaps. Muestra información sobre el estado de la memoria de intercambio, pero subdividido por particiones de intercambio. Conocer esta información puede ser interesante si el sistema dispone de múltiples particiones de este tipo.
/proc/uptime. Ofrece el tiempo (en segundos) desde que el sistema se inició, y la cantidad de este tipo en que el procesador ha estado ocioso. Por ejemplo:
3131.40 2835.67
/proc/version. Muestra la versión del núcleo y la del compilador de C (gcc). En el caso de Red Hat Linux, muestra también la versión de Red Hat instalada:
Linux version 2.4.20-20.8 (bhcompile@daffy.perf.redhat.com) (gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)) #1 Mon Aug 18 14:59:07 EDT 2003
En cuanto a los subdirectorios más relevantes de /proc/, podríamos destacar los siguientes:
/proc/#número#/. Dentro de /proc/ existe un subdirectorio por cada proceso que actualmente es conocido por el sistema. El nombre del subdirectorio es precisamente el PID (Process IDentifier) del proceso, es decir, el número entero positivo por el cual el núcleo de Linux identifica unívocamente a cada proceso en el sistema. Dentro del subdirectorio correspondiente a cada proceso podemos encontrar varios subdirectorios y archivos. Por ejemplo, si sabemos que el PID del proceso que ejecuta el emacs en el que estamos editando estas líneas es el 20540, podemos ver su contenido:
[root@yoda root]# ll /proc/20540 total 0 -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 cmdline lrwxrwxrwx 1 aterrasa aterrasa 0 dic 9 09:57 cwd -> /home/aterrasa/ /DOCBOOK/comos-linux-basico -r-------- 1 aterrasa aterrasa 0 dic 9 09:57 environ lrwxrwxrwx 1 aterrasa aterrasa 0 dic 9 09:57 exe -> /usr/bin/emacs dr-x------ 2 aterrasa aterrasa 0 dic 9 09:57 fd -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 maps -rw------- 1 aterrasa aterrasa 0 dic 9 09:57 mem -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 mounts lrwxrwxrwx 1 aterrasa aterrasa 0 dic 9 09:57 root -> / -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 stat -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 statm -r--r--r-- 1 aterrasa aterrasa 0 dic 9 09:57 status
De estos archivos, los más importantes son:
cmdline. Contiene la línea de órdenes que inició el proceso.
cwd. Es un enlace simbólico al directorio de trabajo actual del proceso.
environ. Contiene la lista de variables de entorno del proceso.
exe. Enlace simbólico que apunta al fichero ejecutable (normalmente binario) del proceso.
fd/. Directorio que contiene enlaces simbólicos a los descriptores de fichero abiertos por el proceso actualmente.
maps. Contiene información acerca de los mapas de memoria (virtual) ocupada por el proceso, incluyendo información sobre la ubicación de sus ejecutables y bibliotecas.
stat, statm, y status. Estos archivos contienen diferentes imágenes del estado actual del proceso, incluyendo estado de la memoria, información de protección, etc.
/proc/self/. Enlace simbólico al subirectorio del proceso que actualmente está en ejecución.
/proc/fs/. Contiene información sobre los directorios que actualmente se están exportando (sólo tiene información si el sistema es un servidor NFS).
/proc/ide/. Contiene información sobre los discos duros IDE que están conectados en el sistema, incluyendo datos de los manejadores, opciones de configuración y estadísticas de uso.
/proc/net/. Este directorio contiene información exhaustiva sobre protocolos, parámetros y estadísticas relacionadas con el acceso a la red.
/proc/scsi/. Equivale al directorio /proc/ide/, pero para dispositivos SCSI.
/proc/sys/. Este subdirectorio es especial y distinto del resto de directorios que hemos visto hasta ahora, puesto que no sólo permite leer informacion actual del núcleo, sino que permite modificarla en algunos casos. Esto se explica con más detalle en la siguiente sección.