Estructura de directorios en Linux

viernes, agosto 15, 2008

Me ha pasado, al estar recién migrado a Linux, verme obligado a buscar "algo" en el disco duro (por ejemplo, el ejecutable de un programa, un archivo de configuración, etc), y encontrarme con la jerarquía de carpetas típicas de Linux/unix/etc, y no saber para dónde disparar... o sea, en win mas o menos sabés que los ejecutables de los programas están en "c:\archivos de programas", los archivos de windows estan en "c:\windows" o "c:\winnt" según sea el caso, etc.
En Linux, como suele suceder con muchas otras cuestiones, las cosas están más organizadas. Pero si uno cae sin previa idea, por más organizado que esté, estas totalmente perdido. Por eso me pareció útil combinar un par de fuentes de info más alguna que otra cosa que pueda saber yo, y crear esta referencia para quienes la necesiten.

Más o menos algo así es la jerarquía de carpetas en un Sistema Operativo GNU/Linux de escritorio típico (en este caso, Kubuntu):

coski@bukowski:~$ cd /
coski@bukowski:/$ ls -1 --sort=extension
bin
boot
cdrom
dev
etc
home
initrd
lib
lost+found
media
mnt
opt
proc
root
sbin
srv
tmp
usr
var
Veamos para qué sirve y qué hay en cada carpeta, mas o menos..:

/bin
En esta carpeta se ubican ejecutables de programas básicos para el sistema, que pueden ser usados tanto por root como por usuarios comunes, en consola. Programas como "ls" para listar archivos (el que utilicé para sacar la estructura de carpetas arriba posteada), "cp" para copiar, "kill" para enviar señales a los procesos, "ps" para mostrar procesos, etc. Click acá para expandir un contenido de muestra de la carpeta /bin

coski@bukowski:/$ cd bin
coski@bukowski:/bin$ ls -1 --sort=extension
bash
bunzip2
bzcat
bzcmp
bzdiff
bzegrep
bzexe
bzfgrep
bzgrep
bzip2
bzip2recover
bzless
bzmore
cat
chgrp
chmod
chown
cp
cpio
dash
date
dd
df
dir
dmesg
dnsdomainname
echo
ed
egrep
false
fgconsole
fgrep
fuser
fusermount
grep
gunzip
gzexe
gzip
hostname
ip
kbd_mode
kill
ld_static
ln
loadkeys
login
ls
lsmod
lspci
mkdir
mknod
mktemp
more
mount
mountpoint
mt
mt-gnu
mv
nano
nc
netcat
netstat
ntfs-3g
pidof
ping
ping6
ps
pwd
rbash
readlink
rm
rmdir
rnano
run-parts
sed
setpci
setserial
setupcon
sh
sleep
stty
su
sync
tailf
tar
tempfile
touch
true
ulockmgr_server
umount
uname
uncompress
vdir
which
zcat
zcmp
zdiff
zegrep
zfgrep
zforce
zgrep
zless
zmore
znew
sh.distrib
ntfs-3g.probe
nc.traditional



/boot
Como el nombre lo indica, acá se encuentran los archivos necesarios durante el booteo, como los relacionados con GRUB o LILO, y uno (o más) archivos llamados "vmlinuz-xxxxxxx" que son los kernels Linux propiamente dichos (puede haber varias versiones). Hay que saber bien qué se está haciendo si uno mete mano ahí...

/cdrom
En realidad no es una carpeta sino un vínculo. En mi caso apunta a /media/cdrom que sería donde se monta la unidad de CD/DVD. Puede tranquilamente no existir en otras distribuciones o versiones.

/dev
Contiene los archivos de dispositivo necesarios para la comunicación con el hardware. Según dicen, en Linux todos los dispositivos de hardware son un archivo, por ejemplo una grabadora de DVD puede ser el archivo /dev/dvdrw, el mouse puede ser /dev/input/mice, digamos que si un programa te pide que le indiques cuál es tu grabadora de DVD, tendrías que apuntarlo a /dev/dvdrw, por ejemplo.

/etc
Contiene archivos de configuración de programas a nivel global (todo el sistema independientemente del usuario). Estos son archivos de texto plano, y pueden ser editados en cualquier programa que lea los tipicos *.txt
Muchos programas suelen tener subcarpetas dentro de /etc para sus configuraciones. Caso típico el sistema gráfico X, con sus configuraciones guardadas en /etc/X11 (el fatídico xorg.conf está en esta carpeta. Si les gusta juguetear con resoluciones, drivers y configuraciones, seguramente hayan tenido que trabajar con este archivito, que él sólo puede hacer que tu lindo sistema gráfico de ventanitas animadas se convierta en una fría consola de texto puro y duro..)

/home
El hogar de las carpetas personales de los usuarios. Supongamos que el sistema tiene dos usuarios: "billgates" y "linustorvalds"; la carpeta personal del primero sería /home/billgates mientras que la del segundo sería /home/linustorvalds
Dentro de cada carpeta personal, cada usuario tiene permisos de almacenar y modificar a su gusto.
Allí dentro se guardan las configuraciones de programas propias de cada usuario, normalmente en subcarpetas ocultas, una por cada programa. Por ejemplo, la configuración personal de OpenOffice.org de billgates estará almacenada en archivos de configuración dentro de /home/billgates/.openoffice.org2 y la configuración del Firefox estaría en /home/billgates/.mozilla
Idealmente, en las carpetas home de cada usuario estarían almacenados sus archivos y documentos personales también.

/initrd
Esta carpeta contiene archivos que permiten el montado de un disco RAM por el bootloader al inicio del sistema, como una de las etapas del booteo.

/lib
Contiene los módulos del kernel y las librerías compartidas (*.so) necesarias para el funcionamiento básico del sistema en modo root, y de las aplicaciones almacenadas en /bin. Serían los drivers y librerías necesarias para el funcionamiento del más básico de los sistemas, y no incluye a las librerías compartidas de uso, por ejemplo, en el entorno gráfico que se encuentran en otra ubicación.

/lost+found
Cuando un crash o un corte de energía provoca la pérdida o corrupción de datos, al iniciar nuevamente el sistema se realiza un checkeo con fsck en el cual repasa el sistema de archivos bucando cualquier anormalidad. Los datos o archivos corruptos, mal formados o con algún problema son movidos a esta carpeta, donde probablemente no sirvan para nada, pero en situaciones muy especiales quizás puedan ser usados para la recuperación de algun dato.

/media

En esta carpeta se montan los diversos medios extraíbles (CD, DVD, ZIP, pendrives, cámaras, etc) y también particiones adicionales (particiones únicamente para datos, particiones de windows, etc).
Por ejemplo, un DVD puede estar montado en /media/cdrom0 o /media/cdrom1 (si hay dos unidades ópticas por ejemplo). Un pendrive en /media/disk, una particion de windows en /media/ntfs, etcétera.

/mnt
Es un directorio pensado para montar temporalmente unidades, particiones o sistemas de archivos. Es el equivalente de /media pero pensado para cuestiones esporádicas y es más usado por administradores que deseen montar manualmente un dispositivo solo para realizar alguna tarea.

/opt

Carpeta pensada para almacenar programas o paquetes que no sean parte de la distribución o el sistema. Pensada análogamente a "Archivos de Programa" en windows, la idea era que cada paquete o programa crease una subcarpeta dentro de /opt donde instalase sus archivos.
Actualmente cayó casi en desuso, y si uno se fija en su carpeta /opt es probable que esté vacía o sólo aloje dos o tres programas, pese a tener instalados muchos mas.

/proc
Es algo bastante especial... en /proc hay montado un sistema de archivos virtual. No contiene archivos "reales", sino información de tiempo de ejecución (memoria del sistema, dispositivos de hardware, dispositivos montados, etc). Es como una fuente de información sobre el estado actual del sistema. Incluso algunos comandos como lspci es lo mismo que hacer "cat /proc/pci" o sea, mostrar el contenido del "archivo" pci ubicado en /proc.

/root
Esta carpeta es la carpeta personal del usuario root. No está ubicada en /home como las de los usuarios comunes porque suele suceder que /home esté en otra partición o disco que el sistema de archivos principal, y puede que no esté accesible siempre. Y como la carpeta personal de root debe estar siempre disponible, se ubica aquí.

/sbin
Es análoga a /bin, sólo que aquí estan discriminados y ubicados los comandos que deben ser ejecutados por root, y que son esenciales para el mantenimiento y recuperación del sistema, como lilo, init, fdisk, ifconfig, etc.

/srv
Pensada para cierto tipo especial de información de ciertos servicios del sistema.

/tmp
Como su nombre lo indica, es una carpeta de archivos temporales. Suele ser vaciada en los booteos del sistema, pero a pesar de ello no es seguro borrar los archivos mientras el sistema está corriendo, ya que programas o servicios en ejecución pueden necesitarlos en esa sesión, aunque se asuma que no estarán disponibles en el siguiente booteo.

/usr
Es normalmente la carpeta más pesada del sistema, y una de las más importantes. Contiene los ejecutables, binarios, documentación, librerías, etc, de los usuarios. El sistema gráfico X se encuentra aquí también. Se organiza en subdirectorios, algunos de los más importantes son:
  • /usr/bin donde se alojan los ejecutables binarios de los programas. Por ejemplo, correr el XMMS desde el menú de aplicaciones o un acceso directo es lo mismo que ejecutar /usr/bin/xmms. A estos ejecutables se debe apuntar cuando se nos pida dónde se encuentra tal o cual programa.
  • /usr/lib contiene librerías compartidas para el uso de diferentes programas. Los codecs son un ejemplo de éstas.
  • /usr/local es un lugar donde actualmente se suelen colocar algunos programas instalados manualmente
  • /usr/share es donde se ubican archivos o recursos "compartidos" como pueden ser iconos, fuentes, documentos, etc. Por ejemplo en /usr/share/man se ubican los manuales o paginas "man" de los comandos.
  • /usr/src es donde se aloja el código fuente. En /usr/src/linux se aloja el del kernel.
/var
Contiene datos variables, como logs del sistema, o archivos temporales que deban ser accesados, modificados o retenidos por un tiempo luego de reiniciar el sistema. Subdirectorios importantes:
  • /var/log aloja logs de diferentes servicios del sistema
  • /var/cache es, justamente, un caché para la operación de algunos programas. Aquí se alojan, por ejemplo en los sistemas Debian, los paquetes descargados por APT.
  • /var/lib contiene librerías creadas dinámicamente por los sistemas de manejo de paquetes
  • /var/local para los datos de programas instalados en /usr/local
Ojalá que sirva!

Fuentes (en inglés):
http://doc.vic.computerbank.org.au/tutorials/linuxdirectorystructure/
http://www.cyberciti.biz/tips/description-of-linux-file-system-directories.html
http://tldp.org/HOWTO/HighQuality-Apps-HOWTO/fhs.html
http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/index.html (MUY COMPLETA)

2 comments
[486] dijo...

Muy buena descripción, y útil. Sobre todo cuando nos quedamos en la consola sin saber el comando salvador, y rebuscamos el contenido de /bin, /sbin, /usr/bin/X11 y demases buscando el modo que tiene esa distro en particular de configurar las x.
Una curiosidad: el directorio /media es distro-dependiente: muchas no lo usan, y se conforman con /mnt.
Saludos!

miércoles, agosto 20, 2008 10:53:00 a. m.  
CoskiBukowski dijo...

Es cierto lo de /media, pero fijate que es un directorio estandarizado por el grupo FSSTND (FileSystemSTaNDard, o sea, quienes realizan la documentación sobre el FS para estandarizarlo entre las distros). Igualmente al listar los directorios aclaré que lo hacía en base a Kubuntu ;)

saludos! y gracias :)

miércoles, agosto 20, 2008 11:05:00 a. m.  

Publicar un comentario

Publicar un comentario

Por favor, usen la opción "Nombre/URL" y firmen los comentarios, así no quedan todos como "Anónimo".

Nota: solo los miembros de este blog pueden publicar comentarios.

Design by Carl.