Empezando por el principio: Jerarquía del sistema de archivos en Arch

Publicado: agosto 4, 2013 en FileSystem, System
Etiquetas:, , ,

Para los sistemas operativos Linux y UNIX existe un estándar (Filesystem Hierarchy Standar – FHS) que establece cómo debería ser la jerarquía del sistema de archivos, al que pueden adherirse voluntariamente aquellos que lo deseen. En general, la mayor parte de distribuciones Linux lo siguen, pero suelen hacer sus propias variaciones.

Al acercarnos a un nuevo sistema operativo, es muy conveniente conocer cómo está organizado el sistema de archivos, pues nos será más fácil su administración.  En este artículo veremos cuál es esta organización en Arch.

Tipos de directorios

Podemos clasificar los directorios del sistema según sea la sensibilidad de su contenido como:

  1. Compartibles: Contiene archivos que pueden ser compartidos entre diferentes ordenadores y/o por diferentes usuarios.
  2. Restringidos: Contiene archivos que no se pueden compartir y sólo pueden ser modificados por el usuario administrador.

Si atendemos al tipo de contenido:

  1. Estáticos: En estos directorios se alojarán los binarios, bibliotecas, documentación, etc. En general, estos archivos no cambian sin la intervención del administrador, aunque pueden ser leídos por el resto de usuarios.
  2. Dinámicos: El contenido de estos directorios, básicamente, será de aquellos archivos que no son estáticos.

Jerarquía primaria

El directorio raíz del sistema, representado con /, es el primer nivel de la jerarquía. De él cuelgan todos los subsistemas de ficheros, aunque se encuentren en dispositivos distintos.

El directorio /boot es no compartible y estático. En el se alojarán las imágenes del kernel e initrd (disco RAM inicial). Además se alojará el archivo de configuración del cargador de arranque (bootloader). También se almacenan los datos que utilizan antes de que el kernel comience a ejecutar los programas en el espacio de usuario.

Una de las características más destacable de los sistemas UNIX, es que “todo es un archivo o un directorio”. Al arrancar el sistema e ir detectando éste los dispositivos, se crean unos nodos para acceder a ellos. Estos nodos son los archivos que se alojarán en /dev. La mayor parte de los dispositivos serán de bloque o de carácter. En general, “los dispositivos de bloque” son dispositivos que almacenan datos, mientras que los “dispositivos de carácter” pueden ser considerados como los dispositivos que transmiten o transfieren datos. Por ejemplo, los discos duros y unidades ópticas se clasifican como dispositivos de bloque,  mientras que los puertos de serie, ratones y los puertos USB son dispositivos de carácter.

En el directorio /etc alojaremos los archivos de configuración no compartibles específicos del host. En el caso de que una aplicación necesite varios archivos, se suele utilizar un subdirectorio para, así, mantener el directorio /etc lo más limpio posible.

Los archivos de configuración para el sistema X Window se alojan en /etc/X11. Los archivos de configuración de Xinit se encuentran en /etc/X11/xinit. Xinit es un método de configuración para arrancar las X y está diseñado para utilizarse como parte de una secuencia de comandos (script) .

El archivo /etc/X11/xinit/xinitrc contiene la configuración glogal utilizada por todas las sesiones iniciadas con xinit (startx). Cada usuario puede sobreescribir esta configuración con el archivo .xinitrc, alojado en su directorio principal.

Los sistemas basados en UNIX y, por tanto los sistemas Linux, son sistemas multiusuario. Cada usuario del sistema dispondrá de un directorio en que guardar su configuración, datos, instalar software, etc. Es accesible, en principio, por el usuario Root y el propio usuario. Estos directorios se encuentran dentro de /home. Los archivos de configuración iniciales (empiezan por . y están ocultos, conocidos como dot files), se copiarán de /etc/skel, que es sitio donde se encuentran los archivos de configuración de ejemplo del sistema. Una forma rápida de hacer referencia al “home” del usuario es ~/, que es equivalente a /home/<nombre de usuario>.

Los sistemas basados en UNIX deben realizar una secuencia de apagado correcta. En el caso de que no se haya realizado así, bien por bloqueos o cortes de corriente eléctrica, el sistema realizará una comprobación del sistema de archivos en el siguiente arranque. En el caso de que se hayan dañado archivos, se tratarán de recuperar, alojando el resultado en  /lost+found. No hay garantía de que la recuperación de los archivos sea completa, aunque puede sernos de utilidad.

Para que podamos utilizar un sistema de archivos, alojado en una partición de un disco duro, primero debemos montarlo. Aunque no hay restricciones para crear puntos de montaje en cualquier lugar del sistema, es conveniente utilizar los directorios creados para ello, de forma que mantengamos una coherencia y limpieza del sistema. Los directorios que se utilizan son:

/mnt: Los sistemas de archivos montados temporalmente irán en este directorio. Podemos crear dentro de él más subdirectorios para alojar diferentes puntos de montaje.

/media: Aquí suelen montarse las particiones y discos que se detectan en el arranque, como USBs, CDs, DVDs, etc. Si queremos que un disco o partición perteneciente a otro sistema operativo instalado en el equipo sea accesible desde nuestro sistema, éste sería el sitio indicado para hacerlo. En el caso de que el montaje sea sólo temporal, es decir, que no queramos que esté siempre disponible, sería mejor utilizar /mnt.

Hay paquetes que no se ajustan con el diseño de sistema de archivos que estamos exponiendo. Por ejemplo, el paquete Acrobat dispone de ciertas herramientas que se sitúan en el mismo nivel que el binario. Dado que esto no se ajustaría a esta distribución de archivos, es mejor alojarlo en otro sitio. Para estos casos problemáticos está el directorio /opt, en el que se creará un subdirectorio para cada paquete, que contendrá los archivos correspondientes.

Un directorio especial que contiene la información de sistema en tiempo de ejecución, es el directorio /proc. Es un sistema de archivos virtual y no contiene archivos “reales”. Es un centro de control e información para el kernel. Nos permite alterar los valores de configuración del kernel con el sistema en ejecución. Los cambios se pueden hacer permanentes modificando el archivo /etc/sysctl.conf. Hay multitud de utilidades de sistema que utilizan este directorio. Por ejemplo, si queremos listar los módulos cargados en nuestro sistema, podemos utilizar lsmod o cat /proc/modules. Como curiosidad y distinción del resto de directorios, todos los archivos del mismo tienen tamaño 0, excepto  kcore, mounts y self.

El punto de montaje /run es montado sobre RAM (tmpfs) al inicio del arranque, para que esté disponible a todas las herramientas durante el arranque. Almacenará la información reciente, como el funcionamiento del sistema desde el último arranque, usuarios logueados, demonios en ejecución, etc.

Según el FHS, debería estar en /var/run pero, dado que /var puede estar montado en una partición aparte y se montaría en una etapa posterior en el arranque a la que requiere systemd o udev por ejemplo, se reemplaza /var/run por un enlace simbólico a /run.

Los datos que son servidos por el sistema los podemos alojar en /srv. El propósito principal es que los usuarios ubiquen aquí los datos de un servicio particular. Por ejemplo, las secuencias de comandos CGI, los archivos estáticos de una aplicación web, etc. Los datos que sólo interesen a un usuario específico, serán alojados su home.

Los archivos temporales del sistema se alojan en /tmp. Este directorio se monta como tmpfs, es decir sobre RAM, por lo que se borra su contenido en cada reinicio. Para los archivos temporales, pero que sea necesario preservarlos en cada arranque, disponemos de /var/tmp.

Jerarquía secundaria

El directorio /usr, compartible como sólo lectura, es la jerarquía secundaria del sistema de archivos. Este directorio sólo debería ser escrito por el gestor de paquetes. Cualquier información específica del host o que varía con el paso del tiempo, ha de ser alojada en otro lugar.

Es uno de los directorios más importante de nuestro sistema, junto el /home. Aquí encontraremos los binarios, su documentación, bibliotecas, etc.

Los binarios se alojarán en /usr/bin (se sustituyen  /bin, /sbin y /usr/sbin por enlaces simbólicos a /usr/bin), las cabeceras necesarias para compilar se alojan en /usr/include y, las bibliotecas, en /usr/lib.

Dado que todos los binarios están en /usr/bin, no tiene sentido tener aparte bibliotecas en /lib. Esto se hacía para distinguir las bibliotecas de las que dependían los binarios de /bin y /usr/bin, además de permitir montar /usr en paso posterior a las etapas iniciales de arranque. Ahora, para arrancar el sistema es necesario montar también la partición donde se aloje /usr, por lo que /lib, /lib64 y /usr/lib64 se han sustituido por enlaces simbólicos a /usr/lib.

Si los binarios están alojados en /usr/bin, ¿dónde alojamos los archivos compartibles e independientes de la arquitectura? Estos archivos comprenderían documentación, iconos del sistema, fuentes, etc. Además de los archivos mencionados, los datos que necesite un programa o paquete para ejecutarse, pero que no sean modificados en tiempo de ejecución, serán almacenados en /usr/share.

El directorio /usr/src se utiliza para alojar las cabeceras y código fuente del kernel.

Los archivos variables del sistema se alojarán en /var. No se utiliza /usr para estos archivos porque /usr se puede montar como sólo lectura y, los archivos contenidos en este directorio, necesitan permisos de escritura también. Específicos de Arch, podemos encontrar:

/var/abs: Contiene el árbol utilizado por ABS, el sistema de ports que dispone Arch, similar a los ports de *BSD

/var/cache/pacman/pkg: La caché para los paquetes utilizados por pacman.

/var/lib: Datos persistentes, modificados por aplicaciones en ejecución, por ejemplo, bases de datos.

/var/log: Archivos de registro.

/var/mail: Directorio compartible destinado a los buzones de los usuarios.

/var/spool: Colas para tareas que necesitan ser procesadas, como correos sin leer, o la cola de impresión).

Jerarquía terciaria

La idea original detrás de /usr/local era disponer de un directorio independiente a /usr en todas las máquinas, de modo que /usr pueda ser compartido como de sólo lectura en otros equipos. Mantiene la misma estructura de /usr.

Actualmente se utiliza para instalar software directamente desde las fuentes de forma manual, y que así pueda coexistir con la paquetería instalada por pacman, evitando conflictos de archivos al instalar o actualizar el sistema, por ejemplo.

Fuente:

ArchLinux filesystem hierarchy

Anuncios
comentarios
  1. Yoyo dice:

    Excelente primera entrada, y ya era hora de verte en WordPress 🙂

    Te agrego a mi poderoso blog-roll 😉

    Saludos y que la fuerza te acompañe…

  2. helq dice:

    Muy interesante la entrada. Tenía dudas sobre algunos de los directorios, pero ahora ya no, creo.

    Por cierto un pequeño error de tipeado, en el texto colocas /bin/lib y tal ubicación no existe. (~_^)

    Por último os recomiendo la siguiente lectura sobre aquello de “todo es un fichero” en Unix: http://diegocg.blogspot.com/2011/12/trapos-sucios-de-unix-readdir.html

    • Archeando dice:

      Gracias! Acabo de corregir el error, debería haber puesto /usr/lib (mira que lo repasé, necesito cambiar las gafas!! XD)

      Si necesitas alguna aclaración, no dudes en consultar.

      Un saludo!

  3. […] Empezando por el principio: Jerarquía del sistema de archivos en Arch. […]

  4. […] Empezando por el principio: Jerarquía del sistema de archivos en Arch. […]

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