Archivos, directorios y medios de almacenamiento en GNU/Linux

Anuncio
Universidad de Costa Rica | Escuela de Ingeniería Eléctrica
IE-0117 Programación Bajo Plataformas Abiertas
Archivos, directorios y medios de almacenamiento en
GNU/Linux
1.
Arivos y directorios
Al igual que en la mayoría de los sistemas operativos, la información almacenada en los discos duros y otros medios
de almacenamiento se organiza en archivos y directorios. Si bien los conceptos básicos involucrados son los mismos en
todos los sistemas, existen detalles específicos en GNU/Linux y otros sistemas operativos tipo UNIX que deben conocerse
para poder utilizar el sistema adecuadamente.
1.1. Tipos de arivos
Archivos de texto plano: archivos que contienen texto que puede ser leído y editado por el usuario usando herramientas
básicas como un editor de texto. Los archivos de texto plano son muy utilizados en GNU/Linux. Pueden usarse para
almacenar documentos, configuraciones de los programas, etc. El uso de archivos de texto simples es consistente
con los principios de diseño detrás de los sistema operativos tipo UNIX que buscan la utilización de herramientas y
recursos simples y versátiles para el cumplimiento de las tareas.
Archivos binarios: archivos que contienen datos que no pueden ser leídos directamente por los usuarios, sino que
requieren de algún software específico para visualizarlos y editarlos. Un ejemplo son los archivos de imagen y
sonido. También entran en esta categoría los programas ejecutables que contienen instrucciones en lenguaje de
máquina. La diferencia entre los archivos binarios y de texto se da a nivel del tipo de datos, la forma de codificar
la información y las herramientas necesarias para trabajarlos, pues técnicamente ambos tipos de archivo están
compuestos por secuencias de bytes.
Archivos de dispositivo: en GNU/Linux y otros sistemas operativos tipo UNIX, algunos de los dispositivos de entrada y
salida de la computadora pueden accederse a través de archivos. Por ejemplo, el primer puerto serial puede accederse a través del archivo /dev/ttyS0 y una cámara web o tarjeta capturadora de vídeo a través de /dev/video0.
Enlaces simbólicos: archivos que almacenan la dirección de otro archivo. Permiten referirse al archivo original usando
una ruta distinta.
1.2. Jerarquía de arivos y directorios en GNU/Linux
Los archivos y directorios deben organizarse de forma que el usuario sepa donde encontrar cada cosa. Para facilitar
la compatibilidad entre distintas distribuciones de GNU/Linux se ha creado un estándar llamado Jerarquía del Sistema de
Archivos (FHS: Filesystem Hierarchy Standard) que especifica las ubicaciones para los archivos, de acuerdo con su tipo y
función dentro del sistema.
Todos los archivos se encuentran dentro de la raíz ( / ). A diferencia de Microsoft Windows, donde cada volumen se
accede de forma independiente (C:, D:, etc.), en GNU/Linux los volúmenes se asignan a directorios dentro de la jerarquía.
Los directorios principales dentro de la jerarquía son:
/
: raíz del sistema de archivos.
/bin
: ejecutables esenciales.
1
IE-0117 Programación Bajo Plataformas Abiertas
Sistema de paquetería en Debian y Ubuntu
: kernel y archivos necesario para el arranque de la computadora.
/boot
/dev
: archivos de dispositivo.
/etc
: archivos de configuración para las aplicaciones del sistema (para todos los usuarios).
: directorios personales de los usuarios.
/home
/lib
: bibliotecas esenciales del sistema.
/media
: puntos de montaje para medios removibles.
/mnt
: punto de montaje temporal genérico.
/opt
: directorio donde se instalan aplicaciones que no forman parte de la distribución.
/proc
: sistema de archivos virtual que contiene información de los procesos que se están ejecutando en la computadora.
/root
: directorio personal para el usuario root.
/sbin
: ejecutables esenciales para la administración del sistema.
/srv
: datos asociados a los servicios brindados por la computadora.
/tmp
: archivos temporales.
/usr
: jerarquía secundaria que contiene los datos de las aplicaciones no esenciales instaladas en el sistema.
/usr/bin
: ejecutables de las aplicaciones no esenciales.
/usr/lib
: bibliotecas no esenciales para el funcionamiento del sistema.
/usr/sbin
/var
: ejecutables no esenciales para administración del sistema.
/usr/share
: datos de los programas, documentación, fuentes tipográficas, etc.
/usr/local
: jerarquía terciaria. Para programas instalados por el usuario que no forman parte de la distribución.
: datos utilizados por los programas: bitácoras, bases de datos, caché, colas de impresión, correo electrónico, etc.
1.3. Comandos para trabajar con arivos y directorios en GNU/Linux
Al trabajar en la línea de comandos, el usuario siempre se va a encontrar dentro de un directorio (por defecto el
directorio personal del usuario: /home/usuario). Al utilizar nombres de archivo o directorio como parte de un comando,
estos nombres pueden especificarse de dos maneras:
Rutas absolutas: se escribe la ubicación del archivo, especificando su ruta completa desde la raíz. Por ejemplo: /etc/passwd, /var/log/syslog o /home/adiaz/Documentos/tarea1.odt.
Rutas relativas: se escribe la ubicación del archivo a partir del directorio actual. Por ejemplo, si el usuario se encuentra
dentro del directorio /home/adiaz y escribe la ruta img/foto1.jpg, entonces, la ruta absoluta del archivo sería
/home/adiaz/img/foto1.jpg. Si está dentro del directorio /var/log y escribe kern.log, la ruta absoluta equivalente
sería /var/log/kern.log.
Conociendo esto, puede usarse entonces los siguientes comandos para manipular archivos y directorios:
pwd:
indica el directorio actual.
cd:
cambia el directorio actual.
ls:
lista los archivos de un directorio.
mkdir:
crea un directorio.
2
IE-0117 Programación Bajo Plataformas Abiertas
rmdir:
elimina un directorio vacío.
touch:
crea un archivo vacío.
rm:
elimina un archivo (o directorio).
cp:
copia un archivo (o directorio) de una ubicación a otra.
mv:
mueve o renombra un archivo (o directorio).
Sistema de paquetería en Debian y Ubuntu
1.4. Sistemas de arivo
Un sistema de archivo provee una forma de organizar los datos dentro de un medio de almacenamiento. El sistema de
archivo provee mecanismos para almacenar metainformación como los permisos y la fecha de creación de un archivo,
define los límites máximos para el tamaño de los archivos y las reglas para nombrarlos. Algunos sistemas de archivos
proveen herramientas avanzadas tales como sistemas de bitácora para facilitar la recuperación de información en caso
de error o mecanismos para control de versiones.
Existen varios tipos de sistemas de archivo. Los sistemas de archivo más utilizados en GNU/Linux son ext2, ext3,
ext4, reiserfs, jfs y xfs. Todos, excepto ext2 proveen mecanismos de bitácora (journaling) para facilitar la recuperación
de errores. Algunos sistemas de archivo están optimizados para casos específicos. Por ejemplo, xfs fue diseñado para
manejar de forma eficiente archivos muy grandes (de varios Gigabytes).
Los sistemas GNU/Linux pueden leer y escribir sistemas de archivo de Microsoft Windows, como FAT32 y NTFS, lo que
permite acceder volúmenes usados por este sistema operativo.
Existen también sistemas de archivo especiales. Por ejemplo, nfs y cifs son sistemas de archivo que permiten acceder
datos alojados en otra computadora a través de la red, como si se tratara de archivos locales. tmpfs y ramfs permiten
crear sistemas de archivo virtules no persistentes (se borran al apagar la computadora) que almacenan sus datos en la
memoria RAM como si fueran archivos convencionales.
1.5. Inodos
Los sistemas de archivo de UNIX utilizan una estructura llamada inodo para almacenar la información de cada archivo
o directorio. El inodo es una estructura de datos que contiene, entre otras cosas, los siguientes datos:
Tamaño del archivo
Fecha de creación
Fecha de modificación
Contador de enlaces
Usuario y grupo
Modo (permisos)
Puntero a los datos
Los inodos se almacenan en un sector reservado del volumen, de forma que sea fácil acceder a la información de un
archivo o directorio aleatorio en cualquier momento, sin tener que abrir el archivo completo. Cuando se quiere acceder
los datos de un archivo, debe leerse el puntero a los datos, que almacena la dirección dentro del volumen donde están
almacenados.
1.6. Enlaces duros y simbólicos
Un inodo almacena toda la información de un archivo, excepto su nombre y ubicación dentro de la jerarquía. Los datos
del archivo son independientes de su nombre y ubicación, lo que permite optimizar algunas operaciones del sistema de
archivo.
El nombre de un archivo, o enlace duro se almacena dentro de cada directorio. El enlace duro consta de un par
(nombre, número de inodo), permitiendo entonces usar un nombre para referirse a un inodo específico. Es posible crear
3
IE-0117 Programación Bajo Plataformas Abiertas
Sistema de paquetería en Debian y Ubuntu
varios enlaces duro al mismo archivo, en distintas ubicaciones, lo que permite referirse a los mismos datos mediante
distintos nombres o aliases. Cada vez que se crea o se elimina un enlace duro, el contador de enlaces del inodo se
incrementa o decrementa respectivamente. Cuando se elimina el último enlace duro a un inodo, este es marcado para
ser borrado, junto con los datos a los que apunta.
Puede verse cual es el inodo asociado a un nombre de archivo (enlace duro) agregando la opción -i al comando ls.
Existe otro tipo de enlaces, llamados enlaces simbólicos o enlaces suaves. A diferencia de los enlaces duros, los enlaces
simbólicos son un archivo independiente (con su propio inodo) y no una sólo una referencia. Los enlaces simbólicos
apuntan a otro archivo del sistema, permitiendo referirse a él usando un nombre y ruta alternativos. Si se borra el archivo
original el enlace simbólico sigue existiendo, pero cualquier intento de utilizarlo producirá un error pues será imposible
encontrar el archivo al cual apunta el enlace.
El comando ln permite crear enlaces, tanto duros como simbólicos (usando la opción -s).
2.
Medios de almacenamiento
Un medio de almacenamiento es un dispositivo físico que permite guardar información. GNU/Linux soporta una gran
cantidad de medios de almacenamiento, tales como los discos duros, disquetes, memorias de estado sólido (llaves USB,
tarjetas SD, etc), medios ópticos (discos compactos y DVD) y el almacenamiento por red.
2.1. Particiones y volúmenes
Los discos duros y las memorias de estado sólido deben particionarse para poder utilizarse. Al particionar un disco,
este se divide en varias secciones o particiones, que pueden usarse de forma independiente. Siempre debe crearse al
menos una partición, aunque se vaya a utilizar el disco en su totalidad.
Existen tres tipos de particiones:
Partición primaria
Partición extendida
Partición lógica
Originalmente un disco podía contener un máximo de cuatro particiones (primarias). Para contrarrestar esta limitación
se crearon las particiones extendidas y las particiones lógicas. Las particiones extendidas son equivalentes a las primarias,
pero su función es servir de contenedor para una o más particiones lógicas. Esto permite crear tantas particiones como
sea necesario.
Es común usar el término volumen para referirse a un área de almacenamiento que tiene un sistema de archivo único
y que puede accederse directamente una vez montada. Generalmente toda partición es un volumen, pero ambos términos
no son equivalentes, pues no todos los volúmenes son particiones. Los dispositivos ópticos (CD, DVD) y los disquetes son
volúmenes pero no están particionados. También pueden tenerse volúmenes que se acceden a través de la red o que
están distribuidos en varios discos duros o particiones.
En un sistema GNU/Linux es posible hacer referencia a un volumen usando un archivo de dispositivo. Algunos ejemplos
son:
/dev/sda1
: Primer disco duro (a), primera partición primaria (1).
/dev/sdc5
: Tercer disco duro (c), primera partición lógica (5).
/dev/scd0
: Primera unidad óptica (CD, DVD).
/dev/fd0
: Primera unidad de disquete.
/dev/md0
: Primer volumen RAID.
/dev/mapper/vg0-root
: Volumen lógico LVM
4
IE-0117 Programación Bajo Plataformas Abiertas
Sistema de paquetería en Debian y Ubuntu
2.2. Montaje de volúmenes
Para montar un volumen en GNU/Linux debe usarse el comando mount:
# mount [-t TIPO] VOLUMEN PUNTO_MONTAJE
Ejemplos:
Monta /dev/sda1 en /mnt:
# mount /dev/sda1 /mnt
Monta un CDROM (/dev/scd0) en /media/cdrom:
# mount /dev/scd0 /media/cdrom
Monta el volumen /dev/sdb1 en /media/usb:
# mount /dev/sdb1 /media/usb
Para que un volumen sea montado al arrancar el sistema, es necesario incluirlo en el archivo de configuración
que especifica los sistemas de archivo que usa el sistema regularmente. El formato de las entradas en
es el siguiente:
/etc/fstab
/etc/fstab
volumen
volumen:
pto_montaje
pass:
dump
pass
ubicación en la jerarquía de archivos y directorios donde se montará el volumen. Ej. /media/windows.
tipo de sistema de archivo. Ej. vfat, ext4.
opciones:
dump:
opciones
volumen que se quiere montar. Ej. /dev/sda5.
pto montaje:
tipo:
tipo
opciones de montaje. Generalmente con las opciones predeterminadas (defaults) es suficiente.
no tiene relevancia en sistemas modernos. Debe usarse un 0.
orden en que los volúmenes serán revisados al arranque. El volumen de la raíz debe tener un pass de 1, y los
otros un número mayor. Si se usa 0, el volumen no será revisado.
Ejemplos:
Monta automáticamente /dev/sdb1 en /home:
/dev/sdb1
/home
ext4
defaults
0
2
Monta automáticamente /dev/sda5 en /media/windows:
/dev/sda5
/media/windows
vfat
defaults
0
2
Los volúmenes pueden especificarse también usando la etiqueta (definida por el usuario) o el UUID (identificador
numérico único). Esto permite montar un volumen incluso si se cambia el orden de los discos duros o las particiones.
Ejemplo:
5
IE-0117 Programación Bajo Plataformas Abiertas
Sistema de paquetería en Debian y Ubuntu
LABEL=winXP /media/windows vfat defaults 0 2
UUID=2f072cfc-8728-45d5-a7a6-59f441d5057c /home ext4
defaults
0
2
2.3. Creación de sistemas de arivo dentro de un volumen
Un sistema de archivos puede crearse usando alguna variante del comando mkfs. Por ejemplo, para crear un sistema
de archivo ext3 en el volumen /dev/sda5 debe usarse el siguiente comando:
# mkfs.ext3 /dev/sda5
Para crear un sistema de archivo FAT32 en el volumen /dev/sdb1, el comando sería:
# mkfs.vfat /dev/sdb1
2.4. Particiones swap
Para utilizar una partición como área de intercambio (swap), primero debe formatearse usando el comando mkswap.
Por ejemplo, para usar la partición /dev/sda2 como swap debe usarse el comando:
# mkswap
/dev/sda2
Luego la partición debe activarse usando el comando swapon:
# swapon /dev/sda2
Esta configuración no es persistente. Si se desea que la partición se active cada vez que el sistema inicia, debe indicarse
en el archivo /etc/fstab:
/dev/sda2
none
swap
sw
0
0
2.5. Mantenimiento y atención de fallas
Es posible tener fallas lógicas, a nivel del sistema de archivos, o bien físicas, en el medio de almacenamiento. Existen
herramientas para ambos casos.
Las fallas lógicas pueden diagnosticarse y repararse usando alguna variante de la herramienta fsck:
# fsck.ext4 /dev/sda1
# fsck.vfat /dev/sdb1
Las fallas físicas en discos duros y memorias de estado sólido pueden diagnosticarse usando la herramienta badblocks,
que busca sectores dañados. Un medio dañado físicamente no puede repararse.
6
IE-0117 Programación Bajo Plataformas Abiertas
3.
Sistema de paquetería en Debian y Ubuntu
Lectura recomendada
1. Computer File. Wikipedia. http://en.wikipedia.org/wiki/Computer_file.
2. File system. Wikipedia. http://en.wikipedia.org/wiki/File_system.
3. Filesystem Hierarchy Standard. Wikipedia. http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard.
4. Filesystem Hierarchy Standard. http://www.pathname.com/fhs/.
5. Volume (computing). Wikipedia. http://en.wikipedia.org/wiki/Volume_(computing).
6. Páginas de manual de los comandos mencionados.
7
Descargar