Bajo Linux, todo se maneja como archivo, hasta los dispositivos son accesados como archivos (en el directorio /dev). Aunque creas que cualquier archivo "normal" pueden ser texto o binario, el directorio /proc contiene un tipo extraño: archivos virtual. Los archivos son listados, pero en realidad no existen en el disco; el sistema operativo los crea al vuelo si tratas de leerlos.
La mayoría de los archivos virtuales tienen la fecha actual, lo cual indica que están en constante actualización. EL directorio /proc se crea el mismo cada vez que se inicia la PC. Necesitas trabajar como root para poder examinar el directorio completo: algunos de sus archivos son manejados por el usuario que los cargo. Aunque la mayoría de los archivos son de "solo lectura", algunos son escribibles (/proc/sys) permiten cambiar los parámetros del kernel. (Por supuesto mucho cuidado al hacer esto).
La organización del directorio /proc
EL directorio /proc esta organizado en directorios y sub-directorios virtuales, y los grupos de archivos por tópicos similares. Trabajando como root, el comando ls /proc trae de vuelta algo como esto:
1 2432 3340 3715 3762 5441 815 devices modulesLos directorios numerados corresponden a cada proceso que esta ejecutándose; un atajo, symlink o enlace simbolico es
129 2474 3358 3716 3764 5445 acpi diskstats mounts
1290 248 3413 3717 3812 5459 asound dma mtrr
133 2486 3435 3718 3813 5479 bus execdomains partitions
1420 2489 3439 3728 3814 557 dri fb self
165 276 3450 3731 39 5842 driver filesystems slabinfo
166 280 36 3733 3973 5854 fs interrupts splash
2 2812 3602 3734 4 6 ide iomem stat
2267 3 3603 3735 40 6381 irq ioports swaps
2268 326 3614 3737 4083 6558 net kallsyms sysrq-trigger
2282 327 3696 3739 4868 6561 scsi kcore timer_list
2285 3284 3697 3742 4873 6961 sys keys timer_stats
2295 329 3700 3744 4878 7206 sysvipc key-users uptime
2335 3295 3701 3745 5 7207 tty kmsg version
2400 330 3706 3747 5109 7222 buddyinfo loadavg vmcore
2401 3318 3709 3749 5112 7225 cmdline locks vmstat
2427 3329 3710 3751 541 7244 config.gz meminfo zoneinfo
2428 3336 3714 3753 5440 752 cpuinfo misc
self
el cual apunta al proceso actual. Algunos archivos virtuales proveen informacion sobre el hardware, como el archivo /proc/cpuinfo, /proc/meminfo, y /proc/interrupts. Otros archivos proveen informacion relacionada como /proc/filesystems o /proc/partitions. Los archivos bajo /proc/sys están relacionados a los parámetros de configuración del kernel, como veremos mas adelante.EL comando cat /proc/meminfo debería mostrar algo como esto:
MemTotal: 483488 kBSi intentas los comandos top o free, deberías reconocer alguno de estos números. De hecho, muchas de las utilidades ya conocidas acceden al directorio /proc para obtener informacion.
MemFree: 9348 kB
Buffers: 6796 kB
Cached: 168292 kB
.
.
.
Por ejemplo, si quieres saber que kernel estas ejecutando, usas el el comando uname -srv o te vas a la fuente ejecutas cat /proc/version. Otros archivos interesantes incluyen:
- /proc/apm: Provee informacion sobre el administrador de energía (Advanced Power Management), si esta instalado.
- /proc/acpi: Un directorio similar que ofrece abundante data sobre Interfaces de Poder y Configuración Avanzada (Advanced Configuration and Power Interface). Por ejemplo, para ver si tu laptop esta conectada a la corriente, puedes usar el comando cat /proc/acpi/ac_adapter/AC/state y obtendrás "on line" or "off line."
- /proc/cmdline: Muestra los parámetros que se fueron pasados al kernel al momento de iniciar (bootear). En este caso seria algo así:
root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi
, lo cual menciona que partición es el sistema de fichero raíz, que modo VGA se usa y mas.- /proc/cpuinfo: Provee informacion de tu sistema. Por ejemplo en una laptop se si se ejecuta cat /proc/cpuinfo se obtendría algo así:
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : Mobile AMD Athlon(tm) XP 2200+
stepping : 1
cpu MHz : 927.549
cache size : 256 KB
Esto muestra que se tiene un solo procesador, numerado 0, de la familia 80686 (el 6 en el cpu family va como el dígito medio), un procesador AMD Athlon XP, corriendo a menos de un 1GHz.
- /proc/loadavg: el archivo muestra el promedio de carga del procesador, su informacion incluye el uso del CPU en los últimos 10 minutos, así como el numero de procesos ejecutados actualmente.
- /proc/stat: también da estadísticas, pero va hacia el ultimo booteo.
- /proc/uptime: archivo pequeño que solo muestra 2 números, en cuantos segundos tu sistema ha estado activo, y en cuantos ha estado inactivo.
- /proc/devices: muestra todos los dispositivos carácter y bloques cargados y configurados actualmente. /proc/ide y /proc/scsi proveen informacion sobre los dispositivos IDE y SCSI.
- /proc/ioports: muestra informacion sobre las regiones usadas para comunicación I/O con aquellos dispositivos.
- /proc/dma: muestra los canales de Acceso Directo de Memoria (Direct Memory Access) en uso.
- /proc/filesystems: muestra que tipo de sistemas de fichero son soportados por tu kernel. Una porción de este se vería así:
nodev sysfsLa primera columna muestra cualquier sistema de fichero que esta montado en un bloque de dispositivo, en este caso muestra particiones configuradas con ext2 y ext3.
nodev rootfs
nodev bdev
nodev proc
nodev cpuset
...some lines snipped...
nodev ramfs
nodev hugetlbfs
nodev mqueue
ext3
nodev usbfs
ext2
nodev autofs
- /proc/mounts: muestra todo lo montado en tu maquina (esta salida se muestra mejor en /etc/mtab). Igualmente, /proc/partitions y /proc/swaps muestra todas las particiones y el espacio de intercambio (swap).
- /proc/fs: si estas exportando el sistema de fichero con NFS, este directorio contiene entre sus subdirectorios y archivos los archivos /proc/fs/nfds/exports, el cual muestra el sistema de fichero que esta siendo compartido y sus permisos.
- /proc/net: no puedes usar este para informacion de la red. Describir cada archivo el ese directorio requiere mucho espacio, pero incluye /dev (cada dispositivo de red), varios archivos relacionados a iptables, estadísticas de red y socket, informacion inalambrica y mas.
Que se esta procesando
Como ya se dijo, los directorios numerados representan todos los procesos ejecutándose. Cuando un proceso termina, su directorio /proc desaparece automáticamente. Si revisas alguno de esos directorios mientras existe, veras varios archivos como estos:
attr cpuset fdinfo mountstats statMiremos los principales archivos:
auxv cwd loginuid oom_adj statm
clear_refs environ maps oom_score status
cmdline exe mem root task
coredump_filter fd mounts smaps wchan
- cmdline: contiene el comando que inicio el proceso, con sus parámetros.
- cwd: un enlace simbólico al directorio actual del proceso; enlaces exe hacia el proceso ejecutable, y los enlaces root hacia su directorio raíz.
- environ: muestra todas las variables de entorno para el proceso.
- fd: contiene todos los archivos descriptores para un proceso, mostrando que archivos y dispositivos se están usando.
- maps, statm, and mem: manejo de la memoria en uso por proceso.
- stat and status: provee informacion sobre el estatus del proceso.
Ajustando el sistema: /proc/sys
/proc/sys no solo provee informacion sobre el sistema, también permite cambiar los parámetros del kernel al vuelo, y habilitar y deshabilitar características. (Por supuesto mucho cuidado con esto!).
Para determinar si puedes configurar el archivo o si esta en modo de solo lectura usa el comando ls -ld, si el archivo tiene el atributo W, quiere decir que puedes usarlo para configurar el kernel. Por ejemplo, ls -ld /proc/kernel/* empieza algo así:
dr-xr-xr-x 0 root root 0 2008-01-26 00:49 ptyPuedes ver que bootloader_type no quiere decir que esta cambiado, pero otros archivos lo están. Para cambiar un archivo usa algo como echo 10 >/proc/sys/vm/swappiness. Este ejemplo en particular te permitiría afinar la performance de la paginacion de la memoria virtual. Pero estos cambios son solo temporales, y desaparecerán cuando se reinicie tu sistema; usa sysctl y el archivo /etc/sysctl.conf para que los cambios sean permanentes.
dr-xr-xr-x 0 root root 0 2008-01-26 00:49 random
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acct
-rw-r--r-- 1 root root 0 2008-01-26 00:49 acpi_video_flags
-rw-r--r-- 1 root root 0 2008-01-26 00:49 audit_argv_kb
-r--r--r-- 1 root root 0 2008-01-26 00:49 bootloader_type
-rw------- 1 root root 0 2008-01-26 00:49 cad_pid
-rw------- 1 root root 0 2008-01-26 00:49 cap-bound
Veamos algo de los directorios de /proc/sys:
- debug: su mismo nombre lo dice, contiene informacion de depuración, esto es bueno si eres desarrollador del kernel.
- dev: provee parámetros para dispositivos específicos en tu sistema, por ejemplo revisa el directorio /dev/cdrom.
- fs: ofrece informacion sobre cada aspecto del sistema de fichero.
- kernel: Afecta la configuración y operación directa del kernel.
- net: permite control lo relacionado a la red. Cuidado que algún descuido puedes perder tu conectividad.
- vm: trabaja con el subsistema VM.
Conclusión
El directorio especial /proc provee informacion muy detallada acerca del trabajo interior de Linux y te permite afinar tu sistema. Si estudias un poco mas sobre todas las posibilidades del directorio, estarás habilitado para perfeccionar tu sistema Linux.
No hay comentarios:
Publicar un comentario