El sistema de archivos /proc

Tal como muestra el título, el sistema de archivos "proc" se monta en el directorio /proc/ y, si listamos su contenido, veremos que se encuentra lleno de archivos y directorios. Por ejemplo:

[root@yoda]# ls -Cp /proc/
1/      24693/  5039/  5284/  5371/  apm          locks
10/     24696/  5048/  5289/  5373/  bus/         mdstat
11/     24697/  5113/  5303/  5385/  cmdline      meminfo
15/     24699/  5122/  5311/  5395/  cpuinfo      misc
2/      24701/  5126/  5313/  5398/  devices      modules
20554/  3/      5144/  5314/  5412/  dma          mounts@
22394/  4/      5152/  5316/  5642/  driver/      mtrr
22397/  4419/   5153/  5318/  5674/  execdomains  net/
24493/  4420/   5154/  5320/  5675/  fb           partitions
24507/  4743/   5155/  5325/  5707/  filesystems  pci
24556/  4865/   5156/  5326/  5813/  fs/          scsi/
24565/  4869/   5157/  5328/  5814/  ide/         self@
24620/  4887/   5158/  5329/  6/     interrupts   slabinfo
24653/  4906/   5170/  5331/  6912/  iomem        stat
24654/  4965/   5171/  5332/  6915/  ioports      swaps
24657/  4966/   5190/  5333/  7/     irq/         sys/
24659/  4978/   5233/  5335/  72/    kcore        sysvipc/
24685/  5/      5276/  5336/  7775/  kmsg         tty/
24688/  5015/   5279/  5348/  8/     ksyms        uptime
24689/  5029/   5282/  5367/  9/     loadavg      version
    

Sin embargo, este contenido no se encuentra guardado en ningún dispositivo físico (disco, disquete, cd, etc.), sino que es construido y presentado dinámicamente cada vez que le pedimos al núcleo que lo muestre, y lo mismo ocurre cuando visualizamos el contenido de sus archivos y subdirectorios. Este tipo de sistema de archivos se denomina sistema de archivos virtual. Si listamos de nuevo este directorio en otro momento, o en otro sistema, es posible que el listado no coincida exactamente con el del ejemplo, aunque algunos ficheros siempre serán listados; de igual forma, es posible que el contenido de los archivos y directorios también difiera. Ello es debido a que el contenido del directorio refleja el estado actual del núcleo de Linux, y evidentemente este estado varía con el tiempo y de un sistema a otro (por ejemplo, por disponer de hardware distinto).

Más formalmente, podemos definir /proc/ como una interfaz entre el núcleo de Linux y el nivel de usuario con la forma de un sistema de archivos virtual. Así, el núcleo de Linux presenta una manera única y homogénea de presentar su información interna y se convierte en la alternativa a utilizar múltiples herramientas particulares como las que citábamos en el apartado anterior. La ventaja principal es que, aunque Linux incorpora muchas de ellas (en algunos casos, por compatibilidad con otras versiones de UNIX), no es imprescindible disponer de una herramienta por cada información que el núcleo pone a disposición del usuario, puesto que toda esa información está en /proc. Esto es especialmente útil en el caso de Linux, puesto que como veíamos en el Capítulo 4. El núcleo de Linux, el desarrollo del núcleo es independiente del desarrollo de las herramientas y programas que se ejecutan por encima (lo que se denomina "distribución").

Por ejemplo, veamos la información del mandato mount, seguida de la consulta del fichero correspondiente de /proc/:

[yoda@root]# mount
/dev/hdb1 on / type ext2 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hdb3 on /mnt/backup type ext2 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
[yoda@root]#
[yoda@root]# cat /proc/mounts 
/dev/root / ext2 rw 0 0
/proc /proc proc rw 0 0
usbdevfs /proc/bus/usb usbdevfs rw 0 0
/dev/hdb3 /mnt/backup ext2 rw 0 0
none /dev/pts devpts rw 0 0
none /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
    

Como vemos, el resultado es el mismo (probablemente mount interroga internamente a /proc/mounts), aunque normalmente el mandato muestra ls información de manera algo más elaborada para el usuario. En muchos casos, la información que muestran los archivos de /proc/ suele ser poco autoexplicativa, y es conveniente conocer de antemano el significado de los diferentes campos del "archivo" para interpretar correctamente lo que está comunicándonos el núcleo. Sin embargo, esto no es problema porque existe buena documentación al respecto, como por ejemplo la documentación de Red Hat Linux, en concreto la "Reference Guide" de Red Hat 9.

Los dos siguientes apartados enseñan, respectivamente, cómo obtener y modificar la información del núcleo de Linux interactuando con el sistema de archivos /proc/.