GNU/Linux >> Tutoriales Linux >  >> Linux

Solucionar problemas con el sistema de archivos proc en Linux

El procedimiento El sistema de archivos es una característica importante de Linux que no puede ignorar. proc es un sistema de archivos pseudo o virtual 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. El sistema lo monta automáticamente.

La mayoría de su contenido son archivos y directorios regulares, por lo que puede usar la mayoría de las herramientas regulares de Linux para navegar por el proc sistema de archivos Los ejemplos de este artículo deberían ejecutarse de la misma manera en cualquier distribución de Linux. Mi sistema usa:

$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.8 (Maipo)
$
 
$ uname  -r
3.10.0-1127.el7.x86_64
$

Uso básico de procesos

Para saber dónde está el /proc reside el sistema de archivos, ejecute el mount comando y busque proc . Aquí puede ver que proc está montado en el /proc directorio:

$ mount | grep proc 
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9506)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
$

Pasar a /proc directorio y explorarlo. Verá 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 se aplican a todo el sistema y no están relacionados con un proceso específico:

$ cd /proc/
$ pwd
/proc
$ ls
1      157    22827  33    3413  3618  384   4709  512   5571  66    741   798   88         consoles     keys          scsi
10     15868  23     3340  3414  362   385   4768  513   5581  6723  742   799   880        cpuinfo      key-users     self
101    15900  23323  3341  3415  3622  39    4769  514   56    68    7466  8     891        crypto       kmsg          slabinfo
1033   16     23370  3342  346   363   392   4770  515   5637  69    747   80    9          devices      kpagecount    softirqs
104    17     23380  3343  3467  364   394   48    516   5652  7     75    800   906        diskstats    kpageflags    stat
10416  17580  23383  3344  347   365   4     4804  517   57    70    76    8367  928        dma          loadavg       swaps
105    18     23469  3346  349   37    40    4805  518   58    7071  77    839   96         driver       locks         sys
106    19     23491  3365  35    374   4094  4807  519   59    71    78    840   98         execdomains  mdstat        sysrq-trigger
107    2      23524  3366  351   375   4096  482   52    6     7199  783   842   9838       fb           meminfo       sysvipc
11     20767  23527  3392  352   376   41    483   53    601   72    784   8446  99         filesystems  misc          timer_list
11412  21     24     3397  3523  377   4180  49    5347  61    73    785   85    993        fs           modules       timer_stats
12     21014  26     3398  358   378   42    494   5348  62    735   786   86    994        interrupts   mounts        tty
120    21035  27     34    359   379   428   495   54    624   736   79    869   9970       iomem        mtrr          uptime
1263   21059  28     3408  36    38    43    508   5421  625   737   793   87    acpi       ioports      net           version
1265   21083  29     3409  360   380   44    509   5463  63    738   794   870   buddyinfo  ipmi         pagetypeinfo  vmallocinfo
1272   22     30     3410  3602  381   45    51    5464  636   739   795   874   bus        irq          partitions    vmstat
13     22055  31     3411  3603  382   46    510   5500  64    74    796   878   cgroups    kallsyms     sched_debug   zoneinfo
14     22074  32     3412  361   383   47    511   5519  65    740   797   879   cmdline    kcore        schedstat
$

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

$ cat /proc/cpuinfo

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

$ cat /proc/meminfo

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

$ cat /proc/modules

Para ver qué sistemas de archivos son compatibles con su sistema, consulte /proc/filesystems :

$ cat /proc/filesystems

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

$ ps aux | grep -i systemd | head -1
root         1  0.0  0.0 195976  9088 ?        Ss   Mar03   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
$

Mover al directorio llamado 1 dentro de /proc y ver lo que hay. Hay muchos archivos presentes, y sus nombres se explican por sí mismos:

$ cd /proc/1
$ pwd
/proc/1
$

$ ls
attr        cmdline          environ  io         mem         ns             pagemap      sched      stack    task
autogroup   comm             exe      limits     mountinfo   numa_maps      patch_state  schedstat  stat     timers
auxv        coredump_filter  fd       loginuid   mounts      oom_adj        personality  sessionid  statm    uid_map
cgroup      cpuset           fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps       net         oom_score_adj  root         smaps      syscall
$

Para averiguar si estos archivos están presentes para cada uno de los procesos, elija el ID de shell actual. Puede obtener esa información ejecutando echo $$ . $$ es una variable especial que guarda el PID del shell actual. Ir a /proc y cd en el directorio con el mismo número que el PID. Los archivos son casi idénticos a los de PID 1 o systemd:

$ echo $$
21059
$
$ cd /proc/21059
$ pwd
/proc/21059
$
$ ls
attr        cmdline          environ  io         mem         ns             pagemap      sched      stack    task
autogroup   comm             exe      limits     mountinfo   numa_maps      patch_state  schedstat  stat     timers
auxv        coredump_filter  fd       loginuid   mounts      oom_adj        personality  sessionid  statm    uid_map
cgroup      cpuset           fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps       net         oom_score_adj  root         smaps      syscall
$

Para ver qué contienen estos archivos, ejecute un proceso de ejecución prolongada. Abra una terminal y ejecute el tty comando para ver qué terminal está utilizando. Luego escribe el gato Comando y pulsa Intro . Este comando se sentará y esperará su entrada:

$ tty
/dev/pts/2
$
$ cat

Abre otra terminal y encuentra el PID de cat usando el pgrep comando:

$ pgrep cat
24335
$

Ahora, explore el primer archivo por proceso, cmdline . Este archivo muestra cómo se ejecuta la línea de comando, si se utilizan parámetros, etc.:

$ cat /proc/24335/cmdline 
cat$

A continuación, busque en el directorio llamado cwd , que es una especie de enlace simbólico (symlink) al directorio donde el gato se ejecutó el comando; en este caso, es /root :

$ ls -l  /proc/24335/cwd
lrwxrwxrwx. 1 root root 0 Mar  4 03:35 /proc/24335/cwd -> /root
$

Si se ejecuta un binario y se genera un proceso, abre algunos archivos de forma predeterminada. En general, abre un estándar en (stdin ), salida estándar (stdout ) y un error estándar (stderr ). Si enumera el fd directorio bajo /proc/ seguido del PID, puede ver que devuelve tres enlaces simbólicos, todos apuntando al terminal (pts2 ) que se utilizó para ejecutar el comando:

$ ls -l  /proc/24335/fd/
total 0
lrwx------. 1 root root 64 Mar  4 03:35 0 -> /dev/pts/2
lrwx------. 1 root root 64 Mar  4 03:35 1 -> /dev/pts/2
lrwx------. 1 root root 64 Mar  4 03:35 2 -> /dev/pts/2
$

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 el camino del gato comando:

$ ls -l /proc/24335/exe
lrwxrwxrwx. 1 root root 0 Mar  4 03:35 /proc/24335/exe -> /usr/bin/cat
$

Del mismo modo, si gato el medio ambiente archivo por proceso, puede ver todas las variables de entorno definidas para cat proceso:

$ cat /proc/24335/environ

Archivos importantes en proceso

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Los ejemplos anteriores proporciona mucha información sobre los procesos en ejecución y su sistema en general que puede ayudar a depurar y solucionar problemas.

Archivos importantes por proceso

Los siguientes son archivos importantes por proceso que debe buscar en /proc/ sistema de archivos:

  • /proc/$pid/cmdline Contiene la línea de comando completa para el proceso
  • /proc/$pid/cwd Enlace simbólico al directorio de trabajo actual del proceso
  • /proc/$pid/entorno 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 enumerar los archivos que ha abierto el proceso
  • /proc/$pid/io Contiene estadísticas de E/S para el proceso
  • /proc/$pid/límites Muestra el límite de recursos del proceso
  • /proc/$pid/mapas Regiones de memoria asignadas actualmente y permisos de acceso
  • /proc/$pid/pila Rastreo de llamadas a funciones en la pila del núcleo del proceso
  • /proc/$pid/stat Información de estado sobre el proceso
  • /proc/$pid/tarea/ Directorio que contiene información del 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/líneacmd Argumentos pasados ​​al kernel de Linux durante el arranque
  • /proc/cpuinfo información relacionada con la CPU
  • /proc/meminfo Estadísticas de uso de memoria
  • /proc/sistemas de archivos Listado de sistemas de archivos soportados por el kernel
  • /proc/módulos Módulos del kernel que están cargados actualmente
  • /proc/particiones Información sobre cada partición en el sistema
  • /proc/intercambios Información sobre el espacio de intercambio en el sistema
  • /proc/self Directorio se refiere al proceso que accede al /proc sistema de archivos
  • /proc/slabinfo Información sobre cachés del kernel
  • /proc/sys Varios archivos y subdirectorios sobre variables del kernel

Más pasos

Esta descripción general del proc El sistema de archivos solo toca las posibilidades que ofrece. Para obtener más información, consulte proc la página de manual ingresando al man proc comando o accediendo a la versión en línea de la página man de proc.


Linux
  1. Una introducción al uso de tcpdump en la línea de comandos de Linux

  2. Usando la fuerza en la línea de comando de Linux

  3. Explorando el sistema de archivos /proc de Linux

  4. Uso del comando mkfs en Linux para formatear el sistema de archivos en un disco o partición

  5. ¿Dónde se encuentra el sistema de archivos del subsistema Linux en Windows 10?

Una guía para principiantes para navegar por el sistema de archivos de Linux

Cómo hacer una copia de seguridad del sistema de archivos de Linux usando el comando dump

Usando el antivirus ClamAV en Ubuntu 18.04

Tutorial sobre el uso del comando Timeout en Linux

Tutorial sobre el uso del último comando en la terminal de Linux

Uso de vmstat para solucionar problemas de rendimiento en Linux