Explorando el filesystem /proc

El directorio /proc es un pseudo-filesystem que se utiliza como interfaz para las estructuras de datos del Kernel. La mayor parte de este filesystem es de sólo lectura, aunque algunos archivos pueden ser modificados y cambiar variables de entorno que utiliza el kernel. Este directorio es volatil, por lo cual cada vez que reiniciemos el equipo se perderán los cambios que pudieramos realizar, si quisieramos mantenerlos deberiamos hacer tantos scripts como necesitemos y hacer que se ejecuten al inicio del sistema.

Este filesystem provee una forma sencilla (la mayoria de las veces) de visualizar información referida al kernel que se este utilizando y de los procesos corriendo. Muchos programas o comandos que se utilizan a diario leen información de este directorio. En la mayoria de los casos esta información puede ser leida con facilidad pero en otros no.

Este filesystem puede ser usado para:

  • Ver información estática del kernel
  • Ver información del hardware del equipo
  • Ver información relacionada con la memoria y performance
  • Posibilidad de modificar parametros de servicios que estan corriendo
  • Ver y modificar parametros de red o propios del equipo

Es importante recordar que la información que podamos encontrar dentro de este directorio puede o no ser igual a la información que pudieramos encontrar en otro directorio /proc de otro equipo, ya que este lee información del kernel que esta en memoria y del hardware que tenemos.

Dentro de este directorio vamos a encontrar distintos directorios y archivos de texto que simplemente se pueden listar como cualquier otro directorio dentro del sistemaEn la raiz de /proc podemos encontrar los siguientes directorios y archivos (entre otros):

  • /proc/cmdline
  • /proc/devices
  • /proc/filesystems
  • /proc/fs (*)
  • /proc/loadavg
  • /proc/net (*)
  • /proc/swaps
  • /proc/sys (*)
  • /proc/uptime
  • /proc/vmstat

Donde el simbolo (*) indica que es un directorio. Además de los directorios numéricos que son cada proceso que se este corriendo en ese momento. Dentro de cada uno de esos directorios numéricos podemos encontrar los siguientes archivos:

  • cmdline: Contiene las ordenes completas para dicho proceso salvo que cambiara de estado (no ejecución) donde en ese caso el archivo estaria vacio
  • environ: Contiene variables de entorno para el proceso
  • maps: Contiene las regiones de memoria asociadas y sus permisos de acceso en ese momento al proceso dado
  • fd: Es un subdirectorio que contiene una linea por cada archivo abierto por el proceso en ese momento (descriptores)
  • stat: Contiene información del proceso en ejecución (para mas detalles de los campos ver “Para obtener mas informaciòn”)

Además en el raiz del directorio /proc:

  • /proc/cpuinfo -> Contiene una lista de elementos dependientes del procesador y el sistema. Dependiendo la arquitectura la lista de parametros es diferente.
  • /proc/filesystems -> Lista de los filesystems.
  • /proc/meminfo -> Este archivo lo usa el comando free para informar la cantidad de memoria (libre y ocupada tanto fisica como swap) del sistema. Ademàs informa de la memoria compartida y buffers usados por el kernel
  • /proc/loadvg -> La información de este archivo puede ser leida por el programa dmesg y son lladas al sistema syslog para leer los mensajes del kernel.
  • /proc/partitions -> Contiene información de los máximos y minimos de cada partición asi como los numeros de bloques y los nombres de las particiones.
  • /proc/version -> Contiene informaciòn que identifica el tipo de kernel que se está ejecutando en ese momento, version del gcc y nombre de la distro instalada
  • /proc/locks -> Contiene información de los archivos bloqueados por el sistema
  • /proc/modules -> Contiene la lista de modulos que fueron cargados por el sistema
  • /proc/uptime -> Contiene dos numeros: los segundos que el sistema esta corriendo y los segundos gastados en el proceso “idle”.
  • /proc/swaps -> Contiene información de la memoria de intercambio

/proc/net es un directorio que contiene algunos archivos los cuales dan el estado de la capa de red. Son archivos que contienen estructuras ASCII y, por lo tanto, no se pueden leer con el comando cat. Algunos de estos archivos se acceden bajo el comando netstat.

  • /proc/net/arp -> Contiene una lista de la tabla arp que esta manejando el kernel.
  • /proc/net/dev -> Contiene información del estado del dispositivo de red. Da información de paquetes enviados y recibidos asi como también numero de errores y colisiones y estadisticas basicas.
  • /proc/net/tcp y udp -> Contienen una tabla de conectores. Este archivo es importante a la hora de hacer depuración.

Además del directorio /proc/net que mencionabamos, existe otro directorio muy importante dentro de la jerarquia. Este es el directorio /proc/sys en el cual podemos encontrar archivos y subdirectorios que corresponden a variables de entorno del kernel. Estas variables se pueden leer y en algunos casos modificar. Entre otros podemos encontrar:

  • /proc/sys/dev -> Podemos encontrar información referida a dispositivos dentro del sistema
  • /proc/sys/fs -> Contiene archivos y subdirectorios con información especifica sobre el filesystem, manejo de archivos, inodos y quotas, entre otros
  • /proc/sys/kernel -> Contiene información sobre el comportamiento del kernel, puede variar dependiendo el sistema y la configuracion
  • /proc/sys/net -> Contiene otros directorios con información relacionadas con networking dentro del sistema. En muchos de estos directorios se pueden modificar los archivos para ajustar configuraciones mientras el sistema esta corriendo.
  • /proc/sys/vm -> Contiene archivos y directorios que pueden ser utilizados para ajustar valors de la memoria virtual.

Entre las cosas que podriamos modificar dentro de este directorio es el poder activar el ruteo entre las placas de red. Esto se realiza de la siguiente manera:

echo 1 > /proc/sys/net/ipv4/ip_forward

Agregando un “1” al archivo /proc/sys/net/ipv4/ip_forward habilitamos el ruteo entre placas de red en nuestro sistema. Esta configuración es volatil, lo que significa que cada vez que reiniciemos nuestro equipo este cambio hay que hacerlo de nuevo.

Otra cosa que podria ser de utilidad es liberar la memoria cache, la cual guarda informacion de los procesos con el fin de ser utilizada de nuevo para futuros usos de ese proceso. Esto lo hace GNU/Linux de forma automatica pero podria utilizarse en algun caso. Para llevar a cabo esto debemos modificar el archivo /proc/sys/vm/drop_caches escribiendo un numero de 0 a 3. Cada numero cumple con las siguientes caracteristicas:

0 -> Deja que el kernel administre la memoria
1 -> Libera le memoria cache de paginación
2 -> Libera Directory Entries e Inodos
3 -> Implica 1 y 2

Para realizar esto debemos es conveniente ejecutar el comando sync el cual escribe en disco la información de la memoria RAM que se encuentra en el cache y la memoria buffereada asi de esta manera no liberar memoria “en uso”. La forma de hacerlo seria la siguiente:

sync ; echo opcion > /proc/sys/vm/drop_caches

Donde “opcion” son los numeros listados mas arriba.

Para obtener mas información al respecto:

Espero que les sea de utilidad.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s