[LinuxFocus-icon]
<--  | Hogar  | Mapa  | Indice  | Busqueda

Noticias | Arca | Enlaces | Sobre LF
Este documento está disponible en los siguientes idiomas: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Russian  Turkce  Polish  

[Sandeep Grover]
por Sandeep Grover
<sandeep<at>Magma-DA.com>

Sobre el autor:

Sandeep Grover trabaja para Magma Design Automation, India -- la compañía de EDA (Electronic Design Automation) de más rápido crecimiento. En su tiempo libre, explora la parte interna de Linux y algún día, ¡espera contribuir al Núcleo de Linux!



Traducido al español por:
Miguel Alfageme Sánchez <malfageme<at>terra.es>

Contenidos:

 

Entendiendo /proc

[the proc filesystem]

Resumen:

El núcleo de Linux proporciona un mecanismo para acceder a sus estructuras de datos internas y también para cambiar sus opciones en caliente a través del sistema de ficheros /proc. Discutiremos acerca del sistema de ficheros /proc orientado hacia la arquitectura Intel x86; aunque los conceptos básicos serán los mismos para un Linux bajo cualquier otra plataforma.


_________________ _________________ _________________

 

/proc - un Sistema de Ficheros Virtual

El sistema de ficheros /proc es un mecanismo utilizado por el núcleo y por los módulos del núcleo para enviar información a los procesos (de ahí el nombre /proc). Este pseudo sistema de ficheros nos permite interactuar con las estructuras de datos internas del núcleo, obteniendo información útil acerca de los procesos, y nos permite también cambiar la configuración (modificando los parámetros del núcleo) sobre la marcha. /proc se almacena en memoria, al contrario que los otros sistemas de ficheros, que son almacenados en disco. Si miramos el fichero /proc/mounts (que lista todos los sistemas de ficheros montados, como el comando "mount"), veremos una línea como esta:


grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc está controlado por el núcleo, y no tiene un dispositivo por detrás de él. Debido a que principalmente contiene información de estado controlada por el núcleo, el lugar más lógico donde almacenar la información es en la memoria controlada por el núcleo. Un 'ls -l' en /proc nos revela que la mayoría de los ficheros son de 0 bytes de tamaño; a pesar de eso, cuanto mostramos el contenido del fichero, vemos un poco de información. ¿Cómo puede ser esto posible? Esto sucede porque el sistema de ficheros /proc, como cualquier otro sistema de ficheros se registra a sí mismo en la capa de Sistema de Ficheros Virtual (VFS - Virtual File System). Sin embargo, cuando el VFS realiza llamadas pidiendo los i-nodos de ficheros/directorios, el sistema de ficheros /proc crea esos ficheros/directorios a partir de la información del núcleo.

 

Montando el Sistema de Ficheros proc

Si todavía no está montado en el sistema, el sistema de ficheros proc se puede montar ejecutando el comando siguiente -

mount -t proc proc /proc

El comando de arriba debería montar con éxito su sistema de ficheros proc. Por favor lea la página del man de mount para más detalles.

 

Vizualizando los ficheros /proc

Los ficheros /proc se pueden utilizar para acceder a información sobre el estado del núcleo, los atributos de la máquina, el estado de los procesos que estén corriendo, etc. La mayoría de los ficheros en el directorio /proc proporcionan el vistazo más actualizado posible del entorno físico del sistema. Aunque estos ficheros /proc son virtuales, se pueden ver con cualquier editor como 'more', 'less' o 'cat'. Cuando un editor o programa intenta abrir un fichero virtual, el fichero se crea sobre la marcha a partir de la información del núcleo. He aquí algunos resultados interesantes que obtuve en mi sistema

$ ls -l /proc/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_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 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1998.85

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 6
cpu MHz         : 1000.119
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
sep_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 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips        : 1992.29

Este es el resultado para una máquina con dos CPUs. La mayor parte de la información de arriba es autoexplicativa, y nos da información útil sobre el hardware del sistema. Parte de la información que hay en los ficheros /proc está codificada, existiendo diversas utilidades que interpretan esta información y la muestran en un formato legible. Algunas de estas utilidades son: 'top', 'ps', ápm' etc.

 

Obteniendo información útil sobre el sistema/núcleo


Se puede utilizar el Sistema de Ficheros Proc para obtener información útil acerca del sistema y del kernel actual. Debajo se enumeran algunos ficheros importantes.

Existen muchos más ficheros en el /proc aparte de los listados. Un lector que esté alerta hará un 'more' en cada fichero del directorio /proc o leerá [1] más información acerca de los ficheros presentes en /proc. Es mejor utilizar 'more' y no 'cat' hasta que conozcamos algo del sistema de ficheros, ya que algunos archivos (e.g. kcore) pueden ser muy grandes.

 

Información sobre los procesos en ejecución

El sistema de ficheros /proc se puede utilizar para obtener información sobre cualquier proceso en ejecución. Existen unos cuantos subdirectorios numerados dentro de /proc. Cada directorio numerado se corresponde con un identificador de proceso (PID). Así, para cada proceso en ejecución, existe un subdirectorio dentro de /proc llamado como su PID. Dentro de estos subdirectorios están los ficheros que proporcionan importantes detalles acerca del estado y entorno de un proceso. Probemos a buscar un proceso en ejecución.

$ ps -aef | grep mozilla
root 32558 32425 8  22:53 pts/1  00:01:23  /usr/bin/mozilla
El comando anterior muestra que existe un mozilla en ejecución con PID 32558. De acuerdo con esto, debería haber un directorio en /proc con el número 32558.

$ ls -l /proc/32558
total 0
-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline
-r--r--r--    1 root  root            0 Dec 25 22:59 cpu
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 cwd -> /proc/
-r--------    1 root  root            0 Dec 25 22:59 environ
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------    2 root  root            0 Dec 25 22:59 fd/
-r--r--r--    1 root  root            0 Dec 25 22:59 maps
-rw-------    1 root  root            0 Dec 25 22:59 mem
-r--r--r--    1 root  root            0 Dec 25 22:59 mounts
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //
-r--r--r--    1 root  root            0 Dec 25 22:59 stat
-r--r--r--    1 root  root            0 Dec 25 22:59 statm
-r--r--r--    1 root  root            0 Dec 25 22:59 status
El fichero "cmdline" contiene el comando invocado para lanzar el proceso. El fichero "environ" contiene las variables de entorno del proceso. "status" guarda la información de estado del proceso, incluídos los identificadores de usuario (UID) y grupo (GID) del usuario que ejecuta el proceso, el identificador del proceso padre (PPID) que instanció el PID, y el estado actual del proceso, por ejemplo "Sleeping" o "Running". Cada directorio de proceso también tiene algunos enlaces simbólicos. "cwd" es un enlace al directorio actual del proceso, "exe" al programa ejecutable del proceso, "root" es un enlace al directorio que el proceso ve como directorio raíz (normalmente "/"). El directorio "fd" contiene enlaces a los descriptores de ficheros que utiliza el proceso. La entrada "cpu" aparece sólo en núcleos de Linux SMP. Contiene un desglose de tiempos de proceso por CPU.

/proc/self es un subdirectorio interesante. Permite a un programa utilizar /proc para encontrar información sobre su propio proceso. La entrada /proc/self es un enlace simbólico al directorio /proc correspondiente al proceso que accede al direcorio /proc.

 

Interactuando con el núcleo a través del /proc


La mayoría de los ficheros en /proc de los que hablamos antes son de sólo lectura. Sin embargo, el sistema de ficheros /proc proporciona un método para interactuar con el núcleo a través de ficheros de lectura-escritura. Escribiendo en uno de estos ficheros podemos cambiar el estado del núcleo y, por tanto, hay que tener cuidado a la hora de cambiar estos ficheros. El directorio /proc/sys es el que acoje todos los ficheros de lectura-escritura y, de esta forma, se puede emplear para cambiar el comportamiento del núcleo.

/proc/sys/kernel - Este directorio contiene información que refleja el comportamiento general del núcleo. /proc/sys/kernel/{domainname, hostname} contiene el nombre de dominio y el nombre de host de la máquina/red. Estos ficheros se pueden configurar para cambiar estos nombres.

$ hostname
machinename.domainname.com

$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename"  > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com

Así, modificando el fichero dentro del sistema de ficheros /proc, somos capaces de modificar el nombre de host. Existen un montón de ficheros configurables dentro de /proc/sys/kernel/. De nuevo, es imposible enumerar cada uno de ellos aquí, por lo que se espera que los lectores se recorran en detalle este directorio.
Otro directorio configurable es /proc/sys/net. Los ficheros dentro de este directorio se pueden modificar para cambiar las propiedades de red de nuestra máquina/red. E.g, modificando un fichero, podemos ocultar nuestra máquina.

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Esto ocultará nuestra máquina dentro de la red, ya que inhibe las respuestas a icmp_echos. La máquina no responderá a las peticiones de ping de otras máquinas.

$ ping machinename.domainname.com
no answer from machinename.domainname.com
Para volver al comportamiento por defecto haremos
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Hay montones de subdirectorios dentro de /proc/sys que se pueden modificar para cambiar las propiedades del núcleo. Véase [1], [2] para información detallada.

 

Conclusión

El sistema de ficheros /proc proporciona una interfaz basada en ficheros a la zona interna de Linux. Nos ayuda a determinar el estado y configuración de varios dispositivos y procesos en un sistema. Entender y aplicar el conocimiento sobre este sistema de ficheros será una de las claves para obtener lo máximo de nuestro sistema Linux.

 

Bibliografía


 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

<--, regresar al índice de este número

Contactar con el equipo de LinuFocus
© Sandeep Grover, FDL
LinuxFocus.org
Información sobre la traducción:
en --> -- : Sandeep Grover <sandeep<at>Magma-DA.com>
en --> es: Miguel Alfageme Sánchez <malfageme<at>terra.es>

2004-02-04, generated by lfparser version 2.43