Consola Linux III: Los directorios Linux

Publicado el 25 noviembre 2014 por Instintobinario

En la anterior entrega comenzamos con los comandos básicos de Linux para movernos por el árbol de directorios y los caracteres especiales. En ésta entrega de la serie voy a explicar los diferentes directorios Linux y qué uso tiene cada uno. El conocimiento de los directorios Linux  es básico para conocer la estructura del sistema y saber donde encontrar cada fichero de configuración que nos permitirá configurar el sistema exactamente como queremos.

Antes de entrar con ello, debo aclarar que Linux es un sistema multiusuario, lo que quiere decir que varias personas pueden utilizar el mismo equipo para su trabajo existiendo sistemas que separan el trabajo de unos y de otros por medios de los permisos. En la próxima entrega explicaré qué son los permisos de archivos y directorios y como se manejan. Existe un usuario de Linux que es especial y que es el único que es obligatorio que esté en el sistema: se trata del root, también conocido como superusuario. Éste es, por así decirlo, el “amo absoluto del sistema, y siempre tiene permiso para ver y modificar todos los archivos. Si no tuviera permiso para tocar un archivo si que lo tendría para cambiar los permisos del mismo, dándose a sí mismo todos los permisos sobre el mismo. En teoría, el root tiene permiso para hacer: rm -R /. Digo en teoría por que podría encontrar ciertos conflictos en la realización de esto. Explico esto por que a la mayoría de los archivos del sistema, por defecto, solo puede acceder el root.

En Linux, todos los archivos se encuentran dentro de un directorio, y todos los directorios se encuentran, en última instancia, dentro del directorio /, o raíz, que contiene todo el sistema. Esto quiere decir que, si por ejemplo queremos buscar un archivo que no sabemos en qué parte del sistema se encuentra, deberemos seleccionar como punto de partida para la búsqueda el directorio raíz. Vamos a pasar a explicar el contenido y función de los diferentes directorios:

      • /bin
        Contiene los ficheros ejecutables de los comandos y programas esenciales del sistema: cp, mv, ls, cd… Cuando ejecutamos éstos comandos, el sistema busca aquí el código de programa que debe ejecutarse para realizar ésta acción.
      • /boot

        Aquí están los ficheros utilizados en el arranque del sistema: discos RAM, kérnel o núcleo del sistema…

      • /dev
        Dispositivos conectados al sistema. Como ya he explicado, todo el sistema parte del directorio /, por lo que éstos dispositivos se montan como un ‘device file’ o fichero de dispositivo, en ésta carpeta o a partir de ella. En otro entrega explicaré el tema de los dispositivos.
      • /etc
        Ficheros de configuración del sistema específicos del equipo.
        • /etc/opt
          Ficheros de configuración de programas alojados en la carpeta /opt.
        • /etc/X11

          Ficheros de configuración del sistema X Window. Ésto es el sistema de interfaces gráficas. Éste directorio es opcional.

        • /etc/sgml
          Ficheros de configuración del sistema SGML (Standard Generalized Markup Language). Éste sistema se utiliza para el marcado de ficheros. Directorio opcional.
        • /etc/xml
          Ficheros de configuración de XML. Directorio opcional.
      • /home
        Contiene los directorios de los usuarios. Los usuarios comunes sin ningún permiso de administración solo pueden acceder a su correspondiente directorio aquí.
      • /lib
        Bibliotecas compartidas esenciales para la ejecución de los binarios de /bin y /sbin y para el kernel del sistema.
      • /mnt
        Sistemas de ficheros externos montados de forma temporal.
      • /media
        Puntos de montaje para dispositivos de medios como las unidades lectoras de disco, o las memorias USB.
      • /opt
        Paquetes de aplicaciones estáticas.
      • /proc
        Sistema virtual de ficheros que documenta sucesos del sistema y estados del kernel. Contiene mayormente ficheros de texto.
      • /root
        Directorio home del usuario root. Es un directorio opcional.
      • /sbin
        Comandos y programas binarios para la administración del sistema.
      • /tmp
        Archivos temporales del sistema. Éste directorio puede ser escrito y leído por cualquiera, y los administradores lo borran periódicamente.
      • /srv
        Datos específicos de sitios servidos por el sistema.
      • /usr
        Jerarquía secundaria de datos compartidos de solo lectura. Este directorio puede ser compartido entre varios equipos por red y no debe contener datos particulares del equipo que lo comparte.
        • /usr/bin
          Comandos y programas binarios.
        • /usr/include
          Ficheros de inclusión estándar, como librerías de cabecera utilizadas en el desarrollo de programas.
        • /usr/lib
          Bibliotecas compartidas
        • /usr/share
          Datos compartidos independientes de la arquitectura del sistema: Imágenes, ficheros de texto, etc.
        • /usr/local
          Jerarquía terciaria de datos compartidos de solo lectura específicos del ordenador que los comparte.
      • /var
        Ficheros variables como logs, bases de datos… Es el directorio raíz para servidores HTTP y FTP, colas de correo , ficheros temporales, etc.
        • /var/cache
          Caché de datos de aplicaciones.
        • /var/crash
          Contiene ficheros con información referente a caídas del sistema. Es opcional.
        • /var/games
          Datos variables de aplicaciones para juegos. Es opcional.
        • /var/lib
          Información del estado variable. Algunos servidores tipo MySQL o PostgreSQL almacenan sus bases de datos en subdirectorios de éste.
        • /var/lock
          Ficheros de bloqueo.
        • /var/log
          Ficheros y directorios de registro del sistema.
        • /var/mail
          Buzones de correo de los usuarios. Es opcional.
        • /var/opt
          Datos variables de las aplicaciones de /opt.
        • /var/spool
          Colas de datos de aplicaciones.
        • /var/tmp
          Ficheros temporales preservados entre reinicios.

Así pues, tras ver todo esto, podemos concluir que un usuario cualquiera, sin ningún permiso especial de administración, solo poadrá acceder al directorio con su nombre que cuelga de home y al tmp, todos los demás solo pueden ser vistos y modificados por los administradores del sistema y, por supuesto, por el root. Lo más probable es que, en tu equipo, solo lo manejes tú, pero aún así es altamente recomendable utilizar un usuario diferente del root para el trabajo diario, ya que éste podría borrar cualquier archivo importante por error sin que haya nada que se lo impida.

Existe una forma mediante la cual, cualquier usuario puede ejecutar un comando o programa con los mismos privilegios que el root. Para ello es tan simple como añadir dicho usuario al fichero /etc/sudoers de la siguiente forma:

nombre_usuario ALL=(ALL:ALL) ALL

De ésta forma el usuario podrá ejecutar cualquier comando como si fuese el root tan solo poniendo el comando sudo delante del comando a ejecutar. Por ejemplo para ejecutar el comando ls sobre un directorio sin permisos de lectura: sudo ls /boot.

También es posible conceder permisos sudo para ciertos comandos específicos, pero eso lo dejaremos para otro artículo. Por último decir que el comando visudo requiere permiso de sudo, valga la redundancia, por lo que solo lo podrá ejecutar un usuario que ya tenga asignados esos permisos (inicialmente el root). Sin embargo, en casi todos los sistemas Linux se concede el permiso sudo sobre todos los comandos al usuario que se crea durante la instalación, por ejemplo en Ubuntu.

Espero que éste artículo sea útil para comprender un poco más como se estructura un sistema Linux.

Otros artículos de ésta serie:

Consola Linux I – ¿Por que la consola?

Consola Linux II – Navegar por el árbol de directorios

El artículo Consola Linux III: Los directorios Linux apareció por primera vez en Instinto Binario.