¿Supiste lo que acaba de lanzar LagriHost? Sí, como lo estabas esperando, ahora vendemos Web Hosting y Dominios. Conoce más :)


Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
El directorio /proc en linux
#1
0
Artículo original: Discover the possibilities of the /proc directory
Autor original: el uruguayo Federico Kereki para Linux.com
La salida de todos los ejemplos utilizados fueron reemplazadas por los de mi PC para que sean más acordes a la actualidad
Via: Librenix

Traducción

El directorio /proc es una bestia extraña. No existe realmente, pero podemos explorarlo. Sus archivos de tamaño cero no son ni binarios ni de texto sin embargo se los puede examinar y ver. Este directorio especial contiene todos los detalles sobre tus sistemas Linux, incluyendo su núcleo, procesos y parámetros de configuración. Estudiando el directorio /proc puedes aprender cómo funcionan los programas en Linux y aún hacer algunas herramientas administrativas.

En Linux, todo es manejado como un archivo; aún los dispositivos son abstraídos como archivos (en el directorio /dev). Si bien puedes pensar que los archivos “normales” son o bien textos o binarios (o posiblemente archivos de dispositivos o tuberías), el directorio /proc contiene un tipo de archivo más extraño: archivos virtuales. Estos archivos se pueden listar pero no existen realmente en el disco; el sistema operativo los crea al vuelo si intentas leerlos.

La mayoría de los sistemas de archivo siempre tienen una marca temporal actualizada, lo que indica que están siendo actualizados constantemente. El directorio /proc en sí mismo es creado cada vez que inicias el equipo. Necesitas trabajar como root para poder examinar el directorio completo; algunos archivos (como los relacionados a los procesos) pertenecen al usuario que ejecutó el proceso. Si bien la mayoría de los archivos son sólo de lectura, en unos pocos (notablemente en /proc/sys) puedes escribir para modificar parámetros del núcleo (cosa que deberías de hacer con mucho cuidado por supuesto).

Recursos sobre /proc

Encontrar documentación sobre el sistema de archivo /proc puede ser una tarea tediosa porque está desparramada entre todo el código fuente del núcleo. Revisando el directorio /usr/src/linux/Documentation encontré el archivo proc.txt que contiene mucha información pero está algo desactualizada: su última actualización fue en Noviembre de 2000 cuando estaba por salir la versión 2.4.0 (N.d.T.: en realidad fue escrito en esa época y se actualizó por última vez en Junio de 2011, lo que no quiere decir que sea completo). Sin embargo, este directorio es más sencillo de revisar que los archivos de código fuente C. Nota que podrías conseguir más de lo que deseas; por ejemplo, el archivo laptop-mode.txt tiene más de 1000 líneas y sólo documenta el archivo /proc/sys/vm/laptop_mode.

Organización del directorio /proc

El directorio /proc está organizado en directorios y subdirectorios virtuales con sus archivos agrupados por categoría. Trabajando como root, la órden ls /proc devuelve algo como lo siguiente:

1 14455 170 1964 2220 5142 dma mtrr
10 14456 1729 1967 2234 5146 driver net
10822 14573 173 1974 2243 5147 execdomains pagetypeinfo
1145 15 1731 1975 2245 523 fb partitions
1176 1545 174 1976 2281 535 filesystems sched_debug
1179 1561 175 1978 2284 570 fs self
1194 1574 18 1998 2286 6 interrupts slabinfo
12 1591 1801 2 2289 7 iomem softirqs
1207 16 1814 2004 2292 8 ioports stat
1215 160 1855 2022 2299 893 irq swaps
1218 161 1858 2026 23 894 kallsyms sys
1275 1610 1859 2045 2307 895 kcore sysrq-trigger
1292 162 1864 2056 234 acpi keys sysvipc
13 1627 1865 20961 24 asound key-users timer_list
13070 1628 1869 21 25 buddyinfo kmsg timer_stats
13369 1629 1874 2173 26 bus kpagecount tty
13874 163 19 2194 2669 cgroups kpageflags uptime
13927 1630 1920 22 2750 cmdline loadavg version
13934 1631 1942 22113 288 consoles locks vmallocinfo
13935 1632 1948 22114 3 cpuinfo meminfo vmstat
14 1636 1952 22133 30326 crypto misc zoneinfo
14237 169 1953 22134 31901 devices modules
14450 17 1955 2216 3784 diskstats mounts


Los directorios numerados corresponden con los procesos que están ejecutando (más al respecto luego); el enlace simbólico self apunta al proceso actual. Algunos archivos virtuales proveen información sobre el soporte físico como /proc/cpuinfo, /proc/meminfo y /proc/interrupts. Otros proveen información relacionada con los archivos como /proc/filesystems o /proc/partitions. Los archivos en /proc/sys veremos están relacionados con los parámetros de configuración del núcleo.

La órden cat /proc/meminfo puede devolver algo parecido a lo siguiente:

# cat /proc/meminfo
MemTotal: 4063188 kB
MemFree: 1239204 kB
Buffers: 191384 kB
Cached: 1241840 kB
[varias líneas eliminadas]


Si ejecutas top o free podrías reconocer algunos de esos números. De hecho, muchas utilidades muy conocidas acceden al directorio /proc para obtener su información. Por ejemplo, si deseas saber qué núcleo estás ejecutando utilizarías uname -srv, pero bien podrías recurrir a la fuente y tipear cat /proc/version.

Algunos otros archivos interesantes

/proc/apm: provee información sobre Manejo de poder avanzado («APM» por sus siglas en inglés), si está instalado.

/proc/acpi: un directorio similar al anterior que ofrece mucha información sobre el reemplazo de APM: interfaz avanzada de poder y configuración («ACPI» por sus siglas en inglés). Por ejemplo, para ver si tu portátil está conectada a la red eléctrica puedes utilizar cat /proc/acpi/ac_adapter/AC/state y obtener «on line» si lo está u «off line» si no lo está.

/proc/cmdline: muestra los parámetros que fueron pasados al núcleo al momento de iniciar. En mi caso contiene BOOT_IMAGE=/vmlinuz-2.6.39-2-amd64 root=UUID=6b950aa9-358a-4e7e-945f-ddc9972767e4 ro quiet que contiene la ubicación de mi raíz de sistema de archivos, la ubicación de la imagen a iniciar y un par de cosas más.

/proc/cpuinfo: provee información sobre el procesador del equipo. Por ejemplo, en mi equipo cat /proc/cpuinfo comienza con:

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel® Core™2 Duo CPU E7400 @ 2.80GHz
stepping : 10
cpu MHz : 2806.667
cache size : 3072 KB


Esto muestra que tengo un procesador, el número 0, de la familia 80686 (el código 6 de cpu family es el dígito intermedio): un Intel Core2Duo a 2.8 GHz.

/proc/loadavg: un archivo relacionado que muestra la carga promedio del procesador; esta información incluye el uso de la CPU en el último minuto, los últimos 5 minutos y los últimos 10 minutos así también como la cantidad actual de procesos ejecutando.

/proc/stat: también provee estadísticas, pero desde el último inicio del equipo.

/proc/uptime: un archivo corto que tiene sólo 2 números: la cantidad de segundos que el equipo ha estado prendido y la cantidad de segundos en los que ha estado inactivo.

/proc/devices: muestra todos los dispositivos de caracteres y bloque actualmente configurados y cargados. /proc/ide and /proc/scsi proveen datos sobre los dispositivos IDE y SCSI.

/proc/ioports: muestra información sobre las regiones de utilizadas para comunicación de Entrada/Salida con dichos dispositivos.

/proc/dma: muestra los canales Direct Memory Access en uso.

/proc/filesystems: muestra los tipos de sistema de archivos soportados por el núcleo. Este archivo podría verse de la siguiente forma:

nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev pipefs
nodev anon_inodefs
nodev devpts
nodev ramfs
nodev hugetlbfs
nodev pstore
nodev mqueue
nodev usbfs
ext3
nodev fuse
fuseblk
nodev fusectl
vfat


La primer columna muestra si el sistema de archivo está montado en un dispositivo de bloque. En mi caso, tengo particiones configuradas con ext3 montadas.

/proc/mounts: muestra todos los puntos de montaje utilizados por el equipo (su salida se parece a /etc/mtab). Similarmente, /proc/partitions y /proc/swaps muestran todas las particiones y espacio de intercambio.

/proc/fs: si estás exportando sistemas de archivos con NFS, este directorio tendrá entre sus muchos subdirectorios y archivos /proc/fs/nfsd/exports que mostrará los sistemas de archivos compartidos y sus permisos.

/proc/net: no se puede competir contra esta fuente de información de red. Describir cada archivo en este directorio necesitaría demasiado espacio pero incluye cada dispositivo, varios archivos relacionados con iptables, estadísticas de reds y zócalos, información inalámbrica y mucho más.

RAM: también hay varios archivos relacionados con memoria. Ya mencioné /proc/meminfo, pero también existe /proc/iomem que muestra la cantidad de memoria utilizada en el equipo y /proc/kcore que representa la memoria física de la máquina. A diferencia de otros archivos virtuales, /proc/kcore muestra un tamaño que es igual a tu memoria más un pequeño extra (no intentes usar cat sobre este archivo, su contenido es binario y desconfigurará la consola) (N.d.T.: si ya lo habías hecho, utiliza la órden reset en esa misma consola). Finalmente, hay muchos directorios y archivos relacionados con el soporte físico, como /proc/interrupts y /proc/irq, /proc/pci (todos los dispositivos PCI), /proc/bus y más; pero incluyen información muy específica que la mayoría de los usuarios no necesitan.

¿Qué hay en un proceso?

Como expliqué anteriormente, los directorios que tienen números por nombre representan los procesos que se están ejecutando. Cuando un proceso termina su directorio en /proc desaparace automáticamente. Si revisas cualquiera de estos directorios mientras todavía existe encontrarás muchos archivos, por ejemplo:

attr coredump_filter io mountstats root status
autogroup cpuset limits net sched syscall
auxv cwd loginuid oom_adj sessionid task
cgroup environ maps oom_score smaps wchan
clear_refs exe mem oom_score_adj stack
cmdline fd mountinfo pagemap stat
comm fdinfo mounts personality statm


Revisemos los archivos principales:

cmdline: contiene la forma en la que se ejecutó el proceso, con todos sus parámetros
cwd: un enlace simbólico al directorio de trabajo («working directory») del proceso
exe: un enlace simbólico al ejecutable del proceso
root: un enlace simbólico a lo que el proceso ve como directorio raíz
environ: muestra todas las variables de entorno del proceso
fd: contiene todos los descriptores de archivo del proceso, mostrando los archivos que está utilizando
maps, statm, y mem: tienen que ver con la memoria siendo utilizada por el proceso
stat y status: proveen información sobre el estado del proceso, el último es mucho más claro que el primero

Estos archivos proveen varios desafíos de programación. Por ejemplo, si deseas encontrar procesos zombie puedes revisar todos los directorios numerados y revisar si el archivo status contiene “(Z) Zombie”. Una vez necesité revisar si un proceso determinado estaba ejecutando, revisé los directorios leyendo el archivo cmdline buscando el archivo deseado (también se podría haber hecho esto con la salida del programa ps, pero eso está más allá del propósito de este artículo) (N.d.T.: el programa pgrep está hecho específicamente para eso). Si se desea programar una versión más bonita de top, tienes toda la información en la punta de tus dedos.

Modificando el sistema: /proc/sys

/proc/sys no sólo provee información sobre el sistema, también te permite cambiar parámetros del núcleo al vuelo, activando o desactivando funcionalidades (por supuesto, esto podría dañar el sistema ¡considerate advertido!).

Para saber si puedes configurar un archivo o si sólo es para lectura, utiliza ls -ld; si un archivo tiene el atributo “w” significa que puedes utilizarlo para controlar algo del núcleo. Por ejemplo, ls -ld /proc/sys/kernel/* comienza de la siguiente forma:

-rw-r--r-- 1 root root 0 Jun 25 19:29 /proc/sys/kernel/acct
-rw-r--r-- 1 root root 0 Jun 25 19:29 /proc/sys/kernel/acpi_video_flags
-rw-r--r-- 1 root root 0 Jun 25 19:29 /proc/sys/kernel/auto_msgmni
-rw-r--r-- 1 root root 0 Jun 25 19:29 /proc/sys/kernel/blk_iopoll
-r--r--r-- 1 root root 0 Jun 25 19:29 /proc/sys/kernel/bootloader_type


Puedes ver que bootloader_type no puede ser cambiado, pero los demás sí. Para cambiar un archivo puedes utilizar algo como echo 10 > /proc/sys/vm/swappiness. Este ejemplo particular ajusta la memoria virtual según la performance de paginación. Por cierto, estos cambios son sólo temporales y sus efectos desaparecerán al reiniciar el sistema; utiliza sysctl y el archivo /etc/sysctl.conf para que los cambios tengan efectos permanentes.

Estos son algunos de los directorios de /proc/sys:

debug: tiene (¡oh sorpresa!), información de depiración ideal si te interesa desarrollar sobre el núcleo
dev: provee los parámetros para dispositivos específicos del equipo; revisa por ejemplo el directorio /proc/sys/dev/cdrom
fs: ofrece datos sobre todo aspecto posible del sistema de archivos
kernel: permite modificar directamente la configuración y operación del núcleo
net: permite controlar lo relacionado a la red; cuidado ya que tocar esto puede hacerte perder conectividad
vm: se relaciona con el sub-sistema de memoria virtual

Conclusión

El directorio especial /proc provee información completa y detallada sobre el funcionamiento interno de Linux y permite afinar muchos aspectos de su configuración. Si dedicas tiempo a aprender sobre todas las posibilidades de este directorios podrás conseguir una máquina Linux mejor. ¿Y eso no es lo que queremos todos acaso?



Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  comprobar si tu CPU es vulnerable a Spectre y Meltdown en Linux kanixes 2 3,436 27-04-2018, 09:45 AM
Último mensaje: alieninc
  25 videojuegos para LINUX kanixes 1 2,584 13-02-2018, 04:04 PM
Último mensaje: alieninc
  Buscar en Google desde la Terminal Linux kanixes 0 2,466 09-02-2018, 04:51 AM
Último mensaje: kanixes
  Linux está en 498 de los 500 ordenadores más potentes del planeta Diringax 0 2,185 29-06-2017, 09:16 AM
Último mensaje: Diringax
  Comandos en GNU/Linux Jesus Matamoros 3 4,390 14-05-2016, 06:58 PM
Último mensaje: Nomak



Usuarios navegando en este tema:
1 invitado(s)


Forum software by © MyBB Theme © Kevinex & iAndrew 2018