SISTEMA DE FICHEROS ==================== Un sistema de ficheros tiene una estructura de arbol y parte de un lugar especial llamado root (raiz) que se simboliza por '/'. (Ojo el super usuario tambien se le llama root). Un nombre de fichero puede contener cualquier caracter pero no es prudente usar caracteres especiales interpretados por la shell ($.",&,(,),*, etc..) Tampoco debe empezar por el caracter '-' que puede ser confundido con una opcion. Por ejemplo si llamamos a un fichero '-r' no solo no podremos borrarlo sino que se puede confundir con la peligrosisima opcion de borrado recursivo. Cuando un usuario entra al sistema se le asocia un subdirectorio de trabajo llamado $HOME. En el caso del super usuario sera el subdirectorio raiz. Puede existir varios sistemas de ficheros cada uno en un dispositivo o particion distinta, pero para hacerlo accesible ha de ser montado dentro del sistema principal de ficheros. (mount, umount) En cada subdirectorio hay dos entradas como mínimo que son '.' y '..' que referencian respectivamente al subdirectorio actual y al subdirectorio padre. (Cuando no tenemos en la variable PATH referenciado el subdirectorio actual tendremos que ejecutar los comandos de nuestro directorio actual mediante ./comando) El caracter '/' se utiliza para separar los diferentes componentes de un nombre de fichero. Cuando usamos un nombre de fichero que empieza por '/' se llama nombre de camino completo o nombre de camino absoluto. Si por el contrario empieza por '.', por '..', o por un nombre se denominara nombre de camino relativo, porque su utilizacion depende del subdirectorio actual donde nos encontremos. Relacion de comandos mas importantes para navegar por el sistema de ficheros. ls Muestra el contenido de direcctorio actual. cd Cambiar a un subdirectorio. mkdir Crea uno o mas directorio. rmdir Borra uno mas directorios. cp Copiar uno o mas ficheros al ultimo de la lista. Si mas de dos el ultimo debe ser un directorio. mv mover o renombrar ficheros al ultimo de la lista. Si mas de dos el ultimo debe ser un directorio. rm borrar la lista de ficheros. pwd muestra el camino absoluto del directorio actual. chmod Cambia los permisos de un fichero. chown Cambia el propietario de un fichero. chgrp Cambia el grupo de un fichero. Problema: # Influido por el MSDOS un usuario teclea el comando que sigue. # Lo que pretendia era copiar los ficheros del subdirectorio 'seg' al # subdirectorio actual. ¿ Que es lo que va a suceder realmente con este # comando ? ¿ Cual deberia haber sido la orden correcta? cp seg/* Para que los comandos anteriores puedan funcionar correctamente deberemos tener los permisos adecuados sobre los ficheros y los subdirectorios. Tipos de ficheros: 1) Regular 2) Directorios Son una tabla con numeros de inodos y nombres de ficheros. Los numeros de inodos son el indice de la tabla de inodos o sistema plano de ficheros. 3) Ficheros especiales. Pueden ser dispositivo tipo caracter o dispositivo de bloques. El manejo de estos ficheros depende del dispositivo en particular. 4) Fifo son pipes con nombre. Son propios de System V y en BSD no existen. 5) Enlaces simbolicos. Es un fichero que contiene un puntero a otro fichero. existen en 4.3 BSD y a pesar de que SCO es SystemV tambien en UNIX de SCO 6) El Soket es un fichero especial de 4.3 BSD. Permiso de ficheros. Es similar a permisos de procesos. El comando 'chmod 4000' pone el bit setuid on execute. El comando 'chmod 20#0 pone el bit setgid on execute si '#' es 7 5 3 o 1 y Enable mandatory lock si el '#' es 6 4 2 o 0. Cada proceso tiene un (R)UID, (R)GID, EUID, y EGUID. Cada fichero tiene un UID y un GID owner. El Kernel realiza el siguiente test para conceder a un proceso el acceso de cierto tipo a un fichero. 1) Si el EUID del proceso es 0 se da acceso. 2) Si el EUID del proceso es igual al UID del owner (propietario del fichero) se concede el acceso si los permisos de usuario rwx son los adecuados. 3) Si el EUID del proceso es distinto al UID del owner, y si el EGID del proceso es igual al GID del owner, se concede el acceso si los permisos de grupo rwx son los adecuados. 4) Si el EUID del proceso es distinto al UID del owner, y si el EGID del proceso es distinto al GID del owner, se concede el acceso si los permisos de others rwx son los adecuados. NOTA el comando rm permite borrar cualquier fichero sea cual sean los permisos cuando el proceso tiene un EUID coincidente con el propietario del fichero. Unicamente ocurre que si el fichero esta protegido contra escritura pedira confirmacion antes de borrarlo. 04000 Set uid on execute. 02000 Set gid on execute. 01000 Save text on image after execution. 00400 r owner 00200 w 00100 x 00040 r group 00020 w 00010 x 00004 r others 00002 w 00001 x. Umask. Se utiliza cuando se crean ficheros. Consiste en una mascara donde los bits a 1 especifican los bits de permisos que se pondran a cero. Por lo tanto equivale a AND (NOT umask). Ejemplo si queremos abrir un fichero con permisos 0664 y tenemos una umask de 0022 obtendremos un fichero 0644. 0664 000 110 110 100 0022 000 000 010 010 ----------------------- 0644 000 110 100 100 Sinificado de los permisos en directorios: ------------------------------------------ Hay que imaginar que un directorio es un fichero normal que solo contiene una tabla en la que se relacionan los ficheros que contiene como entradas de dicha tabla. Por ello si un directorio no tiene permiso de lectura, resultara imposible hacer ls en el (. unreadable) Si no tiene permiso de escritura no se podra dar altas, baja o modificaciones en la tabla lo que se traduce en que no se pueden borrar sus ficheros ni crear otros nuevos, ni renombrar ficheros. Si no se tiene permiso de ejecucion en un directorio no se podra hacer cd a ese directorio, ni a ninguno de los directorios que cuelgan de el.