Linux trata a casi todo como archivos disponiendo de entradas en el sistema de archivos para dispositivos de hardware. Dichos archivos /dev
se usan para acceder al hardware de un modo específico usando las llamadas al sistema de bajo nivel.
Los controladores de software que controlan el hardware pueden configurarse de un modo en particular, o son capaces de enviar información. Por ejemplo, un controlador de disco duro puede ser configurado para usar DMA en particular. Una tarjeta de red puede ser capaz de informar si ha negociado una conexión duplex de alta velocidad.
Linux proporciona un sistema de archivos especial, procfs
, que suele estar disponible a modo de directorio /proc
. Contiene muchos archivos especiales que permiten el acceso de alto nivel a la información de los controladores y del núcleo. Las aplicaciones pueden leer y escribir estos archivos para obtener información y pueden configurar parámetros siempre y cuando se ejecuten con los permisos de acceso adecuados.
Los archivos que aparecen en /proc
varían dependiendo del sistema, y cada nueva versión de Linux incluye más, ya que más controladores y prestaciones aceptan el sistema de archivo procfs
. A continuación vamos a ver alguno de los archivos más comunes y vamos a estudiar brevemente su uso.
Un ejemplo de la lista de directorios /proc
en Fedora podría ser:
En muchos casos, los archivos sólo se pueden leer y proporcionan información sobre el estado, Por ejemplo,
/proc/cpuinfo
proporciona información sobre los procesadores disponibles:
/proc/meminfo
y /proc/version
proporcionan información sobre el uso de memoria y la versión del núcleo, respectivamente:
La información que proporcionan estos archivos se genera cada vez que se lee el archivo. De manera que si volvemos a leer el archivo
meminfo
más tarde, obtendremos los segundos resultados.
Podremos encontrar más información sobre las funciones específicas del núcleo en los subdirectorios de /proc
. Por ejemplo, puede conseguir estadísticas sobre el uso de la conexión en red de /proc/net/sockstat
:
En algunas entradas
/proc
se puede leer y escribir. Por ejemplo, el número total de archivos que todos los programas en ejecución pueden abrir al mismo tiempo es un parámetro del núcleo de Linux. El valor actual puede leerse en /proc/sys/fs/file-max
:
Aquí el valor está configurado en 305.929. Si queremos aumentar este valor, puede hacerlo escribiendo el mismo archivo. Es posible que tenga que hacerlo si está ejecutando un juego de aplicaciones especializadas, como un sistema de base de datos que usa varias tablas, que han de abrir varios archivos al mismo tiempo.
Para aumentar el límite, por ejemplo, a 315.000, solo tenemos que escribir el nuevo límite en el archivo
file-max
:
Los subdirectorios de
/proc
que tienen nombres numéricos se usan para proporcionar acceso a la información sobre los programas en ejecución. Durante los próximos capítulos aprenderemos a ejecutar programas en modo de procesos.
Por ahora, tenga en cuenta que cada proceso tiene un único identificador: un número entre 1 y 32000. El comando ps
proporciona una lista de los procesos en ejecución actuales. Por ejemplo:
En este ejemplo podemos ver ejecutándose varias sesiones, entre ellas
gedit
y ps
.
El identificador de gedit es 28781, de manera que para obtener más información tiene que consultar /proc/28781:
El subdirectorio
fd
proporciona información sobre los descriptores de archivos abiertos que está usando el proceso. Esta información puede resultar útil para determinar cuántos archivos ha abierto un programa a la vez. Hay una entrada por descriptor abierto, el nombre se corresponde con el número del descriptor.
Podemos decir que el programa
gedit
se está ejecutando y que su directorio de trabajo actual es /usr/bin/gedit
. Es posible leer los otros archivos del directorio para ver la línea de comando usada para iniciarla, así como el entorno shell que tiene. Los archivos cmdline
y environ
proporcionan esta información a modo de serie de cadenas sin finalizar, así que tenga cuidado cuando las observe.