SISTEMA DE ARCHIVOS /PROC (por Arrakixmint)La mayor parte de sistemas operativos ofrece un mecanismo mediante el cual,cuando sea necesario,se puede sondear el interior del propio sistema asi como fijar los parametros operacionales.En Linux,este mecanismo lo suministra el sistema de archivos proc.
Los sistemas operativos Windows de Microsoft permiten esto hasta cierto punto a traves del Registry.
El directorio /proc es el punto de montaje para el sistema de archivos proc y,como consecuencia,a menudo se usan los dos terminos de manera intercambiable.Con frecuencia,al sistema de archivos proc tambien se le menciona como el sistema de de archivos virtuales.
En este articulo,analizaremos el sistema de archivos proc y la manera en que funciona bajo Linux.Recorremos algunos programas generales y estudiaremos algunas entradas interesantes en /proc y,a continuacion,demostraremos algunas tareas administrativas comunes con el uso de /proc.
¿QUE HAY DENTRO DEL DIRECTORIO /PROC?Puesto que el nucleo de Linux es un componente tan clave en las operaciones del servidor,es importante que exista un metodo para intercambiar informacion con ese nucleo.De manera tradicional,esto se hace a traves de las llamadas del sistema;funciones especiales escritas por los programadores para usarse al solicitar al nucleo que realice funciones en beneficio de ellos.Sin embargo,en el contexto de la administracion de sistemas,las llamadas del sistema quieren decir que un programador necesita escribir una herramienta para que nosotros lo usemos(a menos que,por supuesto,a ti te guste escribir tus propios herramientas).Cuando todo lo que tu necesitas es hacer un simple ajuste pequeño o extraer alguna estadistica del nucleo,tener que escribir una herramienta personal representa mucho mas esfuerzo del que debe ser necesario.
Con el fin de mejorar la comunicación entre los usuarios y el nucleo,se creo el sistema de archivos proc.El sistemas de archivos completo es en especial interesante,porque en realidad no existe en alguna parte del disco;es sencillamente un resumen de la informacion del nucleo.Todos los archivos en el directorio corresponden a una funcion del nucleo o a un conjunto de variables que estan en el nucleo.
Que proc sea un resumen no significa que no sea un sistema de archivos.Lo que en realidad significa es que tuvo que desrrollarse un sistema especial de archivos para tratar a proc de manera diferente que a los sistemas normales de archivos basados en el disco.
Por ejemplo, para ver un informe acerca del tipo de procesador que se encuentra en un sistema, podemos, consultar uno de los archivos bajo el directorio /proc. El archivo en particular que contiene esta informacion es el /proc/cpuinfo. El archivo se puede ver con este comando:
Abre una terminal y escribe la orden de abajo para ver la informacion de la cpu.
cat /proc/cpuinfo
El nucleo creara en forma dinamica el informe,que muestre la informacion sobre el procesador y la manejara de regreso a cat,de modo que lo podamos ver.Esta es una manera sencilla y,sin embargo,poderosa con la que contamos para examinar el nucleo.
El directorio /proc soporta una jerarquia de facil lectura con el uso de subdirectorios y,como tal,es facil hallar la informacion.Los directorios bajo /proc tambien estan organizados de tal modo que los archivos que contienen informacion referente a temas semejantes estan agrupados juntos.Por ejemplo,el directorio /proc/scsi ofrece informes en relacion con el subsistema SCSI.
Incluso mas que una ventaja es que el flujo de informacion toma los dos caminos:el nucleo puede generar informes para nosotros,y nosotros podemos pasar con facilidad informacion de regreso al nucleo.
Por ejemplo,la realizacion de un ls -1 en el directorio /proc/sys/net/ipv4 nos mostrara una gran cantidad de archivos que no son solo de lectura,sino de lectura/escritura,lo cual quiere decir que algunos de los valores alamacenados en esos archivos se pueden alterar al vuelo.
¡¡”Oye!! ¡La mayor parte de los archivos /proc tienen cero bytes y uno es ENORME!¿Que da?”
No te preocupes si has advertido todos esos archivos de cero bytes;la mayor parte de los archivos en el /proc son de cero bytes porque /proc en realidad no existe en el disco.
Cuando un usuario usa cat para leer un archivo /proc,el contenido de ese archivo se genera de forma dinamica por medio de un programa especial que se encuentra en el interior del nucleo.Como resultado,el informe nunca se guarda de regreso al disco y,por consiguiente,no ocupa espacio.
Piensa en ello a la misma luz de los scripts CGI para los sitios web,en donde una pagina Web generada por un script CGI no se escribe de regreso al disco del servidor sino que se vuelve a generar cada vez que un usuario visita la pagina.
Precaucion:Ese unico archivo enorme que se ve en /proc es el /proc/kcore,el cual en ralidad es un apuntador hacia el contenido de la RAM.Si tienes 128 de RAM,el archivo /proc/kcore tambien tiene 128 de RAM.Leer /proc/kcore es como leer el contenido en bruto de la memoria(y,por supuesto,no requiere permisos raiz).
PEQUEÑOS AJUSTES A LOS ARCHIVOS DENTRO DE /PROCComo mencione en la seccion anterior,algunos de los archivos bajo el directorio(y subdirectorios)
/proc tienen un modo de lectura-escritura.Examinemos uno de esos directorios con un poco de mayor profundidad.Los archivos que estan en /proc/sys/net/ipv4 representan parametros en la pila TCP/IP que se pueden “afinar” en forma dinamica.Usa el comando cat para mirar un archivo en particular y veras que la mayor parte de los archovos nada contienen mas que un solo numero.
¡Pero cambiando estos numeros,puede afectar el compartamiento de la pila TCP/IP de Linux!
Por ejemplo,el archivo /proc/sys/net/ipv4/ip_forward contiene un 0(desactivado)de modo prederteminado.Esto le dice a Linux que no realice reenvios IP cuando se tienen interfaces multiples en la red.Pero si quieres estructurar algo como un encaminador Linux,necesitas dejar que se realicen los reenvios.En esta situcion,puedes editar el archivo /proc/sys/net/ipv4/ip_forward y cambiar el numero hacia 1(activado).
Una manera rapida de hacer este cambio es mediante el uso del comando echo de este modo:
# echo “1” > /proc/sys/net/ipv4/ip_forward .
Ten cuidado al hacer pequeños ajustes de los parametros en el nucleo de Linux.No existe red de seguridad que lo salve de que realices ajustes erroneos para parametros criticos,lo cual quiere decir que es del todo posible que puedas hacer que el sistema se caiga.SI NO ESTAS SEGURO ACERCA DE UN ITEM,ES MEJOR QUE LO DEJES COMO ESTA HASTA QUE HAYAS AVERIGUADO CON TODA CERTEZA PARA QUE ES.
ENTRADAS UTILES DE /PROCEn la tabla siguiente se da una lista de las entradas de /proc que un usuario puede encontrar utiles en la administracion de tu sistema Linux.Un apunte,esta tabla solo es un grito lejano de lo que es una lista exhaustiva.
Para obtener mas detalles,lee con atencion los directorios por ti mismo y asi veras que encuentras.
O tambien puedes leer el archivo proc.txt en el directorio Documentation del codigo fuente del nucleo de Linux.
A menos que se diga otra cosa,puedes usar sencillamente el programa cat para ver el contenido de un archivo particular que este en el directorio /proc.Empecemos:
- cat /proc/cpuinfo/ ----- Informacion acerca de la CPU(o las CPU) en el sistema.
- cat /proc/interrupts ----Uso de IRQ en tu sistema.
- cat /proc/ioports -------Presenta una lista de las regiones de puertos registrados que se usan para
comunicación de entrada o salida (I/O)con los dispositivos.
- cat /proc/iomem -----Presenta el mapa actual de la memoria del sistema para cada dispositivo
fisico.
- cat /proc/mdstat ----Estado de la configuracion RAID.
- cat /proc/meminfo ---Estado del uso de la memoria.
- cat /proc/kcore -------Este archivo representa la memoria fisica del sistema.A diferencia de los
otros archivos bajo /proc,este archivo tiene un tamaño asociado con el.
Su tamaño suele ser igual de la cantidad total de la RAM fisica disponible.
- cat /proc/modules ----La misma informacion producida como salida de lsmod.
- cat /proc/pci ----------Informa de todos los dispositivos PCI conocidos en tu sistema.
- cat /proc/buddyinfo ---La informacion almacenada en este archivo se puede usar para diagnosticar
los aspectos de fragmentacion de la memoria.
- cat /proc/cmdline -----Presenta los parametros pasados al nucleo cuando este arranco(parametros
del momento de inicializacion).
- cat /proc/swaps --------Estado de las particiones de intercambio (swap),del volumen y/o de los
archivos.
- cat /proc/version -------Numero actual de la version del nucleo,la maquina en la cual se compilo,
y la fecha y la hora de la compilacion.
- cat /proc/ide/* ---------Informacion acerca de todos los dispositivos IDE.
- cat /proc/scsi/* ---------Informacion acerca de todos los dispositivos SCSI.
- cat /proc/net/arp -------Tabla ARP (la misma salida que la de arp -a)
- cat /proc/net/dev --------Informacion acerca de cada uno de los dispositivos de la red(cuentas de
paquetes,cuentas de error,etc).
- cat /proc/net/snmp ------Estadisticas SNMP acerca de cada protocolo.
- cat /proc/net/sockstat ---Estadistica sobre la utilizacion del enchufe de la red.
- cat /proc/sys/fs/* -------Ajustes para la utilizacion del sistema de archivos por el nucleo.Muchos
de estos son valores que se pueden escribir;ten cuidadado acerca de
cambiarlos,a menos que estes seguro de las repercusiones de hacerlo.
- cat /proc/sys/net/core/netdev_max_backlog ----Cuando el nucleo recibe paquetes de la red mas rapido de como procesarlos,los coloca en una cola especial.De modo prederterminado,se permite un maximo de 300 paquetes en la cola.En circunstancias extraordinarias,puede ser que el usuario necesite editar este archivo y cambiar el valor para el maximo permitido.
- cat /proc/sys/net/ipv4/icmp_echo_ignore_all ----Predeterminado= 0,lo que significa que el nucleo respondera a mensajes ICPM de respuesta de echo.La fijacion de esto en 1 le dice al nucleo que cese de responder a esos mensajes.
- cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ----Predeterminado= 0,lo que significa que el
nucleo permitira que se envien respuestas ICMP a difusion o a direcciones de destinos multiples.
- cat /proc/sys/net/ipv4/ip_forward ---Predeterminado= 0,lo que significa que el nucleo no reenviara
entre las interfaces de la red.Para permitir el reenvio(por ejemplo,para encaminar),cambialo a 1.
- cat /proc/sys/net/ipv4/ip_local_port_range ------Rango de los puertos que Linux usara cuando se origine una conexión.Predeterminado= 32768-61000.
- cat /proc/sys/net/ipv4/tcp_syn_cookies -----Predeterminado= 0(desactivado)Cambia a 1(activado)
con el fin de activar la proteccion para el sistema contra ataques de inundacion SYN.
Fin de la primera parte,se que alguno pensara que esto es para enteradillos o nivel extra-mental,pero no es tanto el fuego que quema,mas bien es el humo el que impide ver y termina ahogandote.Perder el miedo a nuestro sistema es fundamental para avanzar.A mi todo esto me sonaba a una marcianada
cuando llegue a Linux,hoy me parece normal y fundamental el comprender nuestro sistema.Pero poco a poco, sin pasarse.Asi que no agobiaros tomarlo con calma porque siempre hay algo nuevo por descubrir y entender.
Saludos.