Explorando el sistema de archivos/proc en Linux


Hoy, vamos a echar un vistazo al directorio/proc y familiarizarnos con él. El directorio/proc está presente en todos los sistemas Linux, independientemente del tipo o arquitectura.

Un concepto erróneo que debemos aclarar de inmediato es que el directorio/proc NO es un sistema de archivos real, en el sentido del término. Es un sistema de archivos virtual. Dentro de los procfs hay información sobre procesos y otra información del sistema. Se asigna a/proc y se monta en el momento del arranque.

Primero, entremos en el directorio/proc y echemos un vistazo:

# cd /proc

Lo primero que notará es que hay algunos archivos que suenan familiares, y luego un montón de directorios numerados. Los directorios numerados representan procesos, más conocidos como PID, y dentro de ellos, un comando que los ocupa. Los archivos contienen información del sistema, como la memoria (meminfo), la información de la CPU (cpuinfo) y los sistemas de archivos disponibles.

Lea también: Comando gratuito de Linux para verificar la memoria física e intercambiar memoria

Primero, echemos un vistazo a uno de los archivos:

# cat /proc/meminfo

que devuelve algo similar a esto:

MemTotal:         604340 kB
MemFree:           54240 kB
Buffers:           18700 kB
Cached:           369020 kB
SwapCached:            0 kB
Active:           312556 kB
Inactive:         164856 kB
Active(anon):      89744 kB
Inactive(anon):      360 kB
Active(file):     222812 kB
Inactive(file):   164496 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         89724 kB
Mapped:            18012 kB
Shmem:               412 kB
Slab:              50104 kB
SReclaimable:      40224 kB
...

Como puede ver,/proc/meminfo contiene mucha información sobre la memoria de su sistema, incluida la cantidad total disponible (en kb) y la cantidad libre en las dos líneas superiores.

Ejecutar el comando cat en cualquiera de los archivos en/proc generará su contenido. La información sobre cualquier archivo está disponible en la página de manual ejecutando:

# man 5 /proc/<filename>

Le daré un resumen rápido de los archivos de/proc:

  1. /proc/cmdline: información de la línea de comandos del kernel.
  2. /proc/console: información sobre las consolas actuales, incluido tty.
  3. /proc/devices: controladores de dispositivo configurados actualmente para el kernel en ejecución.
  4. /proc/dma: información sobre los canales DMA actuales.
  5. /proc/fb: dispositivos Framebuffer.
  6. /proc/filesystems: sistemas de archivos actuales compatibles con el kernel.
  7. /proc/iomem: mapa de memoria del sistema actual para dispositivos.
  8. /proc/ioports: regiones de puerto registradas para la comunicación de entrada y salida con el dispositivo.
  9. /proc/loadavg: promedio de carga del sistema.
  10. /proc/locks: archivos actualmente bloqueados por el kernel.
  11. /proc/meminfo: información sobre la memoria del sistema (consulte el ejemplo anterior).
  12. /proc/misc: controladores varios registrados para varios dispositivos principales.
  13. /proc/modules: módulos del kernel cargados actualmente.
  14. /proc/mounts: lista de todos los montajes en uso por sistema.
  15. /proc/partitions: información detallada sobre las particiones disponibles para el sistema.
  16. /proc/pci: información sobre cada dispositivo PCI.
  17. /proc/stat: registro o varias estadísticas guardadas desde el último reinicio.
  18. /proc/swap: información sobre el espacio de intercambio.
  19. /proc/uptime: información de tiempo de actividad (en segundos).
  20. /proc/version: versión de Kernel, versión de gcc y distribución de Linux instaladas.

Dentro de los directorios numerados de/proc encontrará algunos archivos y enlaces. Recuerde que los números de estos directorios se correlacionan con el PID del comando que se ejecuta dentro de ellos. Usemos un ejemplo. En mi sistema, hay un nombre de carpeta/proc/12:

# cd /proc/12
# ls
attr        coredump_filter  io         mounts      oom_score_adj  smaps    wchan
autogroup   cpuset           latency    mountstats  pagemap        stack
auxv        cwd              limits     net         personality    stat
cgroup      environ          loginuid   ns          root           statm
clear_refs  exe              maps       numa_maps   sched          status
cmdline     fd               mem        oom_adj     schedstat      syscall
comm        fdinfo           mountinfo  oom_score   sessionid      task

Si corro:

# cat /proc/12/status

Obtengo lo siguiente:

Name:	xenwatch
State:	S (sleeping)
Tgid:	12
Pid:	12
PPid:	2
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:
Threads:	1
SigQ:	1/4592
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	ffffffffffffffff
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	1
Cpus_allowed_list:	0
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	84
nonvoluntary_ctxt_switches:	0

¿Entonces, qué significa esto? Bueno, la parte importante está arriba. Podemos ver en el archivo de estado que este proceso pertenece a xenwatch. Su estado actual es inactivo y su ID de proceso es 12, obviamente. También podemos ver quién está ejecutando esto, ya que UID y GID son 0, lo que indica que este proceso pertenece al usuario root.

En cualquier directorio numerado, tendrá una estructura de archivos similar. Los más importantes y sus descripciones son los siguientes:

  1. cmdline - línea de comando del proceso
  2. medio ambiente - variables ambientales
  3. fd - descriptores de archivos
  4. límites: contiene información sobre los límites del proceso
  5. montajes: información relacionada

También notará una serie de enlaces en el directorio numerado:

  1. cwd: un enlace al directorio de trabajo actual del proceso
  2. exe: enlace al ejecutable del proceso
  3. root: enlace al directorio de trabajo del proceso

Esto debería ayudarlo a familiarizarse con el directorio/proc. También debería proporcionar información sobre cómo una serie de comandos obtienen su información, como el tiempo de actividad, lsof, mount y ps, solo por nombrar algunos.