Latinoamérica
de.novatoanovato@gmail.com

Estándar de jerarquía FHS

Dedicado al nuevo usuario de software libre

Estándar de jerarquía FHS

¿Qué es el estándar de jerarquía del sistema de archivos FHS?

El estándar de jerarquía del sistema de archivos, conocido por sus siglas en ingles como FHS “Filesystem Hierarchy Standard” y actualmente mantenida por la Linux Fundation, es la norma que define la disposición que tendrían los directorios y su contenido en los sistemas operativos del tipo Unix, como los es GNU/Linux.

Es mediante esta normativa o estandarización que en GNU/Linux disponemos de un sistema de directorios estructurado, coherente y estandarizado obteniendo así las siguiente ventajas:

  1. El software que tenemos instalado sabe en todo momento las carpetas y los permisos de las carpetas. Por lo tanto nuestro software en todo momento sabe donde encontrar y almacenar la información que necesita para su funcionamiento.
  2. Los usuarios saben en todo momento el contenido que hay en cada una de las carpetas.
  3. Ayuda a la hora de realizar el mantenimiento de un sistema operativo.
  4. Ayuda a otorgar los permisos pertinentes a cada uno de los archivos de nuestro sistema.

Un poco de su historia

El proceso de desarrollo de una jerarquía de sistema de archivos estándar comenzó en agosto de 1993 con un esfuerzo enfocado a reestructurar el archivo y la estructura Linux. El FSSTND (Estándar del Sistema de Archivos), un estándar de la jerarquía del sistema de archivos específico del sistema operativo Linux, fue liberado el 14 de febrero de 1994. Revisiones posteriores fueron liberadas el 9 de octubre de 1994 y el 28 de marzo de 1995.

A principios de 1996, el objetivo de desarrollar una versión más comprensiva del FSSTND para direccionar no sólo a GNU/Linux, sino a otros sistemas derivados de UNIX, fue adoptado con la ayuda de miembros de la comunidad de desarrollo de BSD. Por consiguiente, un concentrado esfuerzo fue realizado para centrarse en hechos que fueran generales para los sistemas derivados de UNIX. En reconocimiento a esta amplitud del alcance, el nombre del estándar fue cambiado Estándar de Jerarquía del Sistema de Archivos, o FHS para abreviar.

El FHS es mantenido por el Grupo de Estándares Libres (Free Standards Group, hoy The Linux Foundation), una organización no lucrativa conformada por los principales vendedores de software y hardware, tales como: HP, Red Hat, IBM y Dell.

Fuente: wikipedia

En GNU/Linux, todo es un archivo

Si llevas un tiempo utilizando GNU/Linux, puede que este concepto ya este mas que adoptado, pero si estas dando tus primeros pasos en GNU/Linux es necesario que sepas que en el pingüino todo es un archivo, tanto el Software como el Hardware. Entonces ¿el mouse, la impresora, el monitor, un directorio, un subdirectorio, un fichero de texto: ¿Son archivos?. La respuesta es que si, todo. En apartados posteriores, veremos donde ubicar en GNU/Linux los elementos Hardware en el sistema de archivos y como organiza elementos del sistema, de momentos entendamos que son archivos montados.

Tipos de Archivos

La base del sistema de archivos en GNU/Linux es el archivo, que no es otra cosa que la estructura empleada por el sistema operativo para almacenar información en un dispositivo físico, como por ejemplo: un disco duro, un disquete, un CD-ROM o un DVD y/o una unidad USB. Como es natural un archivo puede contener cualquier tipo de información, desde una imagen, texto, audio, etc.

El sistema de archivos es la estructura que permite que GNU/Linux maneje los archivos que contiene y en donde todos los archivos cuentan con un nombre que debe cumplir unas ciertas reglas:

  • El nombre de un archivo puede tener entre 1 y 255 caracteres.
  • Se puede utilizar cualquier carácter excepto la barra inclinada / y no es recomendable emplear los denominados caracteres especial, entre los que encontramos a: = \ ^ ~ ‘ » ` * ; – ? [ ] ( )! & ~ < >.
  • Se pueden utilizar números exclusivamente si así se desea.
  • Las letras mayúsculas y minúsculas se consideran diferentes.

Pese a estas caracteristicas, GNU/Linux sólo distingue tres tipos de archivos:

  • Archivos o ficheros ordinarios, son los mencionados anteriormente (.txt, .jpg, .html, etc).
  • Directorios (o carpetas), es un archivo especial que agrupa otros ficheros de una forma estructurada.
  • Archivos especiales, son la base sobre la que se asienta GNU/Linux y representan a los dispositivos de hardaware.

Organización del árbol de directorios en GNU/Linux

Como vimos en un principio, el estándar de jerarquía de directorios FHS nos brinda de: directorios coherentes, estructurados y organizados. Bueno veamos su organización y el contenido de cada uno de los directorios designado por este estándar.

Raíz: /

Toda la estructura de directorios en los sistemas basados en UNIX parte de un directorio raíz, también llamado directorio root, que se simboliza por una barra inclinada o diagonal /. De este directorio, es desde donde nacen todo el resto de directorios, independientemente que estén almacenados físicamente en discos o unidades separadas.

Cualquier dirección de archivo o carpeta en Linux empieza por el directorio raíz o /, seguido de todos los directorios y subdirectorios que lo contienen, separados cada uno de ellos por /.

/bin

El directorio /bin es un directorio estático y es donde se almacenan todos los binarios necesarios para garantizar las funciones básicas a nivel de usuario. Solo almacena los ejecutables de usuario, ya que los binarios necesarios para tareas administrativas gestionadas por el usuario root o superusuario del sistema se encuentran en el directorio /sbin.

Incluye también los binarios que permiten la ejecución de varias utilidades estándar de la terminal de GNU/Linux, concretamente cat, cd, cp, echo, grep, gzip, kill, ls, mv, rm, ping, su, ps, tar y vi.

/boot

Es un directorio estático e incluye todos los ejecutables y archivos que son necesarios en el proceso de arranque del sistema, y que deberán ser utilizados antes de que el kernel empiece a dar las órdenes de ejecución de los diferentes módulos del sistema. Es también donde se encuentra el gestor de arranque GRUB.

En algunas distribuciones, es común que ese directorio se almacene en su propia partición, esta separada del resto. Esto suele darse sobretodo en el caso de que utilicen LVM por defecto, ya que tradicionalmente el gestor de arranque GRUB (en versiones anteriores a la 2) no podía arrancar desde LVM, por lo que se requería que estuviera en una partición separada.

De hecho, si en una instalación normal de Ubuntu o Debian optas por utilizar LVM, verás que el instalador ya te genera un esquema de particiones con el directorio boot en una partición aparte.

En estos casos es importante prever bien el espacio que le vayas a dar a la partición, ya que a la larga, con la acumulación de diferentes actualizaciones del Kernel, es común que se quede sin espacio y debas hacer limpieza de versiones antiguas del kernel.

/dev

Este directorio incluye todos los dispositivos de almacenamiento, en forma de archivos, conectados al sistema, es decir, cualquier disco duro, partición, memoria USB, o CDROM conectado al sistema y que el sistema pueda entender como un volumen lógico de almacenamiento.

Siendo esto así, verás que la ruta en la que se encuentra cualquier volumen del sistema siempre empieza por /dev.
Si quieres observar la estructura de particiones, abrimos las consola de comandos y ejecutamos sudo fdisk -l. En mi caso, la estructura de particiones es la siguiente:

Si se trata de un dispositivo externo, el volumen estará igualmente dentro de /dev, pero en este caso varía el nombre que el sistema le asigna a dicho volumen. Generalmente la estructura suele ser /dev/sdb1 y así según la cantidad de dispositivos externos conectados.

/etc

Es donde se almacenan los archivos de configuración tanto a nivel de componentes del sistema operativo en sí, como de los programas y aplicaciones instalados durante su uso.

Es un directorio que debería contener únicamente archivos de configuración, y no debería contener binarios.

/home

Es el directorio de los usuarios estándar, y por lo tanto, el destinado a almacenar todos los archivos del usuario, como documentos, fotos, vídeos, música, plantillas, etc. También incluye archivos temporales de aplicaciones ejecutadas en modo usuario, que sirven para guardar las configuraciones de programas, etc.

Dentro /home se encuentran los directorios personales de todos los usuarios, nombrados según el nombre de usuario utilizado. Así por ejemplo, si en un sistema pongamos que hay dos usuarios denominados User1 y User2, la estructura se vería de la siguiente manera:
/home/User1 y /home/User2

Cada directorio de usuario contiene asimismo diferentes carpetas para ayudarlo a clasificar la información. Estas generalmente por defecto son: /Documentos, /Imágenes, /Música, /Plantillas y /Vídeos /, así como otros archivos y carpetas ocultas, que son las encargados de guardar la información de configuraciones de las aplicaciones del usuario.

Para visualizar los ficheros ocultos dentro del directorio individual de cada usuario, puedes hacerlo rápidamente mediante la combinación de comandos CTRL + H. Por cierto, y muy importante, todos los archivos y carpetas ocultas en Linux empiezan por un punto, seguido del nombre de la carpeta.

En muchas distribuciones es una práctica recomendada el hecho de ubicar el directorio /home es una partición separada del resto, por tal de facilitar que, en caso de reinstalar el sistema operativo, puedas mantener intacta la partición de la /home, y de este modo mantener todos los archivos personales.

/lib

Incluye las bibliotecas esenciales que son necesarias para que se puedan ejecutar correctamente todos los binarios que se encuentran en los directorios /bin y /sbin, así como los módulos del propio kernel.

En los sistemas operativos de 64 bits, además de /lib existe otro directorio denominado /lib64, referida a las bibliotecas para aplicaciones de 64 bits.

/media

Representa el punto de montaje de todos los volúmenes lógicos que se montan temporalmente, ya sean unidades externas USB, otras particiones de disco, etc.

En la mayoría de distribuciones GNU/Linux, desde hace ya algún tiempo, cada vez que se monta una unidad externa, partición, etc., esta se monta dentro del directorio /media y a su vez dentro de un directorio especifico dependiendo del usuario del sistema que monta el volumen.

De este modo, si en un sistema hay varios usuarios, pongamos User1 y User2, los puntos de montaje de los volúmenes que montan cada uno de ellos se mostraran en directorios separados tal como así:

/media/User1 /media/User2

/mnt

Es un directorio vacío que cumple funciones similares a /media, pero que actualmente no se suele utilizar, ya que la mayoría de distribuciones hacen uso de este último para los puntos de montaje temporales.

Aunque en casos particulares, como por ejemplo la reinstalaron del GRUB, este directorio se utiliza para montar desde un «live-cd» las particiones del sistema instalado para poder trabajar sobre ellas como si estuviésemos dentro del sistema.

/usr

El directorio /usr viene de “User System Resources” y actualmente sirve para almacenar todos los archivos de solo lectura y relativos a las utilidades de usuario, incluyendo todo el software instalado a través de los gestores de paquetes de cada distribución. Contiene los siguientes subdirectorios:

  • /usr/bin
  • /usr/include
  • /usr/lib
  • /usr/local
  • /usr/sbin
  • /usr/share
  • /usr/src

Antiguamente /usr también contenía la carpeta particular de usuario, junto con todos sus documentos, vídeos, fotos, etc., pero más adelante se creó el directorio /home para este propósito, dejando /usr reservado para los archivos relativos a programas.

/opt

En cierto modo vendría a ser como una extensión del directorio /usr, pero en este caso van todos aquellos archivos de solo lectura que son parte de programas auto-contenidos y que, por lo tanto, no siguen los estándares de almacenar los diferentes archivos dentro de los diferentes subdirectorios de /usr (que sería lo recomendable)

Haciendo una analogía con Windows, vendría a ser algo como el directorio de “Archivos y Programas”, pero en este caso, como hemos dicho, para determinados programas que ya vienen auto-contenidos.

/proc

Este directorio contiene información de los procesos y aplicaciones que se están ejecutando en un momento determinado en el sistema, pero realmente no guarda nada como tal, ya que lo que almacena son archivos virtuales, por lo que el contenido de este directorio es nulo.

Básicamente son listas de eventos del sistema operativo que se generan en el momento de acceder a ellos, y que no existen dentro del directorio como tales.

/root

Vendría a ser como el directorio /home del usuario root o superusuario del sistema. A diferencia de los otros usuarios, que se encuentran todos dentro de /home en sus respectivas subcarpetas, el directorio del usuario root está en su propia carpeta colgando directamente de la raíz del sistema.

/sbin

Si hemos dicho que en /bin se almacenaban los binarios relativos a las funciones normales de usuario, /sbin hace lo mismo pero para los binarios relativos tareas propias del sistema operativo, y que solamente pueden ser gestionadas por el usuario root, tales como el arranque, tareas de restauración, reparación, etc.

/srv

Sirve para almacenar archivos y directorios relativos a servidores que puedas tener instalados dentro de tu sistema, ya sea un servidor web www, un servidor FTP, CVS, etc.

Así, por ejemplo, en el caso de tener instalado un servidor web, sería buena idea tener el directorio web público dentro de /srv, tal como así:

  • /srv/www
  • /sys

Al igual que /proc, contiene archivos virtuales que proveen información del kernel relativa a eventos del sistema operativo. Es en cierto modo una evolución de /proc, y a diferencia de este último, los archivos se distribuyen de forma jerárquica.

/tmp

Como ya da a entender su nombre, sirve para almacenar archivos temporales de todo tipo, ya sea de elementos del sistema, o también de diferentes aplicaciones a nivel de usuario como puedan ser Firefox.

Es un directorio dispuesto para almacenar contenido de corta duración, de hecho en la gran mayoría de los casos se suele vaciar de forma automática en cada reinicio del sistema. Aun así, no debes borrar su contenido de forma manual, puesto que puede contener archivos necesarios para ciertos programas o procesos que estén ejecutándose.

Las aplicaciones programadas para almacenar archivos en este directorio deben asumir que solo serán recuperables en la sesión actual. En este sentido, hay otro subdirectorio, /var/tmp, dispuesto igualmente para el almacenamiento de archivos temporales, pero cuyo contenido no se borra de forma automática tras el reinicio del sistema.

/var

contiene varios archivos con información del sistema, como archivos de logs, e-mails de los usuarios del sistema, bases de datos, información almacenada en la caché, información relativa a los paquetes de aplicaciones almacenados en /opt, etc. En cierto modo se podría decir que actúa a modo de registro del sistema.

Características de directorios en el estándar de jerarquía del sistema de archivos FHS

Los directorios bajo esta normativa (FHS) pueden agruparse según algunas caracteristicas. Esta clasificación nos permite adentrarnos un poco mas sobre las acciones que podríamos tomar y las que no sobre los directorios en GNU/Linux.

Directorios estáticos y dinámicos

La primera clasificación que veremos sera la de los directorios que pueden ser modificados y aquellos que no.

Directorios estáticos

Son considerados directorios estáticos aquellos que contiene archivos que no cambian sin la intervención del administrador (root) o con permisos de administrador, sin embargo, pueden ser leídos por cualquier otro usuario. Entre ellos encontramos a:

  • /bin
  • /sbin
  • /opt
  • /boot
  • /usr/bin
  • /etc/password
  • /etc/shadow

Directorios dinámicos

Son considerados directorios dinámicos  aquellos que contiene archivos que son cambiantes sin la interaccion del administrador. Este tipo de directorios contiene elemtentos que pueden leerse y escribirse, algunos sólo por su o sus respectivos usuarios y, por una cuestión de privilegios, por el root.

  • /var/mail
  • /var/spool
  • /var/run
  • /var/lock
  • /var/log

Directorios compartibles y no compartibles

Otra clasificación que veremos sera para definir a aquellos directorios que pueden ser compartidos y los que no pueden ser compartidos.

Directorios compartibles

Son considerados directorios compartibles a aquellos que pueden ser accedidos desde distintos equipos. Por lo tanto estos directorios son los que contienen archivos que se pueden usar desde otros equipos. O incluso compartirse entre usuarios. Como por ejemplo:

  • /var/www/html

Directorios no compartibles

Al contrario que los directorios compartibles, los directorios no compartibles son aquellos que no se pueden compartir y su acceso y modificación están limitados al administrador del sistema. Por lo tanto los directorios no compartibles contienen archivos que solo puedes ser accesibles y modificados por el administrador del sistemas (root).

  • /boot/grub

Puedes seguirnos en:

Ayudanos a mantener el sitio con una contribución.
Muchas gracias!

Espero sea de utilidad.
Saludos, Cristian Bellini.

 

Una respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *