Descubriendo las posibilidades del directorio /proc 

Copyright © 2005-2017 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

Autor: Sergio González D.  

El directorio /proc es una bestia extraña. Realmente no existe, sin embargo puedes explorarlo. Sus archivos de tamaño 0 no son ni binarios ni textos, sin embargo puedes examinarlos y desplegar su contenido. Este directorio especial contiene todos los detalles de tu sistema Linux, incluyendo el kernel, procesos y parámetros de configuración. Estudiando el directorio /proc, puedes aprender como los comandos de Linux trabajan e incluso es posible realizar tareas administrativas.

Bajo Linux, todo es administrado como un archivo; incluso los dispositivos son accedidos como archivos (en el directorio /dev). Aunque que podrías pensar que archivos "normales" son ya sea texto o binarios (o posiblemente dispositivos o archivos pipe), el directorio /proc contiene una extraño tipo de archivo: archivos virtuales. Estos archivos son listados, pero realmente no existen en disco; el sistema operativo los crea al vuelo si tratas de leerlos.

La mayoría de los archivos virtuales siempre tienen una marca de tiempo (timestamp) actual, lo que indica que están constantemente siendo actualizados. El directorio /proc en si mismo es creado cada vez que arrancas tu equipo. Se requiere ser root para poder examinar completamente el directorio en su totalidad; algunos de los archivos (tales como los relacionados a procesos) son propiedad del usuario que los ejecutó. Y aunque casi tdos los archivos son de solo lectura, hay algunos pocos con permisos de escritura (notablemente en /proc/sys) que permiten realizar cambios en los parámetros del kernel. (Queda claro que debes ser muy cuidados con esto)


Organización del directorio /proc

El directorio /proc está organizado en directorios virtuales y subdirectorios, que agrupan archivos de tópicos similares. Trabajando como root el comando ls /proc te despliega algo como lo siguiente:

#> ls /proc
1     2432  3340  3715  3762  5441  815        devices      modules
129   2474  3358  3716  3764  5445  acpi       diskstats    mounts
1290  248   3413  3717  3812  5459  asound     dma          mtrr
133   2486  3435  3718  3813  5479  bus        execdomains  partitions
1420  2489  3439  3728  3814  557   dri        fb           self
165   276   3450  3731  39    5842  driver     filesystems  slabinfo
166   280   36    3733  3973  5854  fs         interrupts   splash
2     2812  3602  3734  4     6     ide        iomem        stat
2267  3     3603  3735  40    6381  irq        ioports      swaps
2268  326   3614  3737  4083  6558  net        kallsyms     sysrq-trigger
2282  327   3696  3739  4868  6561  scsi       kcore        timer_list
2285  3284  3697  3742  4873  6961  sys        keys         timer_stats
2295  329   3700  3744  4878  7206  sysvipc    key-users    uptime
2335  3295  3701  3745  5     7207  tty        kmsg         version
2400  330   3706  3747  5109  7222  buddyinfo  loadavg      vmcore
2401  3318  3709  3749  5112  7225  cmdline    locks        vmstat
2427  3329  3710  3751  541   7244  config.gz  meminfo      zoneinfo
2428  3336  3714  3753  5440  752   cpuinfo    misc

Los directorios con números (más sobre esto en un momento) corresponden a cada proceso en ejecución; un autoenlace simbólico apunta al proceso actual. Algunos archivos virtuales proveen información sobre el hardware, tal como /proc/cpuinfo y /proc/interrupts. Otros proporcionan información relacionada a los archivos, tales como /proc/filesystems o /proc/partitions. Los archivos situados bajo /proc/sys son relacionados a la configuración de parámetros del kernel, como ya veremos.

El comando cat /proc/meminfo puede traer a la pantalla algo como lo siguiente:

# cat /proc/meminfo
MemTotal:       483488 kB
MemFree:          9348 kB
Buffers:          6796 kB
Cached:         168292 kB
...varias líneas cortadas...

Si ejecutas los comandos top o free, es posible que reconozcas algunos de estos valores. De hecho, varias utilerias muy conocidas acceden al directorio /proc para obtener su información. Por ejemplo, si tu quieres saber que tipo de kernel estás corriendo, puedes tratar con uname -srv, o ir directamente al origen y teclear cat /proc/version. Algunos otros archivos interesantes son:

  • /proc/apm: Proveé información sobre "Advanced Power Management", si es que esta instalado.
  • /proc/acpi: Un directorio similar al anterior que ofrece bastantes datos sobre el más moderno ACPI (Advanced Configuration and Power Interface). Por jemplo, para ver si tu laptop está conectada a la corriente AC, puedes usar cat /proc/acpi/ac_adapter/AC/state o en algunas distros cat /proc/acpi/ac_adapter/ACAD/state, y así obtendrás "on line" o "off line".
  • /proc/cmdline: Muestra los parámetros que fueron pasados al kernel al momento del arranque (boot time). En mi caso contiene lo siguiente: root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi, que me dice que en que partición está la raíz del filesystem, que modo VGA está en uso y más. El último parámetro tiene que ver con openSUSE's System Configuration Profile Management.
  • /proc/cpuinfo: Muestra datos sobre el procesador de tu equipo. Por ejemplo, en mi laptop, cat /proc/cpuinfo me da un listado que comienza con:.
    processor       : 0
    vendor_id       : AuthenticAMD
    cpu family      : 6
    model           : 8
    model name      : Mobile AMD Athlon(tm) XP 2200+
    stepping        : 1
    cpu MHz         : 927.549
    cache size      : 256 KB
    

    Esto muestra que solo tengo un procesador, marcado como 0 de la familia 80686 (El '6' en la familia de cpu es dígito medio): un AMD Athlon XP, corriendo a poco menos de 1GHZ.

  • /proc/loadavg: Un archivo relacionado al anterior que muestra la carga promedio del procesador; su información incluye el uso de CPU en el último minuto, últimos cinco minutos y últimos 15 minutos, asi como el número de procesos actuales ejecutándose.
  • /proc/stat: También proporciona estadísticas, pero tomando en cuenta el último boot (arranque).
  • /proc/uptime: Un archivo pequeño que solo tiene dos números: por cuantos segundos tu sistema ha estado encendido, y cuantos segundos ha estado inactivo.
  • /proc/devices: Despliega todos los dispositivos actuales configurados y cargados de caracter y bloque. /proc/ide y /proc/scsi proveen datos sobre dispositivos IDE y SCSI.
  • /proc/ioports: Te muestra información sobre las regiones usadas para comunicaciones de E/S (I/O) de esos dispositivos.
  • /proc/dma: Muestra los canales "Direct Memory Access" en uso.
  • /proc/filesystems: Muestra cuáles tipos de sistemas de archivos (filesystems) están soportados por tu kernel. Una porción de esto puede lucir como esto:
    nodev   sysfs
    nodev   rootfs
    nodev   bdev
    nodev   proc
    nodev   cpuset
    ...some lines snipped...
    nodev   ramfs
    nodev   hugetlbfs
    nodev   mqueue
           ext3
    nodev   usbfs
           ext2
    nodev   autofs
    

    La primera columna muestra si el sistema de archivos está montado en un dispositivo de bloques. En mi caso, tengo particiones configuradas con ext2 y ext3.

  • /proc/mounts: Muestra todos los "mounts" usados por tu máquina (la salida es muy similar a /etc/mtab). Similarmente, /proc/partititons y /proc/swaps muestra todas las particiones y el espacio swap respectivamente.
  • /proc/fs: Si estás exportando sistemas de archivos con NFS, este directorio tiene entre sus muchos subdirectorios y archivos a /proc/fs/nfsd/exports, que muestra los sistemas de archivos que están siendo compartidos y sus permisos.
  • /proc/net: No hay nada mejor que esto para información de red. Describir cada archivo en este directorio requeriría demasiado espacio, pero incluye dev (todos los dispositivos de red), varios archivos relacionados al firewall iptables, estadísticas de red y sockets, información sobre wireless y más.

También hay varios archivos relacionados a la RAM. Ya mencioné anteriormente /proc/meminfo, pero también tienes a tu disposición /proc/iomem, que muestra cuanta memoria RAM ha sido utilizada por tu sistema y /proc/kcore, que representa la memoría física de tu RAM. A diferencia de otros archivos virtuales, /proc/kcore muestra un tamaño que es igual a la memoria RAM más una pequeña sobrecarga. (No trates de darle cat a este archivo, porque su contenido es binario y solo desconfigurará tu pantalla). Finalmente, hay muchos archicos y directorios relacionados con el Hardware, tal como /proc/interrupts y /proc/irq, /proc/pci (para todos los dispositivos PCI), /proc/bus y demás, pero todos estos incluyen información muy específica que la mayoría de los usuarios no necesitarán.


¿Que hay en un proceso?

Como ya lo había mencionado, los directorios con nombre numérico representan a los procesos en ejecución. Cuando un proceso termina, su directorio /proc desaparece automáticamente. Si examinas cualquiera de estos directorios mientras existen, encontrarás bastantes archivos, táles como:

attr             cpuset   fdinfo    mountstats  stat
auxv             cwd      loginuid  oom_adj     statm
clear_refs       environ  maps      oom_score   status
cmdline          exe      mem       root        task
coredump_filter  fd       mounts    smaps       wchan

Veamos más de cerca a los archivos principales:

  • cmdline: Contiene el comando que inicio el proceso, con todos sus parámetros.
  • cwd: Enlace simbólico al directorio actual de trabajo (current working directory cwd) del proceso; enlaces exe a los procesos ejecutables y enlaces root a su directorio superior.
  • environ: Muestras todas las variables de ambiente para el proceso.
  • fd: Contiene los descriptores de archivo para el proceso, mostrando cuáles archivos o dispositivos lo están usando.
  • maps, statm and mem: Trabaja con la memoria en uso por el proceso.
  • stat and status: Proveé información acerca del estatus del proceso, pero el segundo es mucho más claro que el primero.

Estos archivos plantean varios retos de programación de shell scripts. Por ejemplo, si quieres cazar a los procesos zombie, puedes buscar en todos los directorios numerados y verificar si aparece "(Z) Zombie" en el archivo status. Una vez necesitaba verificar si cierto programa se estaba ejecutando: Lo que hice fue escanear y mirar a los archivos cmdline, buscando por la cadena indicada. (También puedes hacer esto con la salida del programa ps, pero no es el punto en este artículo). Y si quieres programar un programa que se vea mejor que top, toda la información que necesitas esta aqui.


Configurando el sistema: /proc/sys

/proc/sys no solo proveé información sobre el sistema, tambié facilita o permita cambiar parámetros del kernel al vuelo, y habilta o deshabilita características de usabilidad. (Por supuesto, esto puede dañar tu sistema, considérate avisado.)

Para determinar si puedes configurar un archivo o es solo de lectura, usa ls -ld; si un archivo tiene el atributo "w", significa que puedes configurar el kernel de alguna manera. Por ejemplo, ls -ld /proc/kernel/* comienza como esto:

dr-xr-xr-x 0 root root 0 2008-01-26 00:49 pty
dr-xr-xr-x 0 root root 0 2008-01-26 00:49 random
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acct
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acpi_video_flags
-rw-r--r-- 1 root root 0 2008-01-26 00:49 audit_argv_kb
-r--r--r-- 1 root root 0 2008-01-26 00:49 bootloader_type
-rw------- 1 root root 0 2008-01-26 00:49 cad_pid
-rw------- 1 root root 0 2008-01-26 00:49 cap-bound

Se puede observar que bootloader_type no está hecho para ser cambiado, pero otros archivos si lo están. Para cambiar un archivo, puedes usar algo como esto:

echo 10 > /proc/sys/vm/swappiness

Este ejemplo en particular cambiará el rendimiento de la paginación de la memoria virtual. Por cierto, estos cambios son solo temporales, y sus efectos desapareceran cuando tu reinicies el sistema; usa sysctl y el archivo de configuración /etc/sysctl.conf para afectar los cambios de manera permanente.

Veamos el nivel superior del directorio /proc/sys:

  • debug: Contiene (¡sorpresa!) información para depuración (debugging). Esto es muy bueno si estás metido en el desarrollo del kernel.
  • dev: Proveé parámetros para dispositivos específicos en tu sistema; por ejemplo, checa el directorio dev/cdrom.
  • fs: Ofrece datos sobre cada posible aspecto del sistema de archivos.
  • kernel: Te permite afectar la configuración del kernel y su operación directamente.
  • net: Te permite controlar aspectos relacionados a la red. Se cuidadoso, porque puedes perder conectividad.
  • vm: Trata con el subsistema VM.


Conclusión

El directorio especial /proc proveé información completa y detallada acerca de los trabajos internos de Linux y te permite ajustar a la medida muchos aspectos de su configuración. Si te tomas algo de tiempo para aprender las posibilidades de este directorio, estarás en posición de obtener un sistema Linux más perfecto. ¿Y no es acaso lo que todos queremos?.


LinuxTotal en:

Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.

Más artículos de LinuxTotal

Hoy en día los usuarios de Windows y Linux tenemos múltiples formas de combinarlos en el mismo equipo. Ya sea que uses el tradic....


...quien resuelve los nombres de dominio a su correspondiente IP, sería el DNS del proveedor, pero si implementamos un DNS Cache,....


El muy usado comando man, que lo encuentras en cualquier distribucción de Linux, te permite leer las páginas del manual de otros....


Imagínate que eres un administrador de sistemas Linux que trabaja desde un equipo Windows y usas Putty para conectarte a los serv....


Para Linux todo es un archivo, incluyendo dispositivos como discos duros, cdroms, disquetes, unidades de cinta, memorias usb, etc.....


ssh es quizás (en mi opinión) la mejor herramienta de comunicación que existe cuando se trata de establecer contacto con un ser....


La demanda civil entablada por la empresa SCO contra la gigante IBM causó revuelo entre la comunidad Linux y Open Source cuando e....


En este tutorial sobre listas de control de acceso en squid, aprenderás lo básico de como configurarlas y establecerlas en la co....


Como formatear disketes o floppies en Linux.....


La gente considera encriptar algunos o todos sus archivos por múltiples razones. Ya sea que no puedan depender en seguridad físi....



Copyright © LinuxTotal.com.mx 2006-2017
info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com