Linux: File System y la jerarquía FHS

¿Dónde está el Disco C?

Si estás buscando el disco C, lamento ser quien te diga que no hay tutorial para encontrarlo, porque no existe. Entonces, las preguntas que nos hacemos son: ¿Dónde busco los programas que instalé? ¿Dónde están “Mis documentos” o las “Descargas”? ¿Qué son todas esas carpetas que veo al abrir el administrador de archivos?

El Disco C, en Windows, es una herencia directa de MS-DOS, que a su vez lo tomó de un SO anterior llamado CP/M. En un inicio, las computadoras personales no contaban con disco rígido, por lo que el Sistema Operativo se cargaba por medio de un disquete. Existían típicamente dos ranuras:

  • Unidad A: Reservada para la carga del SO (disquete de arranque).
  • Unidad B: Reservada para guardar la información (disquete de almacenamiento).

Cuando el disco rígido se volvió un estándar, fue necesario asignarle una unidad con su letra; la C era la primera disponible. Con los años, Windows mantuvo esa nomenclatura por compatibilidad hacia atrás, ya que miles de programas antiguos esperaban encontrar el sistema en C:\.

A diferencia de Windows, donde el sistema está sujeto a una partición física identificada por una letra, Linux utiliza el sistema de montaje, lo que entrega ventajas en cuanto a:

  • Visibilidad: Mientras que en Windows cada partición es una letra (C:, D:) que actúa como una raíz nueva, en Linux tenemos una única raíz (/) en donde se integra todo.
  • Flexibilidad: En Windows, si modificamos la letra del sistema, se rompe todo. En Linux, se pueden mover carpetas a otros discos o directorios sin que el sistema lo note.
  • Escalabilidad: En Windows estamos limitados a las letras del abecedario, lo que resulta caótico en servidores con muchos discos. En Linux, si quiero un disco para imágenes, puedo montarlo en /home/usuario/fotos. Si ese disco se llena, puedo montar uno nuevo en /home/usuario/fotos/2026. Para el software la ruta nunca cambia, no importa que físicamente los datos estén en dispositivos distintos. La clave de Linux es que, aunque la ubicación física cambie, su ruta lógica permanece idéntica.

Todo es un archivo

Para que Linux pueda ser tan flexible, existe una regla principal: en Linux, todo es un archivo.

Un documento es, lógicamente, un archivo. Pero una carpeta también lo es: uno especial que contiene una lista de otros archivos. El teclado o el mouse también son archivos ubicados en /dev. Hasta un proceso ejecutándose es un archivo en /proc.

Esto permite que las herramientas del sistema sean universales. Podemos utilizar el mismo comando para leer un archivo de texto, para capturar los datos que entran por un puerto USB o para ver cuánta memoria RAM libre tenemos. No son necesarios programas complejos para entablar comunicación con el hardware; solo hace falta que el software sepa leer un archivo.

Pero, ¿cómo es posible? Un archivo de texto, un teclado y un proceso tienen naturalezas distintas. Aquí interviene el Kernel (el núcleo del sistema). Para lograr esta universalidad, Linux utiliza una capa de abstracción llamada VFS (Virtual File System).

El VFS es una interfaz dentro del Kernel que le dice al sistema que, sin importar si lo que lee es un disco o un cable de red, debe mostrarlo como un archivo. Esto funciona gracias a una estructura llamada Inodo (Index node), que es la ficha de identidad de cada objeto en el sistema.

  • Carpeta: Es una tabla de nombres traducida a un archivo con la lista de su contenido.
  • Puerto USB: Traduce impulsos eléctricos en un flujo de datos continuo (stream) del que obtenemos caracteres.
  • Proceso: Traduce datos de la memoria RAM en un archivo de texto legible.

Lo que no es universal son los drivers (controladores), que son los programas específicos para hablar con cada hardware. El VFS toma lo que dice el driver y lo envuelve en la “interfaz de archivo”. Nosotros usamos cat, nano o nvim para leer esos datos, mientras el Kernel busca la información en los registros del hardware en ese microsegundo.

File System (FHS)

Linux organiza sus carpetas bajo un estándar llamado FHS (Filesystem Hierarchy Standard). Su importancia radica en la seguridad y administración: si sabemos qué hay en cada lugar, podemos aplicar reglas distintas (como limitar el tamaño de una carpeta o hacer que sea de “solo lectura”).

Las carpetas principales se dividen en:

Núcleo del Sistema

Las carpetas /bin, /sbin y /lib contienen los ejecutables y bibliotecas necesarios para que el sistema arranque. Se separan del resto para que, si el sistema falla, aún tengamos herramientas básicas para arreglarlo.

Configuración

La carpeta /etc es el “panel de control” en formato de texto. Aquí residen las configuraciones de los programas y del SO. Esto facilita los backups: copiando esta carpeta, básicamente salvás la configuración de toda tu máquina.

Usuario

Las carpetas /home y /root. En /home están tus archivos personales, mientras que /root es el espacio privado del administrador. Esta separación permite, por ejemplo, reinstalar el SO formateando la raíz pero manteniendo tus documentos y configuraciones intactos en la partición /home.

Recursos del Usuario

La carpeta /usr es la más grande. Aquí se instalan los programas (Chrome, compiladores, etc.). Su diseño permite que los programas sean compartidos en red o marcados como “solo lectura”, mientras las configuraciones locales quedan a salvo en /etc.

Archivos Virtuales

Las carpetas /proc, /sys y /dev. Son representaciones que el Kernel hace del hardware y los procesos. No ocupan espacio real en disco. Comandos como cat /proc/meminfo generan la información justo en el momento en que pedís leerla.

Engranaje Operativo

Estas carpetas gestionan el soporte y el estado del sistema:

  • /boot: Residen el Kernel y el cargador de arranque (GRUB). Sin esto, la PC no enciende.
  • /media: Montaje automático de USBs y discos externos.
  • /mnt: Montaje manual y permanente de discos o particiones de red.
  • /run: Datos de ejecución en memoria RAM que desaparecen al apagar la PC.
  • /var: Datos variables, principalmente logs (registros). Si algo falla, la respuesta suele estar en /var/log.
  • /tmp: Archivos temporales que funcionan como “borrador” para los programas y suelen borrarse al reiniciar.

Mapa Visual del Árbol

/ (Raíz)
├── bin    -> Binarios esenciales
├── boot   -> Archivos de arranque
├── dev    -> Archivos de dispositivos (hardware)
├── etc    -> Configuración del sistema
├── home   -> Usuarios (ej. /home/alejandro)
├── lib    -> Bibliotecas esenciales
├── media  -> Montaje de USB/Discos externos
├── mnt    -> Montaje manual de discos
├── opt    -> Software opcional de terceros
├── proc   -> Información de procesos (virtual)
├── root   -> Home del superusuario
├── run    -> Datos de ejecución actual
├── sbin   -> Binarios de administración
├── tmp    -> Archivos temporales
├── usr    -> Aplicaciones de usuario y librerías
└── var    -> Archivos variables (logs, bases de datos)