|
|
Este documento está disponible en los siguientes idiomas: English Castellano ChineseGB Deutsch Francais Nederlands Russian Turkce Polish |
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 /procResumen:
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. |
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.
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.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
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.
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/mozillaEl 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 statusEl 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.
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.comAsí, 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.
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_allEsto 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.comPara volver al comportamiento por defecto haremos
$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_allHay 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.
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.
|
Contactar con el equipo de LinuFocus
© Sandeep Grover, FDL LinuxFocus.org |
Información sobre la traducción:
|
2004-02-04, generated by lfparser version 2.43