Curso Básico de UNIX
Sistema de Archivos
Archivos
Directorios
Nombres de Archivo
Directorio Propio. Directorio Actual
Nombres de Directorio
Cambios de directorio
Estructura Interna de los Archivos
Propiedades de los archivos
Tipo y Permisos de achivos
El sistema de archivos en UNIX
Preguntas y Ejercicios
Bibliografía
El sistema UNIX funciona totalmente en base a archivos. Los programas,
los datos, los directorios y aún los controladores de dispositivos
tales como discos, modems e impresoras, son archivos.
El sistema de archivos de UNIX se organiza en una jerarquía de
directorios que resulta en una estructura arborescente.
Archivos.
Cada archivo tiene asociado un nombre, un contenido, un lugar de ubicación
e información de tipo administrativo, tal como dueño y tamaño.
El contenido de un archivo puede ser texto, programas fuente, programas
ejecutables, imágenes, sonidos y otros.
Estructuralmente un archivo es una secuencia de bytes de datos que reside
en forma semipermanente en algún medio estable, como ser una cinta
magnética o un disco.
Directorios.
Los archivos se agrupan en directorios. Un directorio es un archivo que
contiene una lista de nombres de archivo e información acerca de
los mismos. Dentro del sistema de archivos, un directorio es una localización
capaz de contener otros directorios o archivos. Dos archivos que se encuentren
en distinto directorio pueden tener el mismo nombre sin confundirse.
El comando ls permite listar el contenido de un directorio:
ls /var
el argumento es un directorio; la salida son los nombres de archivos y
subdirectorios en ese directorio.
ls nota
el argumento es un archivo, la salida es el nombre del archivo.
ls -l /var
muestra los archivos y subdirectorios contenidos en /var en formato
largo.
ls -ld /var
muestra características del directorio /var en lugar de
los archivos y subdirectorios contenidos en él.
Nombres de archivos.
Para el nombre de archivo se puede usar prácticamente cualquier
caracter, incluso caracteres no visibles. Los caracteres $ ; \ &
! * | causan confusión y no conviene usarlos. Se aconseja usar
solamente letras, números, punto, guión y subraya. UNIX diferencia
mayúsculas y minúsculas: el archivo NOTA.TXT es
distinto del archivo nota.txt y también de Nota.txt.
No se distingue entre nombre de archivo y extensión: nota.nueva.txt
es un nombre de archivo válido, y LCK..modem también.
Un archivo que comienza por un punto no es visible:
touch .noseve
ls
ls -a
ls no lo muestra, pero
sí ls -a.
rm .noseve
lo borra como a cualquier archivo.
Directorio propio. Directorio actual.
Al ingresar al sistema cada usuario entra en su directorio propio, un directorio
privado que no es tocado por el sistema ni por los otros usuarios. El directorio
en el cual se encuentra posicionado el usuario en un momento dado se denomina
su directorio actual.
cd /usr/bin
pwd
cambia al directorio /usr/bin; el directorio actual es /usr/bin.
cd
pwd
devuelve al usuario a su directorio propio, que es ahora el directorio
actual.
echo $HOME
nuestra el nombre del directorio propio. HOME es una variable de ambiente
que contiene el nombre del directorio propio del usuario.
cd $HOME
tiene el mismo efecto que cd.
Nombres de directorios.
Un directorio puede contener otros directorios así como archivos
ordinarios, lo que genera una jerarquía o árbol de directorios.
El directorio superior o directorio raíz se denomina /.
cd /
pwd
el directorio actual es el directorio raíz.
cd
vuelve al directorio propio del usuario.
El caracter / se usa también para separar los componentes de un
nombre de archivo completo: /export/home/usuario1/nota.
La porción /export/home/usuario es la ruta, nota
es el nombre del archivo. Si se omite la ruta, se asume que el archivo
se encuentra en el directorio actual. Un nombre tal como
textos/libro/capitulo.1 indica que su ruta comienza a partir del
directorio actual. Sería lo mismo escribir ./textos/libro/capitulo.1
ya
que el punto designa el directorio actual. Dos puntos seguidos designan
el directorio de nivel superior al actual. Si el directorio actual es /home/usuario1
ls ../usuario2
muestra el contenido de los archivos en /home/usuario2
El caracter / separa directorios incluídos como parte de un nombre
de archivo o directorio.
ls dir1
es un direccionamiento relativo;
ls /home/esteban/dir1
es un direccionamiento absoluto.
Pueden usarse comodines para referenciar directorios y archivos:
cat /home/esteban/*/*
Cambios en la jerarquía de directorios.
mkdir nuevo.dir
crea un nuevo directorio.
rmdir nuevo.dir
borra un directorio existente; actúa sólo sobre directorios
vacíos.
mkdir dir1
mkdir dir1/dir2
touch dir1/dir2/arch2 dir1/arch1
ls -lR
muestra todos los archivos y directorios creados;
rm -r dir1
borra el directorio y todos los archivos y subdirectorios que pueda contener.
Estructura interna de los archivos.
Un archivo es una secuencia de bytes. Un byte es equivalente a un caracter.
El sistema no impone estructura alguna a los archivos ni asigna significado
a su contenido; el significado de los bytes depende totalmente de los programas
que interpretan el archivo.
En ningún caso hay ningún byte que no haya sido colocado
por el usuario o un programa. No hay caracter de fin de archivo. El núcleo
del sistema UNIX se mantiene al tanto del tamaño de los archivos
sin introducir ningún caracter especial. El caracter nuevalínea
es interpretado por las terminales como nueva línea y retorno de
carro (CR LF, carriage-return y line-feed), necesario para desplegar correctamente
los renglones en la terminal. Al apretar la tecla Enter el núcleo
transmite a la terminal CR LF, pero en un archivo se guarda sólo
LF.
¿Qué hay dentro de un archivo? El núcleo no puede
decirnos nada del tipo de archivo: no lo conoce. Todos los archivos tienen
la misma estructura interna. El comando file hace una conjetura:
lee algunos bytes y busca indicios sobre el tipo de contenido. En los sistemas
UNIX hay sólo una clase de archivo. Lo único que se requiere
para accederlo es su nombre.
Propiedad de los archivos.
Cada usuario es dueño de los archivos creados por él, hasta
que los borre o los ceda a otro usuario. Cada usuario pertenece a un grupo,
y puede compartir archivos con los usuarios de ese grupo. Cada archivo
está asignado a un grupo de usuarios, al cual debe pertenecer su
dueño. El comando ls -l muestra dueño y grupo de
los archivos listados.
Tipo y permisos de archivos.
Cada archivo tienen un conjunto de permisos asociados con él que
determinan qué puede hacerse con el archivo y quién puede
hacerlo.
Los permisos de un archivo se indican con 10 caracteres:
1 caracter para tipo de archivo,
3 caracteres [rwx] para permisos del dueño,
3 caracteres [rwx] para permisos del grupo,
3 caracteres [rwx] para permisos de otros.
Caracter para tipo de archivo:
d directorio
l enlace simbólico
- archivo normal
b archivo controlador de dispositivo orientado a bloques
c archivo control de dispositivo orientado a caracteres
Caracteres de permisos:
r acceso de lectura (read)
w acceso de escritura (write)
x acceso de ejecución (execute)
cuyo significado varía según se trate de archivos o directorios:
| Permiso |
Archivos |
Directorios |
| r |
leer archivos |
ver contenido de directorios |
| w |
grabar en un archivo |
crear y borrar archivos |
| x |
ejecutar como programa |
ingresar a un directorio |
| - |
sin derechos |
sin derechos |
El ingreso a un directorio (permiso x) permite ejecutar un archivo contenido
dentro de él, o trasladarse a ese directorio; para estas operaciones
no es necesario poder ver los nombres de los archivos contenidos (permiso
r).
Un archivo se declara ejecutable dándole permiso de ejecución.
Se ejecuta dando su nombre. Los comandos de UNIX son archivos ejecutables.
Ejemplos de permisos de archivo:
rwxr--r--
rw-rw-r--
rw-------
El sistema de archivos en UNIX.
Un sistema de archivos en UNIX puede contener miles de archivos, cientos
de directorios y cientos de enlaces simbólicos, dependiendo de la
distribución y de lo que se haya instalado. Como referencia, la
distribución Debian/GNU 2.1 viene con cerca de 2500 paquetes para
instalar. Una instalación normal puede insumir un 25% en herramientas
de administración, y un 10 % en herramientas de desarrollo. Borrar,
alterar o cambiar permisos de archivos puede conducir a resultados impredecibles.
-
$ ls -F /
-
es útil para recorrer el sistema de archivos, bajando luego a los
subdirectorios.
Los requerimientos de las redes cambiaron la organización funcional
del sistema de archivos. En un lugar grande, la red se configura con un
conjunto de máquinas heterogéneas, cada una responsable del
mantenimento y uso de cada archivo. Los archivos pueden ser específicos
para cierta máquina, compartidos por varias máquinas del
mismo tipo, o accesibles a casi cualquier tipo de máquina en la
red. Enlaces simbólicos hacia la anterior localización de
los archivos ayudan al acceso. Un directorio puede ser real o un enlace
simbólico a otro; usar /bin/pwd para si se ha llegado al
directorio directamente o a través de un enlace simbólico.
Convenciones en nombres de archivos y directorios.
/bin archivos
ejecutables, comandos de usuario
/boot archivos de arranque
/cdrom punto de montaje para
la uniad de CD-ROM
/dev archivos
especiales de dispositivos
[subdirectorios propios de System V]
./dsk dispositivos
de disco
./fd dispositivos
descriptores de archivo
./kd dispositivos
de teclado y despliegue
./kmem memoria
./null dispositivo para
descarte de salidas
./osm mensajes de
error del núcleo
./pts pseudo ttys;
igual que /dev/pts*
./rdsk dispositivos crudos
de disco
./term terminales; igual
que /dev/tty*
./xt pseudo
ttys; para capas DMD
/dosc punto de
montaje para la partición DOS
/etc configuración
de paquetes, configuración de sistema
./init.d scripts de arranque y detención
de programas
./rc?.d enlaces a scripts, con
K o S (Kill o Start), y número de
secuencia para controlar el arranque
./skel archivos de inicialización
para nuevos usuarios
/export directorios de usuarios
en sistemas grandes
/floppy para montar una unidad
de disquete
/home objetos
relacionados con los usuarios
/lib bibliotecas
de desarrollo y material de apoyo
/lost+found archivos perdidos
/mnt punto
de montaje de dispositivos externos
/proc archivos
de control de procesos
/root directorio
propio para el supervisor (root)
/sbin archivos
ejecutables de administración
/tmp archivos
temporales
/usr ejecutables,
documentación, referencia
./X11R6 sistema X-Windows
./bin más ejecutables
./doc documentos de
paquetes de software
./include encabezados .h de bibliotecas en
C
./info archivos de info,
información de UNIX (GNU)
./lib más bibliotecas
en C
./local ejecutables instalados
por el administrador
./man subdirectorios
de páginas del manual
./sbin más archivos
ejecutables de administración
./share compartidos
./src (source) código
fuente del kernel
/var archivos
de log, auxiliares, archivos que crecen
./backup respaldo de algunos archivos
del sistema
./catman páginas man ya formateadas
./lib información
propia de programas
./lock control de bloqueos
./log archivos de
registro de mensajes (log) del sistema
./spool colas de impresión,
intermedios de correo y otros ./run
información de procesos (PIDs)
Bibliografía.
Comandos:
ls cat cd echo file mkdir pwd rm rmdir touch
Referencias: Kernighan-Pike[1987], Coffin[1989]
Víctor A. González Barbone vagonbar en fing edu uy
Instituto de Ingeniería Eléctrica
- Facultad de Ingeniería -
Montevideo, Uruguay.