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 memoria (meminfo), información de la CPU (cpuinfo) y 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.
La ejecución del 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:
- /proc/cmdline – Kernel command line information.
- /proc/console – Information about current consoles including tty.
- /proc/devices – Device drivers currently configured for the running kernel.
- /proc/dma – Info about current DMA channels.
- /proc/fb – Framebuffer devices.
- /proc/filesystems – Current filesystems supported by the kernel.
- /proc/iomem – Current system memory map for devices.
- /proc/ioports – Registered port regions for input output communication with device.
- /proc/loadavg – System load average.
- /proc/locks – Files currently locked by kernel.
- /proc/meminfo – Info about system memory (see above example).
- /proc/misc – Miscellaneous drivers registered for miscellaneous major device.
- /proc/modules – Currently loaded kernel modules.
- /proc/mounts – List of all mounts in use by system.
- /proc/partitions – Detailed info about partitions available to the system.
- /proc/pci – Information about every PCI device.
- /proc/stat – Record or various statistics kept from last reboot.
- /proc/swap – Information about swap space.
- /proc/uptime – Uptime information (in seconds).
- /proc/version – Kernel version, gcc version, and Linux distribution installed.
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 archivo similar. Los más importantes y sus descripciones son los siguientes:
- cmdline – command line of the process
- environ – environmental variables
- fd – file descriptors
- limits – contains information about the limits of the process
- mounts – related information
También notará una serie de enlaces en el directorio numerado:
- cwd – a link to the current working directory of the process
- exe – link to the executable of the process
- root – link to the work directory of the process
Esto debería ayudarlo a comenzar 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.