Cómo solucionar problemas con el sistema de archivos proc

Los archivos importantes en proc proporcionan información sobre los procesos en ejecución que ayudarán en la depuración y solución de problemas.

El sistema de archivos proc es una característica importante de Linux que no puedes ignorar. proc es un pseudo o virtual sistema de archivos que proporciona una interfaz para las estructuras de datos del kernel.

En otras palabras, proc no es un sistema de archivos real en el sentido del mundo real. Más bien, reside solo en la memoria y no en un disco. Es montado automáticamente por el sistema.

La mayor parte de su contenido son archivos y directorios regulares. Por lo tanto, puedes utilizar la mayoría de las herramientas regulares de Linux para navegar por el sistema de archivos proc. Los ejemplos en este artículo deberían ejecutarse igual en cualquier distribución de Linux. Mi sistema usa:

Uso básico de proc

Para averiguar dónde reside el sistema de archivos /proc, debes ejecutar el comando mount y buscar proc. Aquí, puedes ver que proc está montado en el directorio /proc:

Debes moverte al directorio /proc y explorarlo. Verás muchos directorios con números; los números son solo ID de proceso (PID) para los procesos que se están ejecutando. Los archivos con nombres son archivos generales que son aplicables en todo el sistema y no están relacionados con un proceso específico:

Debes comenzar explorando algunos archivos generales de todo el sistema. Por ejemplo, /proc/cpuinfo muestra información sobre la CPU en el sistema, específicamente, la marca, modelo, número de núcleos, velocidad, indicadores de CPU, etc. :

Del mismo modo, /proc/meminfo proporciona información sobre la memoria primaria o RAM en el sistema. También proporciona estadísticas adicionales, como la cantidad de memoria utilizada, libre, etc:

Para ver todos los módulos del kernel que están cargados, debes ver el archivo /proc/modules:

Para ver qué sistemas de archivos son compatibles con tu sistema, debes consultar /proc/filesystems:

A continuación, debes ver los archivos por proceso; por ejemplo, systemd, que tiene un PID de 1:

Dirígete al directorio llamado 1 dentro de /proc y observa qué hay allí. Hay muchos archivos presentes, y sus nombres se explican por sí mismos:

Para averiguar si estos archivos están presentes para cada uno de los procesos, selecciona la ID de shell actual.

Puedes obtener esa información ejecutando echo $$$$ es una variable especial que guarda el PID de la shell actual. Dirígete a /proc y haz cd en el directorio con el mismo número que el PID. Los archivos son casi idénticos a los del PID 1 o systemd:

Archivos

Para ver qué contienen estos archivos, debes ejecutar un proceso de larga duración. Abre una terminal y ejecuta el comando tty para ver qué terminal estás utilizando. Luego escribe el comando cat y presiona Enter. Este comando se aplicará y esperará tu entrada:

Debes abrir otra terminal y encontrar el PID de cat usando el comando pgrep:

Ahora, debes explorar el primer archivo por proceso, cmdline. Este archivo muestra cómo se ejecuta la línea de comandos, si se utiliza algún parámetro, etc.:

Luego, debes ver el directorio llamado cwd, que es una especie de enlace simbólico (symlink) al directorio donde se ejecutó el comando cat. En este caso, eso es /root:

Si se ejecuta un binario y se genera un proceso, abre algunos archivos de forma predeterminada.

En general, abre un estándar de entrada (stdin), un estándar de salida (stdout) y un error estándar (stderr).

Si listas el directorio fd en /proc/ seguido del PID, puedes ver que devuelve tres enlaces simbólicos, todos apuntando al terminal (pts2) que utilizaste para ejecutar el comando:

Otro archivo importante es exe, que es un enlace simbólico que apunta a la ruta absoluta del binario que se ejecutó. En este caso, es la ruta del comando cat:

Del mismo modo, si haces cat al archivo por proceso Environ, se pueden ver todas las variables de entorno que se definen para el proceso cat:

Archivos importantes en proc

Los ejemplos anteriores proporcionan mucha información sobre los procesos en ejecución y tu sistema en general que pueden ayudar en la resolución de problemas.

Archivos importantes por proceso

Los siguientes son archivos importantes por proceso para buscar en el sistema de archivos /proc/:

  • /proc/$pid/cmdline Contiene la línea de comandos completa para el proceso
  • /proc/$pid/cwd Enlace simbólico al directorio de trabajo actual del proceso
  • /proc/$pid/environment Contiene el entorno inicial que se estableció cuando se inició el programa
  • /proc/$pid/exe Enlace simbólico a la ruta del archivo que se ejecutó
  • /proc/$pid/fd Subdirectorio para listar archivos que han sido abiertos por el proceso
  • /proc/$pid/io Contiene estadísticas de Entrada/salida para el proceso
  • /proc/$pid/limits Muestra el límite de recursos del proceso
  • /proc/$pid/maps Regiones de memoria actualmente mapeadas y permisos de acceso
  • /proc/$pid/stack Rastreo de llamadas a funciones en el proceso conjunto de kernel
  • /proc/$pid/stat Información de estado sobre el proceso
  • /proc/$pid/task/ Directorio que contiene información de hilo

Archivos importantes de todo el sistema

Aquí hay una lista de archivos generales importantes (es decir, no específicos de ningún proceso):

  • /proc/cmdline Argumentos pasados ​​al kernel de Linux durante el tiempo de arranque
  • /proc/cpuinfo información relacionada con la CPU
  • /proc/meminfo Estadísticas de uso de memoria
  • /proc/filesystems Listado de sistemas de archivos soportados por el kernel
  • /proc/modules Módulos del kernel que están cargados actualmente
  • /proc/particitions Información sobre cada partición en el sistema
  • /proc/swaps Información sobre el espacio de intercambio en el sistema
  • /proc/selfDirectory se refiere al proceso de acceso al sistema de archivos /proc
  • /proc/slabinfo Información sobre cachés de kernel
  • /proc/sys Varios archivos y subdirectorios sobre las variables del kernel

Pasos adicionales

Esta descripción general del sistema de archivos proc solo toca las opciones que ofrece. Para obtener más información, debes hacer uso de man proc o acceder a la versión en línea de la página man de proc.