PRÁCTICA 2 ATRIBUTOS DE LOS FICHEROS EN LINUX Objetivos Noción de inodo. Enlaces simbólicos y no simbólicos. Descripción de los atributos de un fichero. Permisos de un fichero. 1. Noción de inodo A cada fichero se le asigna en Linux un número único llamado inodo. El inodo se almacena en una tabla que se llama tabla de inodos y que reside en el propio sistema de ficheros. Cada sistema de ficheros tiene su propia tabla de inodos. Un inodo contiene toda la información sobre un fichero, incluyendo la dirección de los datos en el disco, el tipo de fichero, la fecha y hora de última modificación, el tamaño, el propietario, el contador de enlaces, etc. El sistema de ficheros de Linux asigna el número de inodo 1 al directorio raíz. La información del inodo 1 permite a Linux obtener la dirección en disco del directorio raíz cuyo contenido es una lista de nombres de ficheros y directorios y sus inodos correspondientes. Linux puede encontrar cualquier fichero en el sistema por medio de la consulta de una cadena de directorios, comenzando por el directorio raíz, cuyo contenido puede parecerse a lo que se muestra a continuación: 1. 1.. 45 etc 230 dev 420 home 123.profile Obsérvese que los ficheros. y.. están representados en el directorio. Debido a que éste es el directorio raíz,. y su directorio padre.. son idénticos. El contenido del fichero del directorio /home es distinto: 420. 1.. 643 fred Obsérvese que el inodo del directorio actual. coincide con el inodo para /home, que se encuentra en el fichero del directorio raíz, y que el inodo para el directorio padre.. es el mismo que el del directorio raíz. Linux navega por su sistema de ficheros por medio del encadenamiento hacia arriba y hacia abajo del sistema de ficheros de directorio. Si se quiere mover un fichero a un directorio en otro disco físico, Linux detecta esto al leer la tabla de inodos. En este caso, el fichero se mueve al nuevo disco, donde se le asigna un nuevo inodo antes de suprimirlo de donde estaba originalmente. 2. Enlaces simbólicos y no simbólicos En Linux existen dos procedimientos para crear enlaces o ligaduras entre ficheros: 1
ln fuente destino Establece un enlace no simbólico, es decir, crea nueva una entrada de directorio (destino) que corresponde a un fichero ya existente (f uente). Tanto la ligadura (destino) como el fichero original (f uente) hacen referencia al mismo fichero físico (ambos ficheros tiene el mismo inodo). ln -s fuente destino La opción s permite establecer un enlace simbólico, es decir, una entrada de directorio que es simplemente un nombre de ruta. En este caso la ligadura tiene un número de inodo distinto al del fichero fuente. Las ligaduras simbólicas no se contabilizan en el contador de enlaces que aparece al hacer ls -l (ver punto siguiente). 3. Descripción de los atributos de un fichero La orden ls Permite obtener un listado de los ficheros que pertenecen a uno o varios directorios (por defecto los del directorio actual). Puede tener como argumento un nombre de fichero o directorio. Además pueden usarse patrones de ficheros según se indica a continuación: * Representa cualquier cadena? Representa cualquier carácter [lista] Representa a cualquier carácter de la lista [c1-c2] Representa a todos los caracteres comprendidos entre c1 y c2 Las opciones mas usuales son: -l Indica, por este orden, tipo de fichero y permisos de lectura/escritura (10 caracteres), número de ligaduras no simbólicas, usuario propietario, grupo, tamaño en bytes, fecha y hora de la última actualización, nombre del fichero. -a Muestra ficheros ocultos (ficheros cuyo primer carácter es un punto). -R Si el argumento es un directorio, visualiza el árbol de directorios que cuelga debajo de él y los ficheros que pertenecen a cada uno de dichos directorios. -r Orden alfabético inverso. -d Si el argumento es un directorio muestra los atributos de dicho directorio en lugar de su contenido. -i Muestra el número de inodo del fichero en la primera columna. Para poder ver los distintos atributos de los ficheros jugamos con las distintas opciones de la orden ls. La opción más informativa es la -l que muestra una línea para cada fichero o subdirectorio y visualiza distintas columnas de información para cada uno. Al hacer un ls -l podemos ver en la primera línea el tamaño total de los ficheros visualizados (número de bloques). El resto de información se distribuyen como sigue: Columna 1... Está formada por 10 caracteres. El primero indica el tipo de fichero y el resto indican el modo o permisos de acceso al fichero. Columna 2... Está formada por un número que indica el número de enlaces no simbólicos. Columna 3... Indica el nombre del usuario propietario del fichero. Columna 4... Indica el nombre del grupo porpietario del fichero. Columna 5... Indica el tamaño del fichero en bytes. Columna 6... Muestra la fecha y la hora de la última modificación. Columna 7... Muestra el nombre del fichero. 2
Tipo de fichero. La primera columna consta de 10 caracteres y el primer carácter de cada línea indica el tipo de fichero. A continuación se resume los tipos de ficheros. - : fichero ordinario d : fichero directorio l : enlace simbólico b : fichero especial orientado a bloque (dispositivo), por ejemplo discos c : fichero especial orientado a carácter (dispositivo), por ejemplo impresoras Modo de acceso de ficheros. Cada usuario dado de alta pertenece a un grupo de usuarios asignado por el administrador del sistema. Los permisos de acceso a un fichero se dividen en tres niveles: accesos para el propietario (u), accesos para el grupo (g) y accesos para el resto de usuarios (o). Existen a su vez tres clases de permisos: lectura (r), escritura (w) y ejecución (x). La negación de un permiso determinado se indica mediante - en el lugar de la letra que corresponde. Esta información se muestra al ejecutar la orden ls -l. En la primera columna aparece una cadena de 10 caracteres de la forma -rwxrwxrwx. El primer carácter hace referencia al tipo de fichero, los tres que vienen a continuación a los permisos concedidos al propietario, los tres siguientes a los permisos concedidos al grupo y los tres últimos los concedidos a otros. Si el fichero es un directorio el significado es el siguiente: r indica que se puede leer el contenido del directorio, w que se puede borrar o crear ficheros en él y x que se puede buscar un fichero en él o puede pasarse a través de él en busca de otros subdirectorios. Por ejemplo, -rwxr-xr-- indica que el usuario tiene todos los permisos sobre el fichero, el grupo sólo puede leer y ejecutar pero no escribir, y el resto de usuarios solo puede leer. Número de enlaces. La segunda columna muestra el número de enlaces no simbólicos (hard links). Este número se obtiene del inodo del fichero. Los enlaces simbólicos (soft links) no se contabilizan ya que representan ficheros distintos. Propietario de fichero. La tercera columna muestra el propietario del fichero. Normalmente este nombre es el mismo que el identificador (id) del usuario de la persona que lo creó. Grupo de fichero. La cuarta muestra el grupo de usuarios. Todos los usuarios en Linux tiene un id de usuario y un id de grupo. Ambos los asigna el administrador del sistema. Tamaño de fichero. La quinta muestra el tamaño de fichero, es decir, el número de bytes que ocupa. Fecha y hora. La sexta columna muestra la fecha y la hora de la última modificación. Nombre de fichero. La séptima columna muestra el nombre del fichero. 3
4. Ordenes relacionadas con los permisos de acceso chmod [-R] [quien]+ =permisos{,quien+ =permisos} f icheros Cambia los permisos de acceso de uno o varios ficheros. El parámetro quien puede ser a (todos), u (propietario), g (grupo), o (otros). Los permisos se expresan con las letras r, w, x. + indica que se añada el permiso indicado, - que se quite ese permiso e = que se establezcan exactamente los permisos indicados. Si no se indica el argumento quien, se considera que afecta a todos los usuarios. La opción R hace extensivo el cambio de permisos a todos los ficheros indicados que se encuentre en los subdirectorios que cuelgan del directorio actual. Popr ejemplo, supongamos que tenemos el fichero datos cuyos permisos de acceso son rwxr-xr--. Sobre este fichero realizamos los siguientes cambios: Quitamos el permiso de ejecución al propietario y lo añadimos a otros usuarios: chmod u-x,o+x datos = rw-r-xr-x Añadimos el permiso de escritura a todos los usuarios: chmod go+w datos = rw-rwxrwx o también chmod a+w datos = rw-rwxrwx Añadimos el permiso de ejecución al propietario y lo quitamos al resto de usuarios: chmod u+x,go-x datos = rwxrw-rw- Restablecemos la situación inicial: chmod go-w,g+x datos = rwxr-xr-- o también chmod u=rwx,g=rx,o=r datos = rwxr-xr-- chmod [-R] numero f icheros Forma absoluta de chmod. El parámetro numero es un número de tres dígitos cada uno de los cuales hace referencia a los permisos del propietario, grupo y otros (en ese orden). El número se obtiene asignado a r el valor 4, a w el valor 2 y a x el 1. Así chmod 754 fichero es equivalente a chmod u=rwx,g=rx,o=r fichero. umask mascara El sistema utiliza este valor para definir los derechos de los ficheros y directorios de nueva creación La mascara es un número de tres cifras (pares ya que no se considera el permiso de ejecución) que debe restarse a la mascara por defecto que suele ser 666. El valor que queda tras realizar esta resta es el numero absoluto utilizado para asignar derechos al fichero. Ejemplo: umask 022 hace que cualquier nuevo fichero se cree con los siguientes permisos rw-r--r-- (666 022 = 644 = rw-r--r--) chown [-R] usuario f ichero Cambia el propietario del f ichero siendo usuario el nuevo propietario. La opción R tiene el mismo significado que en chmod. Sólo puede ejecutarlo root. chgrp [-R] usuario f ichero Similar a la anterior pero referido al grupo. Sólo puede ejecutarlo root. EJERCICIOS 1. Obtener un listado del directorio HOME en el que aparezcan los ficheros ocultos, el tipo de fichero e información relativa a propietarios, fechas, etc. 2. Observar la diferencia entre ls -l y ls -ld. 4
3. Obtener el número de enlaces no simbólicos del directorio HOME. 4. Crear dos subdirectorios de HOME y repetir el punto anterior. Que diferencias hay?. A que se deben esas diferencias?. 5. Crear un enlace simbólico al directorio HOME. Ha cambiado el número de ligaduras?. Cambiar al directorio recién creado. En que directorio estamos realmente?. Hacer ls -l y observar el tipo de fichero (carácter que aparece junto a los permisos de acceso). 6. Crear un fichero llamado a que contenga vuestro nombre. Crear un enlace no simbólico de a (llamarlo b) y un enlace simbólico (llamarlo c). Obtener los números de inodo de los tres ficheros y compararlos. Mostrar por pantalla el contenido de los tres ficheros. 7. Borrar el fichero a. Qué ocurre si intentamos ver el contenido de los fichero b y c?. 8. Observar los derechos de acceso de los diferentes ficheros y directorios que hay en el directorio HOME. Cuáles son los permisos de acceso del fichero c?. 9. Elimina los derechos de lectura, escritura y ejecución sobre alguno de los ficheros. Ponte de acuerdo con un compañero y comprueba que efectivamente no puede acceder a ese fichero. Concédele ahora el derecho de lectura. Comprueba que puede ver el contenido del fichero. Experimenta con todos los permisos y comprueba que sucede en cada caso. 5