Estructura FHS (Filesystem Hierarchy Standard)
Introduccion a la Estructura FHS (Filesystem Hierarchy Standard)
Introduccion
El Filesystem Hierarchy Standard (FHS) define una organización estándar de directorios en sistemas tipo Unix (especialmente Linux) para que el sistema operativo, los administradores y las aplicaciones encuentren archivos en ubicaciones previsibles.
Su objetivo es asegurar consistencia entre distribuciones y facilitar:
- Administración del sistema, si un administrador sabe donde estan las cosas no tiene porque volverse loco a la hora de localizar los directorios y archivos tipicos.
- Instalación de software, ya esta definido donde van por ejemplo los ejecutables dependiendo de su uso.
- Scripts portables, ya que en teoria los directorios deberian ser muy similars, facilita su reutilizacion entre distros.
Principios básicos del FHS
- Todo cuelga de / (raíz)
- Se separa lo esencial para arrancar y reparar de lo opcional
-
Se diferencian:
- datos estáticos (binarios, configuración)
- datos variables (logs, colas)
- datos compartibles entre máquinas
- datos específicos del host
Directorios principales y su función
/ (root)
Directorio raíz. Contiene lo mínimo para que el sistema pueda arrancar o montarse y acceder a estructuras esenciales.
/bin
Binarios esenciales para todos los usuarios (especialmente necesarios en modo rescate / single-user).
Ejemplos típicos: ls, cp, mv, cat, sh.
Nota actual: en muchas distros modernas /bin puede ser un enlace a /usr/bin (por unificación de /usr), pero el significado lógico se mantiene.
/sbin
Binarios esenciales del sistema, orientados a administración (normalmente usados por root).
Ejemplos: ip, fsck, mount, reboot.
/boot
Archivos necesarios para el arranque: kernel, initramfs/initrd, cargador (GRUB) y configuración relacionada.
Ejemplos: vmlinuz-* initramfs-* grub/
/boot/efi
Archivos necesarios para el arranque en siste UEFI: cargadores, drivers y configuración específica para UEFI.
Ejemplos: EFI/BOOT/BOOTX64.EFI EFI/ubuntu/grubx64.efi
Esta opcion permite la carga de múltiples sistemas operativos en la misma máquina, ya que cada uno puede tener su propia carpeta dentro de /boot/efi con su cargador específico.
Normalmente suele ir formateada en Fat32, para que Windows sea capaz de escribir en ella
/dev
Dispositivos representados como archivos (interfaz hacia el kernel).
Ejemplos:
- /dev/sda, /dev/nvme0n1 (discos)
- /dev/eht0, /dev/enp0s1
/etc
Configuración del sistema (archivos de texto normalmente). Debe ser host-specific (propio de la máquina).
Ejemplos:
- /etc/passwd, /etc/shadow
- /etc/fstab
- /etc/systemd/
/home
Directorios personales de usuarios.
Ejemplo:
- /home/usuario
/lib y /lib64
Bibliotecas esenciales necesarias para binarios de /bin y /sbin, y módulos del kernel.
Ejemplos:
- bibliotecas del cargador dinámico
- /lib/modules/mi-kernel/
/media
Puntos de montaje para medios extraíbles montados automáticamente (USB, CD/DVD).
Ejemplos:
- /media/usb
- /media/usuario/pendrive
/mnt
Punto de montaje “temporal” o manual para administradores.
Ejemplo:
- montar un disco para recuperación: /mnt/rescate
/opt
Software “opcional” o de terceros, normalmente auto-contenido.
Ejemplos:
- /opt/resolve
- /opt/vendor/app/
/proc
Pseudo-sistema de archivos con información del kernel y procesos (no son archivos “reales” en disco).
Ejemplos:
- /proc/cpuinfo
- /proc/meminfo
/proc/pid/
/root
Directorio personal del usuario root. No confundir con / (raíz del sistema).
/run
Datos volátiles en runtime (desde el arranque), normalmente en tmpfs.
Ejemplos:
- PID files
- sockets
- estado de servicios
/run/user/uid/
/srv
Datos servidos por servicios del sistema (contenido “servido”).
Ejemplos:
- /srv/www/
- /srv/ftp/
No todas las distros lo usan “por defecto”, pero es el lugar estándar según FHS
/sys
Pseudo-sistema con información de dispositivos, drivers y kernel (sysfs). Se usa para inspección/configuración a bajo nivel.
/tmp
Archivos temporales. Normalmente se permite borrado al reiniciar. Algunos sistemas lo montan en memoria (tmpfs).
/usr
Contenido “user system resources”: la mayor parte de aplicaciones y bibliotecas. Suele ser compartible y relativamente estático.
Ejemplos:
- /usr/bin → la mayoría de comandos
- /usr/sbin → administración no esencial para rescate
- /usr/lib → bibliotecas
- /usr/share → datos independientes de arquitectura (docs, iconos, locales)
/var
Datos variables: cambian con el uso del sistema.
Ejemplos:
- /var/log → logs
- /var/lib → estado persistente de servicios (bases de datos internas, metadatos)
- /var/www → común en algunas distros/stack web (aunque también se usa /srv/www)
Buenas prácticas (muy aplicables en empresa)
Separar particiones:
- / (raíz)
- /boot/efi (Sistema UEFI)
- /home (usuarios)
- /var (logs y datos variables)
Vigilar crecimiento:
- /var/log
- /var/lib
- /home (usuarios)
- /var (logs y datos variables)