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.
N° 15