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 $$ .
$ 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.