lunes, 17 de septiembre de 2007

El sistema de archivos /proc

Muchos serán los que ven en su sistema raíz un montón de carpetas, con nombres un tanto extraños, las cuales no se saben para que se utilizan. Dentro de esta categoría estaría la carpeta /proc. Vamos a ponerle un poco de luz a esta oscura carpeta que muy pocas veces visitamos y que puede sernos de gran utilidad.Todo sistema debería ofrecer un servicio para saber que esta ocurriendo dentro del propio sistema, así como fijar algunos parámetros operacionales. En MS Windows tenemos el registro del sistema que hasta cierto punto cumple con dichas expectativas. Pero en el sistema GNU\Linux tenemos una potente sistema de archivos virtuales que es sistema /proc. Como sabemos en linux todo son archivos y procesos. Todo se guarda en archivos. Los mas comunes son los archivos de texto y los binarios, pero el sistema /proc entra en otro grupo de archivos que se denominan archivos virtuales (mas adelante veremos porque es esto así). Es por eso que decimos que /proc es un sistema de archivos virtuales.

Como sabemos el núcleo de Linux es el elemento clave del sistema, por lo tanto es importante que exista un método para intercambiar información con el. Debido a esto se creo el sistema de fichero /proc, que mejoraba la comunicación entre los usuarios y el núcleo de Linux.
En principio este sistema fue diseñado para permitir un fácil acceso a la información sobre procesos (de aquí viene su nombre), pero ahora es utilizado por cualquier elemento del núcleo que tiene algo interesante que informar.
Dentro de este directorio /proc podemos encontrar una gran cantidad de información, con muchos detalles (mas de los que nos esperaríamos), sobre el hardware del sistema y también sobre casi cualquier proceso que se esté ejecutando actualmente. Por ejemplo en /proc/modules encontraremos la lista de los módulos que tenemos instalados, mientras que en /proc/cpuinfo encontraremos información acerca del micro.
El directorio /proc/ tiene una jerarquía de fácil lectura para porder encontrar fácilmente la información que buscamos. Además, todos los archivos que contienen información referente a temas semejantes están agrupados juntos. Algunos de los archivos interesantes que aparecen dentro de este sistema de archivos son:

  • /proc/meminfo tiene estadísticas de uso de la memoria
  • /proc/cpuinfo contiene información sobre el procesador
  • /proc/sys/net/ipv4 nos muestran información sobre la pila del sistema
  • /proc/interrupts Uso de IRQ de su sistema
  • /proc/iomem Mapa actual de la memoria del sistema para diversos dispositivos.
  • /proc/pci Dispositivos PCI conocidos en el sistema
  • /proc/version Nos muestra la version del núcleo que esta instalado, así como la hora y la fecha en la que compilo
  • /proc/dev/net Info acerca de los dispositivos de red
  • /proc/net/arp Tabla ARP del sistema
  • /proc/sys/net/ipv4 parámetros de la pila TCP/IP
  • /proc/modules Muestra los módulos que tenemos instalados
  • /proc/ide/ información de los dispositivos IDE
  • /proc/scsi/ información de los dispositivos SCSI

Puede que muchos hayáis observado que existen algunos archivos de 0 bytes. Esto es debido a lo que habíamos dicho al principio: el sistema de archivos /proc es virtual, no existe realmente en el disco. Por ejemplo cuando hacemos un cat para leer un archivo en /proc/cpuinfo este es de 0 bytes. El contenido de ese archivo se genera de forma dinámica por medio de un programa que se encuentra en el núcleo y se nos muestra a nosotros por pantalla. Cabe destacar que el sistema de archivos /proc al ser un sistema virtual, los cambios que hagamos a los ajustes predeterminados no sobreviven a los reinicios. Para hacer que los cambios permanezcan al reinicio deberíamos de modificar los scripts de inicio o utilizar una herramienta que haga esto por nosotros, como podría ser sysctl (que ajusta parámetros que están bajo el directorio /proc/sys).
Además de la posibilidad de que el sistema nos de información a nosotros, nosotros también podemos pasarle información al núcleo. Si hemos sido observadores, habremos visto que alguno archivos son de solo lectura, mientras que otros son de lectura/escritura (por ejemplo en /proc/sys/net/ipv4). En este caso podremos modificar algunos de los datos al vuelo. Es bien conocida la modificación del fichero /proc/sys/net/ipv4/ip_forward para que nuestro ordenador haga de enrutador.Por ultimo decir que el sistema /proc (también llamado procfs) se monta generalmente en el sistema raiz (/proc) durante el arranque del equipo. Si vamos al fichero /etc/fstab veremos como en la primera línea se monta el sistema virtual. En caso de que no existiera tal línea habría que agregarla para que el sistema monte de forma automática el sistema cada vez que se inicie el sistema. De todas formas el procfs viene configurado actualmente en la mayoría de los núcleos por omisión. Si no tienes el procfs en su núcleo, al intentar montarlo obtendrá un mensaje como este: mount: "fs type procfs not supported by kernel". Si nos apareciera dicho mensaje habría que recompilar en kernel añadiendo el soporte para el sistema de archivos procfs.

Espero que este pequeño manual os sirva de ayuda.
Un saludo!

7 comentarios:

SLaYeR dijo...

Bueno tio... encara aplegue a temps de felicitarte!

ves espai que a estes edats ja no hi ha solucio! A lo hecho pecho!

Bueno tio, felicitats i dixa't ja la festa que acabara en tu tard o prompte!

Anónimo dijo...

De momento solo le he echado un vistazo,
pero ya me lo he guardado para leerlo con
calma, que parece bueno e interesante.

Gracias.

KrAm0x dijo...

Ok, sin problemas.

Un saludo.

Anónimo dijo...

Hay algo que no acabo de ver claro:
(del artículo):
---> /proc/meminfo tiene estadísticas de uso de la memoria
/proc/cpuinfo contiene información sobre el procesador
/proc/sys/net/ipv4 nos muestran información sobre la pila del sistema
/proc/interrupts Uso de IRQ de su sistema
---> /proc/meminfo Mapa actual de la memoria del sistema para cada dispositivo

Aún no he tenido tiempo para asegurarme de ello, pero el segundo
/proc/meminfo ¿no tendría de ser otra cosa?. Pongamos
por caso /proc/irq , (hablo de memoria pero creo recordar haberlo visto por ahí).

A ver si lo compruebo hoy o mañana.

Un saludo.

KrAm0x dijo...

Tienes toda la razón newhack, ha sido un error por mi parte.El mapa de la memoria (la memoria asiganda)para algunos dispositivos se encuentra en /proc/iomem.
Un saludo

Anónimo dijo...

Gracias.

Y aún una sugerencia para otro artículo.
( Te estoy dando caña ¿eh? ).

Ya que el tema da para mucho, se podría
hacer un segundo artículo que explique
un poco mas sobre como sacar información
de esas ristras de números que aparecen
en los reportes, como p.e. en /proc/misc , o mas en /proc/diskstats

Es solo una idea ...

KrAm0x dijo...

No esta mal la idea que me propones... Seria un buen trabajo de investigación. De todas formas puedes encontrar más información en "man proc" o en la documentación de linux.

Un saludo.