Sistema de archivos en Unix

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
muestra 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 borras archivos
x
ejecutar como programa
imgresar 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 nombre de archivos y directorios:

/bin archivos ejecutables, comandos de usuario
/boot
archivos de arranque
/cdrom
punto de montaje para la unidad de CDROM
/dev
archivos especiales de dispositivos
./dsk
dispositivos de disco
./fd
dispositivos descriptores de archivo
./kd
dispositivos de teclado y despliegue
./kmem
memoria
./null
dispositivo para descargarte 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 superusuario (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 de 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
información propia de programas
./lock
control de bloqueos
./log
archivos de registro de mansajes (log) del sistema
./spool
colas de impresión, intermedios de correo y otros
./run
información de procesos



.
No tenemos copyright, ni declaracion de privacidad, ni lo veras mejor con ningun otro navegador.


Last modified: Monday, 1 July 2013, 09:14 AM
Skip Navigation

Navigation