¿Cómo está organizado el sistema de archivos de Linux?

En los últimos días hemos descubierto algunas curiosidades sobre el shell de Linux y, mientras intentamos averiguar más (si tienes alguna curiosidad al respecto, no temas preguntar), nos adentramos en un tema más complejo: la estructura del sistema de archivos de los sistemas operativos basados en Linux, es decir, el conjunto de carpetas presentes en el sistema que tienen nombres aparentemente incomprensibles.

La organización del sistema de archivos de Linux es jerárquico: todo parte de un único directoriono hay distinción entre el hardware y el software (el Los periféricos de hardware en Linux se representan como archivos especiales) y cualquier parte del sistema es hija del directorio raíz. En pocas palabras, todo comienza en el directorio raíz y todo termina en él..

Echemos un vistazo a la estructura del sistema de archivos y a la organización de las carpetas principales: para facilitar las cosas a quienes no estén familiarizados con Linux, siempre que sea posible se especificará la “contrapartida” de Windows.

/ (directorio raíz)
|_ /home
|_ /usr
|_ /lib
|_ /etc
|_ /tmp
|_ /var
|_ /boot
|_ /dev
|_ /mnt
|_ /proc
|_ /opt

Directorio /: el directorio raíz.

El directorio raíz ( / ) es la carpeta de las carpetas: en / se puede encontrar casi todo, navegar dentro de él significa tener acceso a cualquier parte del sistema operativo. En ella puedes encontrar todas las demás carpetas del sistema (como /usr, /lib, /proc y todas las demás). Sin embargo, no es inmediato entenderlo procedimientos de instalación de los programas de Linux no vayas NUNCA para crear subcarpetas subcarpetas en / por una cuestión de orden, sino que utiliza, como descubrirá más adelante, directorios dedicados.

Se puede acceder al directorio / escribiendo cd / desde el terminal, o escribiendo / en la barra de direcciones del gestor de archivos. Un vistazo a quién puede acceder y operar en el directorio raíz:

malefika@malefika-laptop:~$ stat /
File: `/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 806h/2054d Inode: 2 Links: 22
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Las dos primeras líneas nos dicen que el archivo se llama /, es “grande” 4096 bytes (como cualquier directorio) y ocupa 8 bloques. E’ en el dispositivo llamado 806h/2054d. (el disco duro), es conectado al nodo-i 2 y tiene otras 20 carpetas en ella (el número de enlaces menos dos, excluyendo “.” y “..”).

Los permisos asociados a la raíz son d rwx r-x r-xLa d significa directorio, los tres primeros rwx son los permisos de permisos de lectura, escritura y ejecución para el usuario propietario., los siguientes r-x son los permisos de leer y ejecutar para el grupoy luego los permisos para leer y ejecutar para otros. Esto nos dice que cualquiera puede leer y escribir en / (permisos de lectura y ejecución), pero sólo el propietario podría borrarlo (permisos de escritura). El propietario de / es el usuario con identificador 0, es decir, el root, y el grupo propietario es el grupo con identificador 0, el grupo root.

El directorio / es la base del sistema. Hablando en términos Windowsianos, a un nivel más o menos lógico / podría ser el equivalente a C:N-.

Directorio /home: las carpetas del usuario.

Cada usuario tiene su propio directorio personal (el llamado directorio principal del usuario)y todos los directorios personales se encuentran, por defecto, en el directorio /home (que es editable o eliminable sólo por el usuario root). Si, por ejemplo, su nombre de usuario es malefikaSu carpeta personal será /home/malefika.

Cada directorio personal contendrá los directorios Documentos, Imágenes, Escritorio y demás de cada usuario, creados durante la creación del usuario según lo definido en un archivo específico (/etc/skel).

Cada directorio personal es propiedad del usuario: los permisos de las carpetas personales varían de un sistema a otro, pero en general pueden ser leer, modificar y borrar por el usuario propietario. (y el usuario root, que puede hacer cualquier cosa) y se muestra sólo de lectura para todos los demás. Hay que hablar por separado del directorio de usuario del superusuario, presente directamente en /raízque sólo y únicamente puede acceder el root.

 malefika@malefika-laptop:~$ stat /home
 File: `/home'
 Size: 4096 Blocks: 8 IO Block: 4096 directory
 Device: 806h/2054d Inode: 131076 Links: 4
 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

malefika@malefika-laptop:~$ stat /home/malefika
 File: `/home/malefika'
 Size: 12288 Blocks: 24 IO Block: 4096 directory
 Device: 806h/2054d Inode: 131487 Links: 59
 Access: (0755/drwxr-xr-x) Uid: ( 1000/malefika) Gid: ( 1000/malefika)

malefika@malefika-laptop:~$ stat /root
 File: `/root'
 Size: 4096 Blocks: 8 IO Block: 4096 directory
 Device: 806h/2054d Inode: 393222 Links: 11
 Access: (0700/drwx------) Uid: ( 0/ root) Gid: ( 0/ root)

En términos de Windows, el directorio /home es una especie de “C:NUsuario”.

El directorio /usr: el comodín.

En directorio /usr hay – para simplificar mucho las cosas – los archivos del sistema que pueden ser compartidos en un sistema distribuido a través de NFS (muchas máquinas que utilizan el mismo sistema operativo) y toda la información sobre los programas instalados en el sistema (así como los propios programas) :

  • en /usr/bin suele contener los archivos binarios (las aplicaciones);
  • en /usr/lib contiene los archivos de la biblioteca para ejecutar los programas instalados;
  • en /usr/games generalmente contiene los archivos necesarios para ejecutar los juegos;
  • en /usr/include son las cabeceras de las bibliotecas (para compilar aplicaciones);
  • en /usr/share allí se encuentran los datos relacionados con las distintas aplicaciones, incluidas las páginas del manual (una especie de C:NsersAppDataRoaming);
  • en /usr/sbin suelen estar presentes los programas que permiten actuar en el sistema sólo como superusuario;
  • en /usr/src las fuentes de los programas pueden estar presentes (aunque normalmente sólo se encuentran allí las fuentes del núcleo).

Para el /usr/local hay que retroceder un poco en el tiempo: en su día, no había paquetes autoinstalables para Linux, todas las instalaciones tenían que hacerse con un proceso de construcción manual. Actualizar un paquete era a menudo bastante peligroso porque podías encontrarte con errores: en el directorio /usr/local (casi idéntico a /usr) se movían los paquetes que no estaban instalados. no debe actualizarse a través de la red por ningún motivo.así como todo lo que no podía (ni debía) ser compartido con otras máquinas: básicamente todo lo que debía ser instalado sólo localmente y no actualizado.

Pequeña nota: todos los ejecutables en /usr/bin, /usr/local/bin o /usr/sbin son ejecutables en el terminal sin especificar la ruta absoluta. El directorio /usr (y todos sus subdirectorios) son accesibles para todo el mundo, pero sólo pueden ser editados por el usuario root.

En la práctica, el directorio /usr es algo bastante parecido a C:Windows.

Los directorios /lib, /etc, /tmp, /var y /boot

El /lib contiene otra parte de las bibliotecas del sistema. El directorio /etc, por otro lado, contiene todos los ajustes relacionado con aplicaciones del sistema (por ejemplo, la configuración del servidor X, la configuración del gestor de escritorios, la configuración de la red y del cortafuegos, la configuración del control de energía, etc.).

El directorio /tmp es el que almacena todos los archivos temporales. En el directorio En /var se escribe la información generada por los programas en ejecución, como información sobre la fecha de inicio y finalización de la ejecución, los volcados de fallos, los registros y demás (el famoso es el directorio /var/log). En directorio /boot, En cambio, hay todos los archivos relacionados con la puesta en marcha del sistema.

Todas las carpetas anteriores, por defecto, son visibles para todo el mundo y sólo editables por el superusuario.

El directorio /dev

Como se mencionó al principio, en Linux incluso los dispositivos de hardware se ven como archivos: especiales, pero aún así son archivos. Está en el /dev encontrará archivos para todos los periféricos de hardware que puedan estar presentes en su sistema. En /dev encontraremos archivos como tty – los terminales gráficos, cdrom – el reproductor de cd, hdX o sdX – los discos duros, audio – los dispositivos de audio, ram – los discos ram, input – los periféricos como teclados y ratones… ¡y muchos más tipos de archivos!

Famoso es el /dev/nullUn archivo especial que representa un “dispositivo nulo” y tiene la característica muy especial de hacer exactamente lo contrario de la operación de almacenamiento: almacenar cualquier cosa en /dev/null significa perder esa cosa. El directorio puede ser visto por todos, pero sólo puede ser editado por el usuario root.

El directorio /mnt: dispositivos de almacenamiento

Cuando quiera ver el contenido de una memoria USB, un CD/DVD, un disco duro externo o una partición que no sea / (o un punto de montaje del sistema) tendrá que monte el dispositivo que desea mostrar. Esta es una operación que antes tenía que hacerse necesariamente a mano con privilegios de root y, por cada dispositivo montado, se solía crear una subcarpeta en /mnt.

/mnt era el lugar para acceder a todos los periféricos montados en el sistema (una especie de muy generalizadoOrdenador en Windows). La mayoría de las distribuciones actuales permiten utilizar el automontaje y así montar automáticamente los dispositivos conectados al sistema: aunque la carpeta /mnt todavía queda, estas distribuciones pueden cargar los periféricos montados en otro lugar (por ejemplo, Ubuntu los carga en /medios de comunicación).

El directorio /proc

Cada proceso que se ejecuta en Linux ocupa recursos del sistema (dispositivos de entrada y salida, áreas de memoria, archivos abiertos, etc.) y, para gestionar estos procesos, el sistema utiliza una especie de sistema de archivos que no ocupa espacio en la memoria masiva sino que se carga totalmente en la RAM: este sistema de archivos es se materializa justo en el directorio /proc. Navegando en el directorio descubrirá tantos directorios como procesos se estén ejecutando en el sistema (algunos nombres corresponden a nombres de procesos, otros pueden ser pids). Para ver el información contenida en cada subdirectorio necesitarás privilegios de superusuario.

Por último, pero no menos importante: el directorio /opt

El /opt en teoría es para la instalación de “grandes programas”, los que tienen muchos archivos y no necesitan sólo un archivo binario (o algunos otros archivos dispersos por el sistema) para funcionar: para preservar un cierto orden, así como para evitar las molestas y largas búsquedas, es preferible instalar estos grandes programas con todos sus archivos relacionados en un subdirectorio dedicado de /opt.

El directorio /opt también se utiliza como directorio de instalación para los programas no gestionados por el gestor de paquetes de nuestra distribución, o al menos debería serlo normalmente. /opt también se puede ver un poco como el C:|Programas.