| El sistema de archivos de UNIX |
Un sistema de archivos se debe entender como aquella parte del sistema responsable de la administración de los datos en dispositivos de almacenamiento secundario. Por lo tanto, es el sistema de archivos el que debe proporcionar los medios necesarios para un acceso y almacenamiento seguro y privado de la información.
![]()
Figura 2.1
Todos los archivos y directorios dependen de un único directorio denominado directorio raíz o root, el cual se representa por el símbolo /. En el caso de que en el sistema tengamos varios dispositivos físicos de almacenamiento secundario (normalmente discos), todos deben depender del directorio raíz, y el usuario tratará cada uno de los discos como un subdirectorio que depende del directorio raíz (root).
Se trata de un directorio que el administrador del sistema crea o asigna cuando da de alta a un usuario. El propósito de este directorio es suministrar un punto en la jerarquía de directorios del sistema de archivos UNIX a partir del cual el usuario puede almacenar y estructurar sus propios archivos y directorios. Este directorio suele ser tomado como directorio de trabajo inicial cuando el usuario establece una sesión de trabajo. Se representa mediante el símbolo ~.
El directorio de trabajo o act el directorio en el que nos encontramos operando en cada momento de la sesión. Se representa mediante un punto .Asociado al concepto de directorio de trabajo esta el concepto de directorio padre, que se representa mediante .. y que sirve para denotar al directorio del que depende el directorio de trabajo. La manera de conocer en todo momento el directorio de trabajo es a través de la orden pwd (print working directory). Su sintaxis es:
pwd
Ejemplo:Apis:~$ pwdEn este ejemplo, el directorio "." y ".." serían respectivamente /users/so/so00, y /users/so.
/users/so/so00
Los archivos se identifican en la estructura de directorios por lo que se conoce como nombre de camino, trayectoria o path name. Fijándonos en la figura 2.1. distinguiremos las tres formas existentes para refenciar un archivo:Camino absoluto o completo. Consistente en el conjunto de nodos por los que hemos de pasar, partiendo del directorio raíz, para llegar al archivo o directorio que queremos referenciar. Va precedido siempre por el caracter /. Identifica de modo único a un directorio o archivo dentro del sistema de archivos.Camino relativo. Tenemos dos formas de acceder a un archivo usando una trayectoria relativa, según tomemos en consideración el directorio de trabajo o el directorio de conexión:Ejemplo: /usr/bin/troff1. Respecto del directorio de trabajo:
Suponiendo que nuestro directorio de trabajo es /usr, el camino para llegar al archivo /usr/bin/troff sería bin/troff.NOTA: Para el camino relativo se pueden utilizar las cadenas "." y "..", permitiéndose entonces ascender en el árbol de directorios para referenciar archivos de modo relativo.
Por ejemplo, si el directorio de trabajo es el /usr/bin/troff y queremos referenciar el archivo /usr/local/bin , usando una trayectoria relativa, escribiríamos ../../local/bin.2. Respecto del directorio de conexión.Suponiendo que nuestro directorio de conexión actual es /users/ssp, la referencia al archivo o directorio anterior seria ~/../../usr/bin/troff
El nombre de un archivo en UNIX puede tener hasta 255 caracteres y aunque no existe el concepto de extensión de un archivo es posible incluir el carácter . tantas veces como se desee, la única consideración a tener en cuenta en este sentido, es la referente a los nombres de archivo cuyo primer carácter es . a los que históricamente se denominan archivos ocultos, ya que por defecto no son mostrados por la orden ls. Una denominación más precisa para estos archivos sería la de archivos sin interés habitual, ya que se suelen utilizar para configurar aplicaciones y normalmente el usuario no tiene interés en verlos.Es importante tener en cuenta que los intérpretes de órdenes de UNIX (denominados shell) consideran distintos los caracteres en mayúsculas de los caracteres en minúscula. Por lo tanto no son equivalentes los archivos: programa.c y Programa.c.
Ejemplos de nombres de archivos:
programa, programa.c, programa.c.primera_version, base_datos.1992
* Representa cualquier conjunto de símbolos. Por ejemplo, sabiendo que la orden lp permite imprimir archivos:Apis:~$ lp * # imprime todos los archivos del directorio de trabajo? Representa cualquier carácter.
Apis:~$ lp ab* # imprime los archivos que empiecen por abApis:~$ lp a?b # imprime los archivos cuyos nombres tengan tres caracteres, el primero sea una a y el último una b[...] Representan un símbolo del conjunto.Apis:~$ lp ab[123] # imprime (si existen) los archivos ab1, ab2 y ab3
[!...] Representa un símbolo NO contenido en el conjunto.Apis:~$ lp [!ab]* # imprime todos los archivos cuyo nombre NO comienza por ni por a ni por bAparte de los caracteres comodín, existen otros caracteres cuyo significado es especial para la shell. Entre estos destacamos:< , > , | , &
cuyo significado se explicará en prácticas posteriores.
De modo general para todos los caracteres especiales y comodín, se habilitan distintas maneras para forzar a que la shell los interprete literalmente como los caracteres que son. Los modos de escapar los caracteres especiales y comodín son los siguientes:Utilizando el carácter \ se pueden escapar caracteres individualmente. Cuando se quiere escapar cadenas completas se recurre a encerrarlos entre comillas '.
Apis:~$ lp `test?&' #imprime el archivo con nombre test?&
Apis:~$ lp \*a #imprime el archivo de nombre *a
- Acceso para lectura "r". Se permite acceder para consultar el contenido del archivo sin modificarlo.
- Acceso para escritura "w". Se permite modificar el contenido del archivo.
En los sistemas multiusuario se hace necesario controlar el acceso a la información asegurando su privacidad. Como ya se ha visto anteriormente, cada usuario del sistema tiene un número identificador (UID) único dentro del sistema y también pertenece a un grupo de usuarios identificado unívocamente dentro del sistema por un número (GID). A estos números se les asocia unos nombres lógicos que se denominan login en el caso del UID y nombre de grupo en el caso del GID. Por lo tanto, una manera de identificar la información perteneciente a un usuario (el caso que nos ocupa son sus archivos), es que cada archivo lleve asociado el identificador de usuario propietario de la información y la del grupo a que este usuario pertenece.
- Acceso para ejecución "x". El archivo puede ser ejecutado (por ejemplo un programa compilado).
De la combinación de los tres modos de acceso explicados anteriormente rwx y los atributos propietario de un archivo y grupo al que pertenece dicho propietario, surgen los denominados niveles de acceso a la información. Estos son tres:
Si no indicamos path_name, se presentará el contenido del directorio de trabajo actual. Ejemplo:ls [parámetros] [path_name]
Apis:~$ cd /binSegún los parámetros utilizados en la orden (campo parámetros en la sintáxis), obtendremos distintos tipos de información acerca de los archivos. Especialmente relevantes son los siguientes:
Apis:~$ ls c*
c89 cd chown colcrt cp csplit
cal cdoc chsh colrm cpio ct
calendar cdsuf cksum comm cpp ctod
capsar chfn clear command crashdc cu
cat chgrp cmp compress crontab cut
cc chmod col cord csh
-a permite visualizar los archivos ocultos (aquellos que empiezan por .).-F introduce el carácter / tras los nombres de los subdirectorios listados y un * tras los archivos ejecutables.
-l lista los archivos en formato largo, incluyendo información adicional completa acerca de cada uno de ellos.El listado con la opción -l del archivo TCPsock.c sería:Apis:~$ cd
Apis:~$ pwd
/users/so/infsis/so00
Apis:~$ ls -a
.
..
.profile
Mwm
docprac
test
Apis:~$ ls -F
Mwm
docprac/
test*
Apis:~$ ls -l
total 40
-rw-r----- 1 so00 users 4639 Sep 3 14:05 Mwm
drwxr-xr-x 2 so00 users 512 Sep 5 1994 docprac
-rwxr-xr-x 2 so00 users 24512 Sep 3 14:05 test

Los campos que aparecen al realizar el listado con la opción -l son los siguientes (de izquierda a derecha):Figura 2.2
- Permisos: Como se explicó anteriormente, el usuario puede establecer a voluntad que otros usuarios tengan permiso de lectura (r) escritura (w) y de ejecución (x) de cada archivo y directorio (modos de acceso a la información). Para ello, cada archivo lleva asociada una cadena de 10 caracteres de la siguiente forma:
![]()
Figura 2.3
donde el carácter - en el campo del tipo de archivo indica que es un archivo ordinario, y en cualquiera de los otros campos supone que el permiso (rwx) NO está habilitado.
- Número de enlaces (links): un enlace es un mecanismo que permite hacer referencia a un archivo a través de diferentes nombres. Con ello se logra un aprovechamiento del espacio en disco.
- Nombre del propietario (usuario): Es el código que identifica al usuario propietario del archivo o directorio en el sistema. Coincide con el login de la cuenta.
- Nombre del grupo. Indica el nombre del grupo al ctá adscrito el propietario del archivo.
- Tamaño del archivo: Indica el número de bytes que contiene el archivo. En el caso de los archivos especiales, aquí aparecerán dos valores que se denominan major number y minor number.
- Fecha y hora de la última modificación.
- Nombre del archivo.
Ejemplo: En el siguiente ejemplo se muestra que hay dos enlaces
simbólicos creados en nuestro directorio home. El directorio /home1
está
físicamente sobre otra máquina. Sin embargo, de cara al usuario,
el directorio doc
es como si estuviera
en el sistema de ficheros local y, además, cuelga de nuestro home.
gogh: > pwd
/usr/users/v (nuestro home directory)
gogh: > ls -l
total 3
drwxr-xr-x 2 vi wheel 1024 Feb 14 01:50 bin/
-rw-rw-r-- 1 vi wheel 325 Apr 2 18:49 carta
lrwxrwxrwx 1 vi wheel 21 Feb 14 01:48 doc -> /home1/paralelo/v/doc/
lrwxrwxrwx 1 vi wheel 19 Feb 14 01:52 f.txt -> /users/so/pepeillo/k/f.txt
-rw-rw-r-- 1 vi wheel 227 Mar 15 20:21 un_fichero_ASCII
gogh: >
La orden para realizar un enlace
emplea la siguiente sintaxis:
La orden chmod (change mode) permite cambiar los permisos de un archivo. La utilización de esta función está restringida exclusivamente al propietario del archivo cuyos permisos (modo) se desean alterar o al administrador del sistema. La sintaxis es la siguiente:
donde modo supone el modo de acceso al archivo que se desea asignar. Hay dos formas diferentes de utilizar la orden:chmod modo archivo1 [archivo2 ... ]
Por otro lado, la orden umask permite fijar los permisos que tendrá por defecto cualquier archivo que cree un determinado usuario. Su estructura es:
- Apis:~$ pwd
/users/so/infges/so00
Apis:~$ ls -l prog.c
-rw-r----- 1 so00 users 1024 Sep 3 14:58 prog.c
Apis:~$ chmod 754 prog.c
Apis:~$ ls -l
-rwxr-xr-- 1 so00 users 1024 Sep 3 14:58 prog.cModo relativo. En este caso la referencia a los permisos asignados al archivo se realiza de acuerdo con la siguiente sintaxis: El primer campo indica a quién se le modifica el permiso: u(usuario), g (grupo), o (otros) y a (todos).
chmod quién qué dequémodoEl segundo campo indica si se activa (+), se desactiva (-) o se fija (=) un permiso. Cuando se utiliza = los permisos que no aparecen se eliminan.
El tercer campo indica sobre que modos de acceso se actúa (r, w, x). Ejemplo:
Apis:~$ chmod a-x prog.c
Apis:~$ ls -l prog.c
-rw-r--r-- 1 so00 users 1024 Sep 3 14:58 prog.c
Apis:~$ chmod go+w prog.c
Apis:~$ ls -l prog.c
-rw-rw-rw- 1 so00 users 1024 Sep 3 14:58 prog.c
Apis:~$ chmod gu-rw prog.c
Apis:~$ ls -l prog.c
-------rw- 1 so00 users 1024 Sep 3 14:58 prog.c
Apis:~$ chmod u=r prog.c
Apis:~$ ls -l prog.c
-r-------- 1 so00 users 1024 Sep 3 14:58 prog.c
umask [###]- Llamado sin parámetros, el resultado son tres dígitos octales que indican de izquierda a derecha el valor de la máscara que determina los permisos iniciales para el propietario, el grupo y para el resto de usuarios. Cada dígito octal de la máscara contiene tres dígitos binarios, un 1 binario indica que cuando se cree un nuevo archivo, el permiso asociado (rwx) será borrado y un 0 binario indica que se utiliza el permiso implícito.
Si no se desea que por defecto los archivos y directorios se creen con estos valores, se puede cambiar el valor de la máscara de usuario pasando como argumento a la orden umask un número de tres dígitos en octal. Este número es el resultado de fijar a 1 aquellos permisos que se desean limpiar y dejar a 0 los bits de los permisos que no se quieren limpiar (es decir, justo del revés a como se construían los permisos en octal para chmod). Así, si se desea que a partir de este momento los archivos y directorios que se creen tengan todos los permisos desactivados para los niveles de grupo y de otros y que no se limpie ningún permiso para el nivel de propietario, la orden a introducir será:
$ umask 077
Ejemplo:$ chown propietario_nuevo archivos
Apis:~$ ls -l a.outCambio del grupo de un archivo. Orden chgrp
-rwxr-xr-x 1 so13 so 2894 Nov 11 16:51 a.out
Apis:~$ chown so00 a.out
Apis:~$ ls -l a.out
-rwxr-xr-x 1 so00 so 2894 Nov 11 16:51 a.outEn muchos sistemas esta orden sólo puede ser ejecutada por el administrador del sistema.
La sintaxis de chgrp es la siguiente:
Es necesario pertenecer al grupo_nuevo para poder cambiarlo. La orden groups permite conocer a qué grupos pertenece un usuario.$ chgrp grupo_nuevo archivos
Apis:~$ ls -l a.out
-rwxr-xr-x 1 so00 users 2894 Nov 11 17:04 a.out
Apis:~$ chgrp itt a.out
Apis:~$ ls -l a.out
-rwxr-xr-x 1 so00 itt 2894 Nov 11 17:04 a.out
Orden cat
Se utiliza para visualizar el contenido de un archivo de texto (ASCII) por la pantalla. Si a cat no le pasamos como argumento ningún archivo de texto, entonces leerá de la entrada estándar (teclado) hasta que pulsemos Ctrl+d (^d). Una vez hecho esto, visualizará lo que acabamos de escribir. Por lo tanto, cat es una orden que por defecto (si no le pasamos parámetro alguno) lee de la entrada estándar y dirige su salida a la salida estándar (la pantalla). Ejemplo:Apis:~$ cd
Apis:~$ cat /etc/motd
OSF/1 V2.0 (Rev. 240); Fri Aug 5 11:54:48 GMT 1994
OSF/1 V2.0 Worksystem Software (Rev. 240)#############################################
# BIENVENIDO AL LABORATORIO DE ARQUITECTURA #
#############################################Apis:~$ cat mensaje
Lo que estoy escribiendo es un
mensaje que se muestra por pantalla
con el uso de la orden "cat".
Apis:~$Orden more
La orden imprime por pantalla el contenido del archivo de texto que le pasemos como argumento. Su sintaxis es:more [archivo1 ...]
A diferencia de la orden cat, la visualización se hace pantalla a pantalla. Para avanzar en la visualización línea a línea, se debe pulsar retorno (¿ ). Para visualizar la siguiente pantalla, se pulsará la barra espaciadora, y para finalizar se pulsará la tecla q (quit).
La tabla de opciones vista para la orden man es aplicable también a esta orden.Órdenes head y tail
En muchas ocasiones no se pretende visualizar el archivo de texto completo, sino que con algunas líneas sería suficiente (por ejemplo para identificarlo). Las órdenes head y tail se pueden utilizar para visualizar las primeras o las últimas N líneas de un archivo de texto. Su sintaxis es:head [-N] archivo1tail [-N] archivo1
En esta sección se introducen las órdenes básicas necesarias para poder gestionar los archivos bajo UNIX.
Orden cd
Se utiliza para cambiar el directorio de trabajo actual.Su sintaxis es la siguiente:
Cuando se utiliza sin parámetros, el directorio de trabajo actual pasa a ser el directorio propio (el del arranque), también conocido como directorio HOME, dicho de otro modo, si nuestro directorio act /usr/local, dando la orden cd nos colocamos en nuestro directorio HOME.cd [path_name]HOME es el directorio en el que iniciamos sesión de trabajo, es decir el CWD que tenemos al entrar en el sistema.
Tanto cd, como pwd son ordenes internas del intérprete, no existe ningún archivo ejecutable en el que estén programadas.
Apis:~$ cd /usr/so
Apis:~$ pwd
/usr/so
Apis:~$ cd
Apis:~$ pwd
/users/so/tel/so01Orden cp
Se utiliza para copiar archivos. Su sintaxis es:$ cp archivo1 [archivo2 ...] destino
Como mínimo necesita dos argumentos. El primero es el archivo existente que queremos copiar en otro lugar, y el segundo es el nombre del archivo destino. Las rutas de ambos archivos se pueden dar tanto en forma absoluta como relativa. En caso de que el archivo destino exista, su contenido se perderá, quedando sustituido por el contenido de archivo1. Ejemplo:
Apis:~$ cd
Apis:~$ pwd
/users/so/tel/so25
Apis:~$ ls -F
c/ personal/ pruebas.c
pruebas xxx
Apis:~$ cp pruebas.c prnew.c
Apis:~$ ls -F
c/ personal/ pruebas.c
prnew.c pruebas xxxOrden rm
Se utiliza para borrar un conjunto de archivos. Su sintaxis es:Esta orden opera silenciosamente en ausencia de problemas, lo c especialmente peligroso si se tiene en cuenta que en UNIX un archivo borrado no puede ser recuperado de manera alguna.$ rm [-irf] archivo1 archivo2 ...Las opciones tienen el siguiente significado:
-i (interactive) antes de borrar cada uno de los archivos, rm preguntará si realmente queremos hacerlo.
-f (force) fuerza el borrado de los archivos, incluso si estos están protegidos contra escritura (el archivo debe pertenecer al usuario que quiere borrarlo). Ejemplo:Apis:~$ ls -F
c/ personal/ pruebas.c
prnew.c pruebas xxx
Apis:~$ rm prnew.c
Apis:~$ ls -F
c/ personal/ pruebas.c
pruebas xxx
Orden mv
Su funcionalidad es idéntica a cp, salvo que mv provoca que los archivos o directorios origen desaparezcan de su localización inicial. Su sintaxis es:Ejemplo:$ mv origen1 [origen2 ...] destinoApis:~$ mv pruebas personal
Apis:~$ ls -F
c/ personal/ pruebas.c
xxx
Apis:~$ ls personal
pruebas
mkdir (make directory) permite crear un nuevo directorio, mientras que rmdir (remove directory) lo elimina. Para eliminar un directorio, este tiene que estar vacío. Ejemplo:mkdir nom_directoriormdir nom_directorio
Apis:~$ ls -F
c/ personal/ pruebas.c
xxx
Apis:~$ rmdir c
Apis:~$ mkdir tmp
Apis:~$ ls -F
personal/ pruebas.c tmp/
xxx
2.2. Ejercicio sobre enlaces.
a. Cree un enlace fuerte a un archivo situado en su directorio de conexión y compare el número de enlaces que tiene ahora y los que tenía antes de realizar esta operación.
b. Realice de nuevo la misma operación pero en este caso sobre un directorio. ¿Puede realizar un enlace blando sobre un directorio?
c. Cree un enlace blando sobre el archivo original de la pregunta a) ¿Cuántos enlaces tiene ahora?2.3. Rellene al siguiente tabla:d. Borre el archivo original. ¿Puede acceder a los datos a través del soft-link? ¿y a través del hard-link? ¿Qué ocurre si creamos un archivo con el mismo nombre que el que hemos borrado? ¿Puede acceder a los datos a través del soft-link? ¿y a través del hard-link?
e. Intente realizar un enlace fuerte sobre el archivo de contraseñas del sistema. ¿Qué ocurre? ¿Por qué? Realice un enlace blando. ¿Qué ocurre? ¿Por qué?
2.4. Con este ejercicio pretendemos que se entienda de qué depende el hecho de que un archivo se pueda borrar o acceder a la información de un directorio. Vamos a proponer una serie de pequeños ejercicios a realizar y al final deberá responder a dos preguntas.
¿Es el mismo para todos? ¿Se puede cambiar? Directorio / Directorio . Directorio ~
a. Cree un directorio que se llame D1 colgando de su directorio de conexión. ¿Con que permisos se crea?2.5. Listar todos los archivos del directorio /etc que comiencen por i y terminen por b. ¿Qué archivos tienen como segunda letra una s ? ¿Qué archivos tienen como tercera letra una consonante?b. Cambie los permisos con umask de forma que estén activados todos menos los de ejecución. Cree otro directorio hermano de D1 llamado D2. ¿Qué permisos tiene?
c. En el directorio D2 cree un archivo con los permisos ----------. ¿Lo puede borrar?
d. Intente borrar el archivo que pertenece a otro usuario.
e. Ponga todos los permisos del D2 a d---------. ¿Puede acceder a él? Active el de ejecución, ¿puede acceder a él? Active también el de escritura, ¿puede acceder y ver su contenido? Active para el directorio D2 los permisos de ejecución y lectura únicamente ¿puede acceder al directorio? ¿puede borrar un archivo que tenga los permisos de escritura activados?
Después de realizados los ejercicios contesta a las siguientes preguntas:
i. Con que permisos se crea un directorio o archivoii. De que depende que se pueda borrar un directorio o archivo.
2.6. ¿Sería posible copiar con una única orden el directorio p02 en el directorio bin que cuelga de vuestro directorio de conexión? Indicar cómo y ejecutarlo. Explicar a qué se deben los mensajes que salen por la pantalla.
2.7. Hacer un listado largo de TODOS los archivos de vuestro directorio de conexión pero de modo que NO muestren el propietario sino exclusivamente el grupo y que añadan una / tras los archivos de directorio.
2.8. ¿Cómo se podría paginar la salida de la orden anterior para que se pudiera ver el resultado más cómodamente por pantalla?