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.