Indicadores de Logros
- Conoce la organización de la jerarquía de directorios de Linux.
- Administra sistemas de archivos.
- Administra el sistema de archivos Ext2.
En Unix se emplean archivos o directorios para mantener información en medios de almacenamiento (e.g discos duros, disquettes, CD-ROM) pero también para abstraer dispositivos de hardware y mantener canales de comunicación con programas. En una red pueden emplearse directorios o archivos que estén en otro computador (ver
Servicio NFS∞).
Para leer o escribir en un medio de almacenamiento es necesario montarlo antes en la jerarquía de directorios (see
Disquetes y CDROM∞). Aunque antes de poderlo montar ya debe estar formateado a bajo nivel y debe contar con un sistema de archivos. Formatear un medio de almacenamiento significa prepararlo para que el hardware pueda leerlo y escribirlo, al dotarlo de un sistema de archivos se prepara para que el sistema operativo pueda organizar, leer y escribir datos.
Los directorios y archivos de un sistema Debian tiene una estructura estándar [1], algunos de los directorios son:
Directorio que contiene el kernel e información del arranque del sistema
Directorio que contiene programas disponibles incluso en los modos de ejecución más restringidos.
Directorio que contiene programas disponibles para usuarios finales y datos de dichos programas que no requiren modificación.
Directorio que contiene programas disponibles para todos los usuarios.
Directorio que contiene programas disponibles para el administrador.
Directorio que contiene los diccionarios.
Directorio que contiene documentación.
Directorio que contiene páginas info.
Directorio que contiene páginas man.
Directorio que contiene enlaces o complementos a la documentación disponible en /usr/share/doc.
Directorio que contiene enlaces o complementos a la documentación disponible en /usr/share/info.
Directorio que contiene enlaces o complementos a la documentación disponible en /usr/share/man.
Directorio que contiene librerías de funciones comunes a varios programas.
Directorio que contiene encabezados de algunos componentes del sistema.
Directorio que contiene fuentes de algunos programas.
Directorio que contiene datos y programas de X-Window.
Directorio que contiene datos y programas compilados por el administrador.
Directorio para montar disquettes.
Directorio para montar CD-ROM.
Directorio para montar archivos o dispositivos.
Directorio que contiene canales de comunicación con algunos programas.
Directorio que contiene librerías indispensables y módulos.
Directorio que contiene archivos de configuración.
Directorio que contiene abstracciones a los dispositivos conectados.
Directorio que mantiene información de los usuarios del sistema.
Directorio que mantiene información del administrador del sistema.
Directorio que mantiene archivos temporales, que serán borrados por el sistema operativo durante el arranque.
Directorio que mantiene archivos que deban modificarse frecuentemente.
Directorio virtual creado para intercambiar información con facilidad.
/boot
Mantiene el kernel e información indispensable para el arranque del sistema.
/bin
Mantiene unos pocos programas que estarán disponibles incluso en los modos de ejecución más restringidos (e.g.
bash,
cat,
ls,
login,
ps).
/sbin
Mantiene programas disponibles sólo para el administrador incluso en los modos de ejecución más restringidos (e.g
fsck,
getty,
halt).
/usr
Programas accequibles a usuarios finales y datos de estos programas que no requieren ser modificados (datos de sólo lectura). Algunos de sus subdirectorios son:
bin,
games
Programas disponibles para todos los usuarios.
sbin
Herramientas para el administrador.
dict
Diccionarios --usados por ejemplo por ispell y look.
share
Datos de diversos programas, entre sus subdirectorios están:
doc,
man y
info que contienen documentación;
locale,
i18n que mantiene información sobre internacionalización (locale);
zoneinfo que mantiene información sobre zonas horarias.
doc,
info,
man
Enlaces o complementos a la documentación disponible en
/usr/share/doc,
/usr/share/info y
/usr/share/man.
lib
Librerías de funciones comunes a varios programas (algunas como libc indispensables para todos).
include,
src
Encabezados de algunos componentes del sistema y fuentes de algunos programas.
X11R6
Programas y datos de X-Window.
local
Otros programas y datos compilados por el administrador i.e no provienen de paquetes Debian. En algunos sistemas otros programas se ubican en
/opt.
/floppy, /cdrom, /mnt
Directorios para montar disquettes, CD-ROMs y otros sistemas de archivos o dispositivos.
/proc
Diversos canales de comunicación con algunos programas (por ejemplo con el kernel).
/lib
Librerías indispensables y módulos (especialmente requeridas durante el arranque del sistema).
/etc
Archivos de configuración de diversos programas.
/dev
Abstracciones a los dispositivos conectados (o que podrían conectarse) al computador.
/home
Mantiene información de los usuarios del sistema.
/root
Mantiene información del administrador del sistema.
/tmp
Archivos temporales creados por algunos programas, que serán borrados por el sistema operativo durante el arranque.
/var
En este directorio los programas que lo requieran pueden mantener archivos que deban modificarse frecuentemente. Algunos de sus subdirectorios son:
mail donde se mantienen colas de correo de cada usuario,
log que mantiene bitácoras,
run con archivos que mantienen los números de los procesos iniciados al arrancar el sistema,
spool colas de impresión y de otros programas,
tmp archivos temporales (más persistente que
/tmp).
/proc
Este directorio es "virtual", no está presente en el disco, es creado por el sistema para intercambiar información con más facilidad.
El rigor de esta jerarquía hace que memorizandola sea fácil emplear diversos sistemas Unix, aunque puede no ser la más apropiada en algunas circunstancias. Para simular jerarquías diferentes cada proceso iniciado por el usuario root puede tener un directorio raíz diferente al directorio raíz real del sistema. Para establecerlo se emplea el programa
chroot, que recibe como primer parámetro el nuevo directorio raíz y como segundo parámetro el programa por ejecutar. La ruta del programa se especifica con respecto al nuevo directorio raíz y para que el programa pueda ejecutarse, deben ubicarse las ibrerías que este requiera en la "nueva" jerarquía (por ejemplo en el nuevo directorio
/lib).
Esta jerarquía de directorios en Linux no necesariamente está en un disco, sino sólo en memoria RAM, por eso pueden tenerse directorios como
/proc y pueden montarse diversos sistemas de archivos sobre la misma jerarquía como se presenta en la siguiente sección.
Un sistema de archivos es información almacenada en un dispositivo de almacenamiento organizada siguiendo una convención, la cual permite al sistema operativo manejar la información cuando el usuario lo requiere, es decir, leer, escribir, consultar directorios, etc. Hay diversos tipos (o convenciones) de sistemas de archivos, Linux cuenta con controladores para varios tipos creados específicamente para Linux (e.g ext2, ReiserFS) así como controladores para tipos de sistemas de archivos creados para otros sistemas operativos (e.g affs, hpfs, ntfs, msdos). Los tipos que pueden emplearse con Linux [2] están incluidos en el kernel o son módulos en el subdirectorio
fs del directorio con módulos de su sistema (es decir, el directorio de módulos es de la forma
/lib/modules/2.2.x/fs/ remplazando x por la versión de su kernel).
Los que puede usar dependen de la forma como se haya compilado el kernel y de los módulos que estén cargados. Puede examinar los tipos que soporta su sistema viendo el contenido de
/proc/filesystems y puede emplear otros tipos de sistemas de archivos cargando los módulos apropiados
mientras sean soportados (ver
Lectura Inicialización del sistema∞).
Aunque toda la estructura de directorios presentada en la sección anterior podría estar en un sólo sistema de archivos, es posible distribuirla en varios. Para poder emplear un sistema de archivos primero debe montarse en algún directorio con el comando
mount o debe configurarse el sistema para que lo monte automáticamente durante el arranque (el primer directorio que debe montarse es la raíz
/ ). Para desmontar un sistema de archivos de un directorio se emplea el comando
umount.
Comando utilizado para montar un dispositivo del sistema.
Comando utilizado para desmontar un dispositivo del sistema.
El programa
mount sin argumentos presenta los sistemas de archivos que están montados [3], de cada uno presenta el dispositivo en el que reside, el directorio en el que está montado, el tipo de sistema de archivos y algunos parámetros del montaje, por ejemplo:
/dev/hda1 on / type ext2 (rw,errors=remount-ro,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda2 on /var type ext2 (rw)
/dev/hda3 on /home type ext2 (rw)
En el ejemplo se muestran 5 sistemas de archivos montados en los directorios
/,
/proc,
/dev/pts,
/var y
/home. 3 de ellos son de tipo ext2 y residen en tres particiones de un disco duro (
/dev/hda1,
/dev/hda2 y
/dev/hda3 ver
Dispositivos y Linux∞), los otros dos son virtuales, es decir, no residen en dispositivo de almacenamiento alguno (son creados por el kernel). Las opciones de montaje de todos indican que pueden leerse y escribirse
rw, el sistema montado en la raíz en caso de fallas será montado con permiso de sólo lectura (
errors=remount-ro) y el sistema montado en
/dev/pts tendrá todos sus archivos como pertenencientes al grupo 5 (tty) y permisos de escritura y lectura para el usuario y sólo de escritura para el grupo (modo 620).
Para montar un sistema de archivos se emplea:
mount -t
tipo -o
opciones dispositivo directorio
Donde
dispositivo es el nombre del dispositivo que contiene el sistema de archivos (e.g
/dev/hda1 o
/dev/fl0),
tipo es el tipo del sistema de archivos [4] y
directorio es la ruta donde se quiere acceder la raíz del sistema montado (si el directorio donde se monta contiene datos, estos serán escondidos mientras el nuevo sistema de archivos permanezca montado).
La información sobre un sistema de archivos, su directorio de montaje y opciones pueden especificarse en el archivo
/etc/fstab. De hacerlo puede emplear
Archivo que contiene información sobre los sistemas de archivos y su directorio de montaje.
mount
directorio
para montar el sistema de archivos en el directorio especificado (el resto de información debe estar en
/etc/fstab). Además, por defecto, los sistemas de archivos especificados en ese archivo serán montados automáticamente durante el arranque del sistema. Un ejemplo complementario al ejemplo anterior es:
/dev/hda1 / ext2 defaults,errors=remount-ro 0 1
/dev/hda4 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
/dev/hda2 /var ext2 rw 0 2
/dev/hda3 /home ext2 rw 0 2
Cada línea especifica un sistema de archivos con: dispositivo, directorio donde se debe montar, tipo del sistema de archivos, opciones de montaje separadas por comas, la frecuencia de volcado (típicamente 0) y un númeo para controlar el chequeo durante el arranque con
fsck. Además de los tipos soportados por su sistema puede emplear
swap para especificar particiones que servirán como zona de intercambio [5]. Algunas opciones (comunes a todo sistema de archivos) son:
ro para montar en modo de sólo lectura,
user que indica que un usuario puede montar el sistema de archivos (por defecto sólo el administrador puede hacerlo),
rw para montar en modo lectura y escritura,
ro modo de sólo lectura,
noauto para indicar que el sistema no debe montarse durante el arranque
note que los directorios
/floppy y
cdrom no son montados automáticamente durante el arranque (ver
Disquetes y CDROM∞). El número que controla el chequeo con
fsck indica el orden en el cual hacer chequeos, 0 indica que no se debe chequear el sistema, otros números positivos especifian una prioridad (los menores son más prioritarios y los números con el mismo número de ser posible son chequeados en paralelo). Es conveniente emplear 1 con el sistema de archivos montado en la raíz y 2 para los demás que requieran chequeo.