El sistema de archivos proc contiene una jerarquía de archivos especiales que representan el estado actual del kernel. Lleva el nombre de su propósito original, que es una interfaz para las estructuras dentro de los procesos en ejecución para admitir herramientas de depuración. Linux adoptó esto de Solaris pero también agregó la interfaz al núcleo. El sistema de archivos proc se ha vuelto bastante desordenado a lo largo de los años, por lo que Linux creó el sistema de archivos sysfs para limpiarlo.
Los archivos en el directorio /proc contienen información sobre su hardware y los procesos actuales que se ejecutan en su sistema. Los archivos que tienen permiso de escritura se pueden modificar para cambiar la configuración del kernel.
Sistema de archivos virtuales
Los archivos del directorio /proc son archivos virtuales; por lo tanto, proc se conoce como un sistema de archivos virtual. La mayoría de los archivos virtuales se enumeran con un tamaño de cero bytes, pero contienen una gran cantidad de información cuando se visualizan. La mayoría de las marcas de fecha y hora en los archivos virtuales reflejan la fecha y la hora actuales; sin embargo, estos archivos se actualizan constantemente.
Los archivos virtuales como /proc/interrupts, /proc/meminfo, /proc/cpuinfo y /proc/devices brindan una vista del hardware del sistema. Otros, como el archivo /proc/filesystems y el directorio /proc/sys, proporcionan interfaces e información de configuración del sistema. Los archivos que contienen información sobre temas similares se agrupan en directorios virtuales. Por ejemplo, los directorios de procesos contienen información sobre cada proceso en ejecución en el sistema.
Ver archivos virtuales
La mayoría de los archivos virtuales dentro de /proc se pueden ver usando comandos como cat, more y less. Por ejemplo, para ver información sobre la CPU del sistema, ingrese:
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 79 model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz stepping : 1 microcode : 0x1 cpu MHz : 2199.998 cache size : 30720 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt bogomips : 4399.99 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
Solo se puede acceder a ciertos archivos con privilegios de root. Algunos archivos en /proc contienen información que no es legible por humanos. Use utilidades como lspci, free y top para ver estos archivos. Por ejemplo, use el comando lspci para enumerar todos los dispositivos PCI:
# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card (rev 04) 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio SCSI 00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:06.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:07.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
Cambiar archivos virtuales
La mayoría de los archivos virtuales dentro del directorio /proc son de solo lectura. Sin embargo, algunos se pueden escribir y se pueden usar para ajustar la configuración en el kernel. Esto es especialmente cierto para los archivos en el directorio /proc/sys. Para cambiar el valor de un archivo virtual, use la siguiente sintaxis:
# echo value > /proc/file
Por ejemplo, para cambiar el nombre de host, ingrese:
# echo www.example.com > /proc/sys/kernel/hostname
Otros archivos actúan como conmutadores binarios o booleanos. Ver el archivo devuelve un 0 (desactivado o falso) o un 1 (activado o verdadero). Ejemplo:
# cat /proc/sys/net/ipv4/ip_forward 0
El 0 indica que el núcleo no está reenviando paquetes de red. Para activar el reenvío de paquetes:
# echo 1 > /proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1
Archivos de nivel superior dentro de /proc
Aquí se describen algunos de los archivos virtuales más útiles en el nivel superior del directorio /proc. Esta no pretende ser una lista exhaustiva, sino dar ejemplos de algunos de los archivos y su propósito. Muchos de estos archivos se describen con más detalle en las lecciones correspondientes.
- /proc/info de amigo :este archivo se usa principalmente para diagnosticar problemas de fragmentación de la memoria.
- /proc/líneacmd :Este archivo muestra los parámetros pasados al núcleo en el momento en que se inicia.
- /proc/cpuinfo :este archivo virtual identifica el tipo de procesador utilizado por su sistema.
- /proc/cripto :este archivo enumera todos los cifrados criptográficos instalados utilizados por el kernel de Linux, incluidos detalles adicionales para cada uno.
- /proc/dispositivos :este archivo muestra los diversos dispositivos de caracteres y bloques actualmente configurados (sin incluir dispositivos cuyos módulos no están cargados).
- /proc/dma :este archivo contiene una lista de los canales ISA DMA registrados en uso.
- /proc/execdominios :este archivo enumera los dominios de ejecución admitidos actualmente por el kernel de Linux, junto con el rango de personalidades que admiten.
- /proc/sistemas de archivos :este archivo muestra una lista de los tipos de sistemas de archivos actualmente admitidos por el kernel. La primera columna indica si el sistema de archivos está montado en un dispositivo de bloque. Aquellos que comienzan con nodev no están montados en un dispositivo. La segunda columna enumera los nombres de los sistemas de archivos admitidos. El comando de montaje recorre los sistemas de archivos enumerados aquí cuando no se especifica uno como argumento.
- /proc/interrupciones :este archivo registra el número de interrupciones por IRQ en la arquitectura x86.
- /proc/iomem :este archivo le muestra el mapa actual de la memoria del sistema para cada dispositivo físico.
- /proc/ioports :este archivo proporciona una lista de las regiones de puerto actualmente registradas que se utilizan para la comunicación de entrada o salida con un dispositivo.
- /proc/kcore :este archivo representa la memoria física del sistema y se almacena en el formato de archivo principal. El contenido de este archivo está diseñado para ser examinado por un depurador, como gdb, y no es legible por humanos.
- /proc/kmsg :este archivo se utiliza para almacenar mensajes generados por el núcleo. Estos mensajes luego son recogidos por otros programas, como /bin/dmesg.
- /proc/carga media :este archivo proporciona un vistazo al promedio de carga con respecto a la CPU y la E/S a lo largo del tiempo, así como datos adicionales utilizados por el tiempo de actividad y otros comandos.
- /proc/bloqueos :Este archivo muestra los archivos actualmente bloqueados por el núcleo. El contenido de este archivo contiene datos internos de depuración del kernel y puede variar enormemente, según el uso del sistema.
- /proc/mdstat :este archivo contiene la información actual para configuraciones RAID de varios discos.
- /proc/meminfo :Este archivo reporta una gran cantidad de información valiosa sobre el uso de RAM del sistema.
- /proc/módulos :Este archivo muestra una lista de todos los módulos cargados en el núcleo. La mayor parte de esta información también se puede ver usando el comando /sbin/lsmod.
Procesar directorios en /proc
El directorio /proc contiene directorios con nombres numéricos. Estos directorios llevan el nombre del ID de proceso de un programa y contienen información sobre ese proceso. El propietario y el grupo de cada directorio de procesos se establecen para el usuario que ejecuta el proceso. Cada directorio de proceso contiene varios archivos, incluidos:
- línea de comando :El comando emitido al iniciar el proceso
- cwd :un enlace simbólico al directorio de trabajo actual para el proceso
- entorno :Una lista de las variables de entorno para el proceso
- exe :Un enlace simbólico al ejecutable de este proceso
- fd :el directorio que contiene todos los descriptores de archivo para un proceso en particular
- mapas :una lista de mapas de memoria para ejecutables y archivos de biblioteca asociados con el proceso
- mem :La memoria retenida por el proceso (el archivo no puede ser leído por el usuario)
- raíz :Un enlace al directorio raíz del proceso
- estadística :el estado del proceso, incluido el estado de ejecución y el uso de la memoria
- estado :El estado de la memoria en uso por el proceso
- estado :El estado del proceso en una forma más legible que stat o statm
Otros directorios en /proc
Otros directorios dentro del directorio/proc agrupan información similar por tema. La siguiente es una lista parcial de estos directorios:
- /proc/bus :Este directorio contiene información sobre los distintos buses disponibles en el sistema. Los subdirectorios y archivos disponibles dentro de /proc/bus varían según los dispositivos conectados al sistema.
- /proc/bus/pci, /proc/bus/usb :Puede obtener una lista de todos los dispositivos PCI y USB presentes en el sistema usando el comando cat en el archivo de dispositivos dentro de estos directorios, pero la salida es difícil de leer e interpretar. Para obtener una lista de dispositivos legible por humanos, ejecute los comandos lspci y lsusb.
- /proc/controlador :este directorio contiene información sobre controladores específicos que utiliza el kernel.
- /proc/fs :este directorio muestra qué sistemas de archivos se exportan. Si ejecuta un servidor NFS, al escribir cat /proc/fs/nfsd/exports se muestran los sistemas de archivos que se comparten y los permisos.
- /proc/irq :este directorio se utiliza para establecer la afinidad de IRQ con la CPU, lo que permite que el sistema conecte una IRQ particular a una sola CPU. Alternativamente, puede excluir una CPU del manejo de cualquier IRQ.
- /proc/self/net :este directorio proporciona una visión completa de varios parámetros y estadísticas de red. Cada directorio y archivo virtual dentro de este directorio describe aspectos de la configuración de red del sistema. El archivo /proc/net es un enlace simbólico a este directorio.
- /proc/scsi :El archivo principal de este directorio es /proc/scsi/scsi, que contiene una lista de todos los dispositivos SCSI reconocidos. En esta lista, está disponible el tipo de dispositivo, así como el nombre del modelo, el proveedor, el canal SCSI y los datos de ID.
- /proc/sys :Este directorio es diferente de otros en /proc, porque no solo brinda información sobre el sistema, sino que también le permite habilitar y deshabilitar de inmediato las funciones del kernel. Si un archivo tiene permisos de escritura, puede usarse para configurar el kernel. El cambio de un valor dentro de un archivo /proc/sys/ se realiza haciendo eco del nuevo valor en el archivo. Por ejemplo, para cambiar el nombre de host a www.example.com :
# echo www.example.com > /proc/sys/kernel/hostname
Otros archivos actúan como conmutadores binarios o booleanos. Un valor de 0 representa apagado o falso. Un valor de 1 representa encendido o verdadero. Por ejemplo, para activar el reenvío de paquetes:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Los cambios realizados con el comando echo no son persistentes y desaparecen cuando se reinicia el sistema. Para que los cambios de configuración surtan efecto después de reiniciar el sistema, agréguelos al archivo /etc/sysctl.conf.
- /proc/sys/dev :este directorio proporciona parámetros para dispositivos particulares en el sistema.
- /proc/sys/fs :este directorio contiene opciones e información sobre varios aspectos del sistema de archivos, incluida la cuota, el manejo del archivo y la información de inodo.
- /proc/sys/núcleo :Este directorio contiene una variedad de diferentes archivos de configuración que afectan directamente la operación del kernel.
- /proc/sys/net :Este directorio contiene subdirectorios relacionados con varios temas de redes. Puede modificar los archivos dentro de estos directorios para ajustar la configuración de red en un sistema en ejecución.
- /proc/sysvipc :este directorio contiene información sobre los recursos de comunicación entre procesos (IPC) de System V. Los archivos en este directorio se relacionan con llamadas System V IPC para mensajes (msg), semáforos (sem) y memoria compartida (shm).
- /proc/tty :este directorio contiene información sobre los dispositivos tty disponibles y actualmente en uso en el sistema. El archivo de controladores es una lista de los dispositivos tty actualmente en uso.