Entendiendo los sistemas de archivos en Linux

Siguiendo con los tips para GNU/Linux, esta vez postearé sobre los distintos sistemas de archivos en las distribuciones Linux. Un manual de la universidad decía:

En un sistema Unix, todo es un archivo; si algo no es un archivo, es un proceso.

Estructura de ArchivosAlgo que puede resultar confuso para los novatos en Linux, es ver todas aquellas carpetas que tenemos en nuestro sistema una vez instalado. A diferencia de una instalación nueva de Windows, que crea, hasta donde recuerdo, Archivos de Programa, Windows y Documents and Settings, en una distribución Linux recién instalada tenemos varios directorios, que no son más que archivos que contienen los nombres de otros archivos. Dependerá de los permisos asignados por el administrador el que podamos ingresar a ellos o no. Hasta los dispositivos de entrada y salida son considerados archivos por el sistema.

Describiré algunos de los directorios para orientar un poco a los novatos (pueden dar click a la imagen para tener una visión general). Para un usuario común no es necesario conocer esta estructura de archivos (ya que el Sistema Operativo la hace transparente a él), pero si es que desean profundizar un poco sobre Linux, pueden comenzar conociendo cómo es que está conformado

El SO tienen la distribución de archivos con una estructura de árbol, la que tiene como inicio el directorio / (llamado raíz o root). Debajo del directorio raíz, se encuentran los principales directorios del sistema. Para verlos, pueden lanzar en consola : ls /

$ ls /
bin    dev   initrd          lib         media  proc  srv  usr      vmlinuz.old
boot   etc   initrd.img      lib64       mnt    root  sys  var      windows
cdrom  home  initrd.img.old  lost+found  opt    sbin  tmp  vmlinuz

/bin: Se suelen ubicar acá los programas necesarios para la ejecución del sistema. Los “ejecutables” y son propiedad del superusuario (o root).

/boot: Contiene la información de arranque (booteo) del sistema, los kernels que tengamos instalados, así como un subcarpeta para el gestor de arranque (Grub o Lilo) y su configuración.

/dev: Dentro de esta carpeta, están definidos los diferentes tipos de periféricos disponibles. Hay que tener en cuenta que todo dispositivo es mapeado como un archivo. Generalmente, el usuario común no tiene acceso a los archivos de este directorio. Dentro de este directorio tenemos por ejemplo /dev/sda1, que corresponde a la primera partición de nuestro disco duro maestro, para que los usuarios puedan acceder a esta partición de disco, lo que hace el SO es mapearlo en algún otro directorio (por ejemplo en Ubuntu /media/disco).

Una mención aparte merece el archivo <code>/dev/null</code> o dispositivo nulo, es un archivo especial que es algo así como un “agujero negro”. Es decir, descarta toda la data que es escrita o enviada hacia él (pero que tiene la utilidad de reportarla como escrita). Por ejemplo, desde consola ejecuten:

ls -l

y luego

ls -l > /dev/null

El comando ls -l lista el contenido de un directorio con información detallada, y el parámetro > redirige la salida del comando hacia un lugar o archivo determinado. Así, al ejecutar ls -l > /dev/null redirigimos la salida al “agujero negro”. Es usado muchas veces en bromas o chistes geeks, por ejemplo: “envíe todas sus quejas a /dev/null” o un popular slogan del PowerBook G4 de Apple (el SO de los Apple está basado en UNIX) : “Arroje sus otros UNIX a /dev/null”

/etc: En este directorio se almacenan los archivos de configuración de los distintos programas que tenemos. Por ejemplo, en /etc/apache2/ tenemos los archivos de configuración del servidor web Apache.

/home: Es la carpeta donde se guardan los archivos personales de todos los usuarios, documentos, configuración específica de ciertos programas, etc. Viene a ser algo como el Documents and Settings de Windows. Dentro, existe una carpeta con el nombre de cada usuario. Generalmente, cada usuario tiene acceso sólo a su directorio home. Los usuarios normales tienen total control (lectura, escritura, ejecución) de los archivos de su “home” y en caso que un usuario común haga algo realmente desastroso con el sistema, sólo afectará su home, dejando el del resto de usuarios y el resto del SO intacto. El superusuario (root) tiene acceso total a todos los directorios de los demás usuarios (recuerden la frase: “cada user en su home y el root en el de todos”).

/initrd: Es un sistema de archivos temporal utilizado por el kernel durante el inicio (booteo)

/lib: Contiene las librerías utilizadas por los programas.

/mnt: En la mayoría de distribuciones, es el punto de montaje estándar de los dispositivos externos. Por ejemplo, podemos mapear la partición /dev/sdb4 en /mnt/musica para poder acceder a ella. En Ubuntu, los dispositivos están mapeados en /media, por lo que /mnt está vacía en una instalación estándar de esta distribución.

/opt: Por lo general se ubican e instalan aquí, programas de terceros. Por ejemplo, yo tengo Google Picasa en /opt/picasa.

/proc: Es un sistema de archivos virtual. Es utilizado para interactuar con el kernel. Contiene información que detectó el SO durante el arranque. Pueden hacer la prueba de obtener información, por ejemplo, de su CPU, mostrando la salida del archivo /proc/cpuinfo. En consola (y la info de mi procesador):

$cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 CPU 2.80GHz
stepping        : 9
cpu MHz         : 2800.113
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr
bogomips        : 5603.81
clflush size    : 64

Si es que desean saber cuánto tiempo (en segundos) hace que su sistema ha sido iniciado, ejecuten en consola: cat /proc/uptime

$cat /proc/uptime
4266.16 3104.12

El primer número indica el total de segundos que ha estado funcionando el sistema desde el último booteo. El segundo indica cuánto tiempo ha estado inactivo.

/root: Es el directorio home del superusuario

/sbin: Contiene “programas” usados por el sistema: mount (para montar particiones), shutdown (para apagar el sistema), etc. Generalmente, sólo el root puede ejecutarlos.

/tmp: Es el directorio temporal del sistema. Al reiniciar el SO, se borra su contenido.

/usr: Contiene librerías, documentación, etc. de los programas de usuario. Dentro contiene (entre otros) los directorios /usr/bin (para ejecutables de los usuarios), /usr/lib/ (para librerías de los usuarios), etc.

/var: Contiene información variable del sistema: archivos de logs /var/log/, la cola de correo /var/mail/, etc.

Pueden ver una descripción de los diversos subdirectorios en la Wikipedia en inglés.

Como siempre, son bienvenidos los comentarios, preguntas y precisiones.

Linuxfera Enviar a Linuxfera
Entradas Relacionadas:
  • Probando FlickrFS en Kubuntu
  • Búsquedas en Linux por consola
  • Abrir archivos djvu / djv en Linux
  • 4 Respuestas a “Entendiendo los sistemas de archivos en Linux”


    1. 1 NeoDaVe

      Creo que voy a necesitar un tiempo para memorizar esto… hehe

      Muy bueno este “tuto” sobre las carpetas, gracias!

    2. 2 markdbd

      Si, genial para aprender cada directorio, algo que cuando pasas de Windows a Linux te cuesta entender.

    3. 3 RedWarrior

      muy bien explicado, recuerdo que cuando empezé con esto de linux me volvía loco con tanta carpeta xD

      Ahora cuando tengo que usar windows por obligación siempre me pregunto:
      ¿dónde estará el /home?
      e inmediatamente me respondo a mi mismo:
      ah si, que aquí se llama documents asn settings

      jajajaja :P

    1. 1 Probando FlickrFS en Kubuntu en El Módem
      Dirección Pingback a 20 May, 2008, 2:02 am

    Añade un Comentario