La jerarquía estándar de directorios en Linux (FHS)

El sistema de archivos de Linux no es una colección aleatoria de carpetas: es un contrato. El Filesystem Hierarchy Standard (FHS) define exactamente dónde debe vivir cada tipo de archivo, y todos los sistemas basados en Linux —Debian incluido— lo respetan. Cuando conoces ese contrato, puedes ir directamente al lugar correcto sin buscar a ciegas.

El motivo de que exista este estándar es histórico y práctico. En los primeros sistemas Unix, cada fabricante ponía los archivos donde le parecía bien, y los administradores perdían tiempo localizando cosas al cambiar de sistema. El FHS resolvió eso estableciendo una jerarquía con una lógica clara: los archivos se clasifican según quién los escribe (el sistema operativo, el administrador, el usuario), con qué frecuencia cambian (estáticos o variables) y si son esenciales para arrancar o no. Esa lógica explica por qué /bin y /etc están separados de /var y /home.

¿Cuándo te importa esto? Constantemente. Cuando un servicio falla y necesitas sus logs, sabes que están en /var/log. Cuando quieres editar la configuración de SSH, sabes que está en /etc/ssh. Cuando instalas un programa desde un .tar.gz de un tercero, sabes que /opt es el sitio correcto. No necesitas find ni locate para los casos habituales.

Lo que se rompe si ignoras el FHS es peor de lo que parece: si metes datos variables en /usr, el sistema de archivos raíz puede llenarse de forma inesperada; si colocas configuración dentro de /tmp, desaparece al reiniciar; si instalas software de terceros directamente en /usr/bin, mezclas tus archivos con los del gestor de paquetes y el siguiente apt upgrade puede sobreescribirlos o dejar basura imposible de rastrear.

# Recorrido comentado por los directorios más importantes del FHS
# Ejecuta cada 'ls' por separado para explorarlo en tu propia máquina

# / — La raíz del árbol. Todo el sistema de archivos cuelga de aquí.
# No es una partición en particular; es el punto de montaje inicial.
ls /

# /home — Los datos personales de cada usuario del sistema.
# Cada usuario tiene su propio subdirectorio: /home/ana, /home/carlos...
# El administrador nunca debería tocar lo que hay aquí sin razón.
ls /home

# /root — El home del superusuario (root).
# Está separado de /home deliberadamente: si /home es una partición
# distinta y falla el montaje, root puede seguir entrando al sistema.
ls -la /root

# /etc — Configuración del sistema, solo texto plano, sin binarios.
# "et cetera" en el Unix original, hoy significa "Editable Text Config"
# informalmente. Aquí está todo lo que configura el comportamiento del SO.
ls /etc/ssh        # configuración del servidor SSH
ls /etc/apt        # fuentes y opciones de apt
cat /etc/hostname  # el nombre de esta máquina

# /var — Datos que crecen o cambian mientras el sistema funciona.
# "variable". Logs, bases de datos, colas de correo, cachés de paquetes.
ls /var/log        # aquí busca primero cuando algo falla
ls /var/cache/apt  # paquetes descargados por apt, se puede limpiar sin miedo
ls /var/lib        # estado persistente de servicios (bases de datos, etc.)

# /usr — La mayoría de programas y librerías instalados por el sistema.
# "Unix System Resources". No es el directorio de usuarios (eso es /home).
# En Debian moderno, /bin y /sbin son enlaces simbólicos a /usr/bin y /usr/sbin.
ls /usr/bin | head -20   # ejecutables de usuario: ls, cp, python3, git...
ls /usr/sbin | head -20  # ejecutables de administración: useradd, sshd...
ls /usr/lib | head -10   # librerías compartidas (.so)
ls /usr/share | head -10 # datos independientes de arquitectura: man pages, iconos

# /opt — Software de terceros autocontenido.
# Si instalas Google Chrome o un SDK propietario fuera del gestor de paquetes,
# debe ir aquí. Cada paquete tiene su propio subdirectorio completo.
ls /opt  # en un sistema recién instalado probablemente esté vacío

# /tmp — Archivos temporales. Se borra al reiniciar (o incluso antes).
# En Debian con systemd, /tmp suele ser un tmpfs en RAM.
# Nunca guardes aquí nada que necesites conservar.
df -h /tmp  # comprueba que es tmpfs (memoria RAM)

# /boot — El kernel de Linux y el initramfs necesarios para arrancar.
# Si esto se corrompe, el sistema no arranca. Tócalo con cuidado.
ls /boot   # verás vmlinuz-*, initrd.img-*, grub/

# /dev — Archivos de dispositivos. No contienen datos, representan hardware.
# Cada disco, partición, terminal o dispositivo USB tiene un archivo aquí.
ls /dev/sd*   # discos SATA/SAS (sda, sdb...) y sus particiones
ls /dev/tty*  # terminales

# /proc y /sys — Filesystems virtuales. No existe nada en disco.
# El kernel los genera en memoria al vuelo para exponer su estado interno.
cat /proc/uptime          # segundos desde que arrancó el sistema
cat /proc/cpuinfo | head  # información de la CPU, directamente del kernel
cat /sys/class/net/*/operstate  # estado de cada interfaz de red

# /run — Datos volátiles de runtime, solo para la sesión actual.
# PIDs de servicios, sockets Unix, locks. Se crea de nuevo en cada arranque.
ls /run/systemd   # archivos de estado de systemd para la sesión actual

# /mnt y /media — Puntos de montaje.
# /mnt: montajes manuales y temporales que hace el administrador.
# /media: montajes automáticos de dispositivos extraíbles (USB, CD).
ls /mnt
ls /media

# Verifica que /bin es hoy un enlace simbólico a /usr/bin (Debian moderno):
ls -la / | grep "^l"   # muestra los symlinks en la raíz

Lo que acabas de ver

El ls -la /root lleva -la porque el directorio home de root tiene permisos 700 —solo root puede entrar— y necesitas -a para ver los archivos ocultos que empiezan por punto. Eso ya te dice algo: la separación entre /root y /home no es solo organizativa, tiene implicaciones de permisos.

Fíjate en la línea ls -la / | grep "^l": en Debian Bookworm vas a ver que /bin, /sbin, /lib y /lib64 son enlaces simbólicos apuntando a sus equivalentes bajo /usr/. Esto es la usrmerge, una consolidación que empezó en Debian 12. El resultado es que /bin/ls y /usr/bin/ls son el mismo archivo. Lo menciono porque si alguna vez ves documentación antigua que trata /bin y /usr/bin como directorios separados con archivos distintos, ya sabes que en Debian moderno eso ya no es así.

El df -h /tmp te va a mostrar que el tipo de sistema de archivos es tmpfs. Eso significa que /tmp vive en RAM, no en disco. La ventaja es velocidad y limpieza automática; la desventaja es que consume memoria. Si escribes un script que genera ficheros temporales grandes, hazlo en /var/tmp en su lugar: ese directorio también es para temporales, pero persiste entre reinicios y vive en disco.

/proc y /sys merecen una pausa. El cat /proc/uptime no lee ningún archivo de disco; el kernel fabrica ese contenido en el momento en que lo pides. Son interfaces al núcleo del sistema disfrazadas de archivos. Eso explica por qué herramientas como ps, top o ip son tan rápidas: solo leen de ahí.

La distinción entre /var/cache y /var/lib es sutil pero importante. Lo que está en /var/cache/apt son paquetes .deb descargados: puedes borrarlos con apt clean sin perder nada funcional, se pueden volver a descargar. Lo que está en /var/lib/dpkg es el estado de qué paquetes están instalados: si borras eso, apt pierde la memoria de tu sistema y te quedas en un estado difícil de recuperar.

Cuando veas en producción que un disco está lleno, lo primero que miras es /var/log (logs que nadie rota), /var/cache (cachés que nadie limpia) y /tmp (si por alguna razón no es tmpfs). El FHS te da el mapa; el mapa te ahorra tiempo.

15

Dejar un comentario

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

Scroll al inicio