Está en la página 1de 8

Sistema de ficheros en Unix. Directorios y ficheros El sistema unix se basa, al igual que otros, en una estructura jerrquica de directorios.

Aunque es muy probable que el lector est familiarizado con este esquema, vamos a repasar aqu una serie de conceptos bsicos, haciendo hincapi en los aspectos en los que se diferencia del sistema DOS. Los datos que normalmente maneja el computador se almacenan en forma de paquetes a los que se denominan ficheros. Estos paquetes tienen adems de los datos una cabecera en la que se encuentra informacin especifica del fichero (como por ejemplo el nombre del fichero y la fecha de creacin). Estos paquetes se encuentran a su vez organizados dentro de directorios. Esto crea una estructura jerrquica de directorios en forma de rbol que tiene, entre otras, las siguientes caractersticas: Existe un solo directorio en lo ms alto de la estructura a partir del cual nace todo el resto. A este directorio se le denomina (por la analoga con el rbol) directorio raz. En Unix se representa con el smbolo / y no con como en MS-DOS. Todo directorio tiene un solo directorio padre. Al directorio padre se le denomina siempre .. (dos puntos seguidos). De esta manera con la orden cd .. (que pronto veremos) iremos siempre al directorio padre del actual. Aunque el directorio raz (/) no tiene padre, se considera que su antecesor el l mismo. De esta manera la anterior orden escrita desde el directorio raz no producira un error sino que nos dejara en la propia raz. Del mismo modo que existe la entrada .. , existe una entrada llamada . (un solo punto). Representa al propio directorio. De esta manera, la orden cd . no tendra el menor efecto puesto que nos llevara al propio directorio donde ya nos encontramos. Esta entrada es til en muchas ocasiones como veremos ms adelante. El sistema de ficheros de Unix se diferencia en muchos aspectos del sistema de ficheros de DOS, como es de suponer debido a las caractersticas profundamente diferenciadas de ambos sistemas. As, debido a que existen varios usuarios diferenciados, Unix es capaz de diferenciar tambin entre los ficheros de unos y otros, asegurndonos la privacidad de estos. Ordenes bsicas del sistema de ficheros Cuando empezamos una sesin en Unix, el sistema operativo nos deja automticamente en un directorio (distinto para cada usuario) al que se denomina directorio home (hogar). As, el directorio home del usuario antonio ser /home/antonio, /users/antonio o algn otro parecido. Cmo podemos saber cual es nuestro directorio home? Nada ms empezar la sesin utilizaremos la orden pwd (print working directory, imprimir el directorio de trabajo) que nos muestra en todo momento en qu directorio nos encontramos. Si el usuario antonio escribiese esta orden obtendra: /home/antonio Esta orden no muestra siempre el directorio home, sino que muestra el directorio donde nos encontramos en el momento de teclearla. Naturalmente, al comienzo de la sesin mostrar el directorio home. Para movernos por la estructura de directorios utilizamos la orden cd (change directory, cambia de directorio). De esta manera si escribimos:

$ cd / Iremos directamente al directorio / (raz). El uso de esta orden sin ningn argumento nos llevar siempre al directorio inicial o home. Para comprobar en todo momento donde nos encontramos, podemos utilizar la orden pwd. Las entradas .. y . se pueden utilizar con la orden cd para acceder al directorio padre del que nos encontramos y para el propio directorio respectivamente (aunque es este ltimo caso no tiene demasiado sentido). As:. $ pwd /home/antonio $ cd .. $ pwd /home El espacio entre cd y .. es obligatorio. Podemos movernos a un directorio que no est justo por debajo de nosotros si especificamos todos los directorios intermedios que nos separan del objetivo separados por / $ cd / $ cd usr/bin $ pwd /usr/bin $ cd .. $ pwd /usr $ cd $ pwd /home/antonio $ cd ../../usr/local/lib $ pwd /usr/local/lib $ cd ../bin $ pwd /usr/local/bin $ cd /usr/doc $ pwd /usr/doc Intenta comprender bien qu hacen estas ordenes antes de seguir adelante. A parte de movernos por la estructura de directorios de unix, nos interesar tambin poder manipular esta, crear y borrar ficheros. Para crear un fichero se utiliza la orden mkdir (make directory, hacer directorio). Esta orden va

seguida de una lista de directorios (separados por espacios) que sern creados por el sistema operativo: $ cd $ mkdir nuevo El cd inicial se ha puesto slo para asegurarnos de que el fichero ser creado en el directorio inicial. Para poder comprobar cmo ha sido creado, utilizamos el comando ls. Con l, obtendremos una lista de todos los ficheros contenidos en el directorio. $ ls nuevo Otro ejemplo: $ mkdir direc1 direc2 direc.ultimo $ ls direc.ultimo direc1 direc2 nuevo Tampoco hay ningn problema en crear directorios que no estn justo debajo del directorio actual. Basta con que le indiquemos al sistema cmo llegar hasta ellos: $ mkdir nuevo/direc3 $ cd nuevo $ ls nuevo Para borrar directorios utilizamos la orden complementaria a crear un directorio: rmdir (remove directory, borrar directorio). Su sintaxis es igual a la de mkdir. Al nombre del comando le sigue una lista de directorios a borrar: $ rmdir direc1 direc2 La anterior orden borrara los directorios direc1 y direc2. Para poder borrar un directorio este debe estar vaco. Evidentemente, los directorios no nos serviran para nada si no pudiesemos guardar ficheros en su interior. Lo primero que debemos saber es cmo crear un fichero. Utilizamos la orden: $ cat > nombre.fichero Todo lo que escribamos a partir de ese momento ser incluido dentro del fichero nombre.fichero. Para indicarle al ordenador que queremos terminar la creacin del fichero utilizamos ^D (control+d). Aunque es evidente que este no ser el metodo principal de creacin de ficheros (ya que los ficheros sern creados por los programas que utilicemos en nuestro trabajo cotidiano, como procesadores de textos, programas de contabilidad, diseo asistido por computador, etc) utilizaremos este mtodo por resultar sencillo para crear ficheros con los que poder practicar las siguientes ordenes.

Nombres de los ficheros Los nombre de los ficheros en unix merecen una atencin especial. En general, el nombre de los ficheros en un sistema operativo depende de las elecciones de diseo que se hicieron en sus sistema de ficheros en el momento de su creacin. As, debido a un intento de simplificar el diseo del sistema de archivos de MS-DOS, se imponen las restricciones de 8 caracteres como mximo en el nombre y 3 en la extensin. Unix no es slo un sistema operativo. En la larga historia de ste han aparecido multitud de versiones algunas de las cuales han reescrito el sistema de ficheros. De esta manera existen en la actualidad varios estndares que afectan al tipo de nombres que es posible dar al los ficheros. Todos ellos comparten las siguientes caractersticas: No existen diferencias en el nombre que es posible darle a los ficheros y a los directorios. No se diferencia entre nombre de ficheros y extensin. Aunque el . (punto) puede ser utilizado dentro del nombre del fichero, no es ms que otro carcter ms, no teniendo asignado ningn significado especial (como ocurre en MS-DOS, donde sirve como separador entre nombre y extensin). De esta manera, puede haber un punto, ninguno e incluso varios dentro del nombre. Existen algunos caracteres que deben ser evitados dentro del nombre, como son /,-, >,<. En general se deben evitar todos aquellos caracteres de los cuales hace uso el shell. Las diferencias entre sistemas de ficheros distintos estn principalmente referidas a la longitud que se le puede dar a los nombres. En Linux (y en muchos otros unix), se admiten longitudes de hasta 256 caracteres. Esto proporciona suficiente espacio para escribir un nombre realmente descriptivo del contenido del fichero. Desgraciadamente, existen todava s.o. que utilizan un sistema de ficheros que limita la longitud de los ficheros a 14 caracteres. Recurdese que el punto cuenta como un carcter ms. Una vez visto como podemos crear un fichero de una manera bsica, veamos las ordenes que tenemos para su manipulacin. En primer lugar tenemos la orden cp (copy, copiar) que nos permite crear una copia exacta de un fichero en el mismo directorio o en otro aparte. Su sintaxis es: cp [lista de ficheros] [fichero o directorio de destino] Si la lista de ficheros inicial consta de un solo fichero y se trata de un fichero de destino (en lugar de un directorio), lo que estaremos haciendo es crear un nuevo fichero, como en: cp prueba fichero.de.destino Que crea un nuevo fichero con el nombre fichero.de.destino copia exacta de prueba. Por el contrario si en lugar de un fichero de destino escribimos el nombre de un directorio, Unix lo copiar dentro de l, conservando el mismo nombre. Por ltimo, si especificamos una lista de ms de un fichero, estaremos obligados a indicar un directorio donde copiarlos, en lugar de un fichero. As: cp prueba un.fichero direc2 Copiar los ficheros prueba y un.fichero dentro del directorio direc2. Si no existiese ningn

directorio con ese nombre, el comando dar un error, no crear un fichero direc2. A la orden cp se le pueden especificar los siguientes modificadores: -i Interactivo. Pregunta si queremos sobreescribir el fichero de destino cuando este existe. As: cp -i prueba fichero.de.destino Preguntar si queremos sobreescribir fichero.de.destino en el caso de que este ya exista. -r Recursivo. Crea copia de todos los subdirectorios tambin. Esto quiere decir que si el o los directorios especificados tuviesen a su vez otros directorios en su interior estos serian copiados del mismo modo. Esta ltima forma es muy potente, ya que nos permite crear copia de toda una rama del sistema de ficheros. Existe tambin un comando en Unix para cambiar el nombre y/o mover un fichero. Se trata de mv (move, mueve). Su sintaxis es muy parecida a la de la orden cp: mv [fichero o ficheros a renombrar/mover] [nuevo nombre o lugar] Si se utiliza un solo nombre como fichero a mover o renombrar, su efecto depender de lo que hayamos elegido como nuevo nombre: Si se trata de un directorio, el efecto ser el de mover el fichero indicado dentro de ese directorio. Si no se trata de un directorio, se considerar que ese es el nombre que deseamos para el fichero indicado, y el ordenador le cambiar el nombre. Tambin se puede dar una mezcla de ambos casos. En el siguiente ejemplo: mv fichero /direc/nuevo El efecto ser el de mover el fichero al directorio direc cambindole el nombre por nuevo (suponiendo que direc sea un directorio y nuevo no lo sea, claro) Si utilizamos una lista de ms de un fichero como parmetros iniciales, necesariamente deberemos proporcionar el nombre de un directorio como parmetro final al cual sern movidos todos los ficheros. No hay ningn problema en especificar entre los ficheros a mover el nombre de algn directorio, ya que mv es capaz de mover y renombrar directorios. Con el comando mv podemos utilizar el modificador -i que tiene, como en el caso de cp, el efecto de pedir confirmacin cuando tratamos de sobreescribir algn fichero ya existente. Si lo que pretendemos es borrar un fichero debemos utilizar el comando rm. Recibe como parmetros la lista de ficheros que queremos borrar. Algunos de sus modificadores: -i Interactivo. Pide confirmacin antes de borrar cada fichero. -r Recursivo. Si se especifica este modificador, se podr indicar como fichero a borrar el nombre de un directorio. Su efecto ser borrar el contenido completo de este directorio (incluidos subdirectorios) y finalmente borrar el propio directorio. Esto nos sirve para eliminar con una sola orden toda una rama del sistema de ficheros. Hasta ahora hemos utilizado la orden ls de modo sencillo para ver qu ficheros tenemos en un directorio. No obstante, la orden ls es mucho ms rica, de hecho tiene una gran cantidad de modificadores, de los cuales ahora slo nos ocuparemos de los ms utilizados. Si le indicamos una lista de ficheros, slo nos mostrar informacin sobre esos ficheros. -l Nos muestra el directorio en formato largo (long). As se nos da informacin sobre el tipo de fichero, sus permisos (que veremos en la siguiente seccin), sus poseedores, su longitud y fecha de creacin.

-a Nos muestra todos los ficheros. Por defecto ls no muestra los ficheros que comienzan por . (punto) -F Muestra despus del nombre de cada fichero un carcter indicando el tipo de este. Muestra, por ejemplo, / para los directorio y * para los ejecutables. -d Muestra los datos de los directorios como si fuesen ficheros normales. Por defecto ls nos muestra informacin sobre el contenido de los directorios y no sobre el propio directorio. -r Muestra los ficheros en orden inverso. -R Lista el contenido de los directorios recursivamente. Eso quiere decir que mostrar todos los ficheros contenidos dentro de los directorios, incluidos los ficheros contenidos dentro de los subdirectorios situados dentro del directorio y as ad nauseam -1 Fuerza a que en la salida se escriba un solo fichero por linea. -C Fuerza a que la salida se produzca en columnas. Este es el formato por defecto. Permisos en los ficheros Pasaremos ahora a ocuparnos de los permisos de cada fichero. Como ya vimos en la seccin anterior, el comando ls muestra es su formato largo informacin sobre los ficheros, entre la cual se encuentran los permisos as como los poseedores de cada fichero. Unix divide a los usuarios (en los que respecta a ficheros) en tres grupos: El poseedor (owner). El grupo poseedor. El resto de usuarios. As, el poseedor y el grupo nos los muestra al escribir ls -s. Por ejemplo: $ ls -l -rw-rr 6 antonio users 745 Feb 8 20:36 prueba En este caso nos muestra informacin sobre el fichero prueba. El dueo de este fichero es antonio, mientras que el grupo al cual pertenece es users. Pero qu son los primeros 10 caracteres de la lnea? El primero de ellos indica el tipo de fichero de qu se trata. En esta posicin aparecer una d cuando se trate de un directorio mientras que quedar en blanco (un guin) cuando sea un fichero normal. Los siguientes 9 caracteres indican los permisos de ese fichero y deben ser divididos en grupos de tres. Los primeros tres caracteres indican los permisos que el dueo del fichero tiene sobre l: r Permiso de lectura. Para poder copiar un fichero hemos de ser capaces de leerlo. w Permiso de escritura. El cual incluye tan solo el permiso de modificacin del fichero. Es muy importante tener en cuenta que este modificador no nos da permiso para borrar el fichero, sino solo para modificar su contenido. El permiso para borrar un fichero viene determinado por los permisos del directorio donde se encuentra (ver ms adelante). x Permiso de ejecucin. Nos indica si el fichero contiene un programa ejecutable por el sistema operativo. A continuacin vienen otros tres caracteres indicando los mismos permisos para el grupo al cual pertenece el fichero y finalmente tres caracteres indicando los permisos del resto de usuarios.

Los permisos de un directorio deben ser entendidos de modo algo distinto a los anteriores. Para un directorio, entendemos cada uno de los permisos de la siguiente manera: r Lectura de directorio. Indica si podemos ver el contenido del directorio (mediante la orden ls, por ejemplo). w Permiso de escritura. Indica si podemos crear nuevos ficheros dentro del directorio as como borrar los ya existentes. x Permiso de paso. Nos indica si podemos entrar dentro del directorio mediante la orden cd. Para cambiar estos permisos utilizamos la orden chmod (change mode). Su sintaxis es la siguiente: chmod [ugoa] [+-=] [rwx] [lista de ficheros] El primer parmetro es una combinacin de las letras u, g, o, a e indica si los permisos se van a cambiar para el dueo del fichero (u), para el grupo (g), para el resto (o) o para todos a la vez (a). El segundo parmetro indica si el modificador se va a activar (+), desactivar(-) o dejar como el nico activo(=). Finalmente se indica r, w, o x segn queramos cambiar los permisos de lectura, escritura o ejecucin. Algunos ejemplos: chmod a+w direc Activa el permiso de escritura para todos los usuarios (dueo, grupo y el resto) chmod o=r nuevo Activa el permiso de lectura para el resto de usuarios eliminando todos los dems permisos. chmod o-r+w nuevo Quita al resto de usuarios el permiso de lectura del fichero y activa el permiso de escritura. chmod ug-w direc Quita el permiso de escritura sobre el fichero al dueo y al grupo poseedor. chmod a+rwx direc Activa todos los permisos para todos los usuarios. Enlaces y enlaces simblicos Una ltima particularidad del sistema de ficheros Unix son los enlaces. Supongamos que existe un grupo de usuarios (por ejemplo antonio y luis) que estn trabajando en un proyecto comn. Puede que este grupo utilice una serie de ficheros (por ejemplo el fichero texto.doc) como referencia conjunta, en la que cada uno de ellos escribe el estado actual de la parte del proyecto que a l le corresponde. Se podra dejar este fichero en un directorio al cual ambos pudiesen acceder, pero

sera mucho ms cmodo si se pudiese situar dentro del directorio home de cada uno de ellos. Para eso es para lo que nos pueden servir los enlaces (links). Un enlace es otro nombre para el mismo fichero (lo cual puede incluir otra localizacin). Por ejemplo si tenemos el fichero /home/antonio/texto.doc, podemos utilizar la orden: ln /home/antonio/texto.doc /home/luis/texto.txt Con esto aparecer un fichero en el directorio /home/luis, llamado texto.txt que es en realidad el fichero texto.doc. Cualquier cambio sobre cualquiera de ellos se podr ver desde el otro ya que realmente se trata del mismo fichero. La cuenta de cuantos enlaces existen de un fichero nos la da el sistema operativo cuando utilizamos la orden ls -l (es el nmero que aparece justo despus de los permisos de los ficheros). Cuando borramos un fichero, este no desaparece mientras an exista algn enlace que apunte hacia l. El problema de los enlaces es que slo podemos crear un enlace de un fichero, no de un directorio. Del mismo modo, slo se puede crear un enlace a un fichero que exista dentro del mismo sistema de archivos donde nos encontramos. Si, por ejemplo, tenemos dos discos duros, nos podra resultar interesante enlazar uno de los fichero en el primer disco duro con un fichero en el segundo disco duro. Para poder realizar estos ltimos tipos de enlaces se crearon los enlaces simblicos (symlinks). Para utilizarlos se aade el modificador -s a la orden ln: ln -s /home/antonio /home/luis/antonio Con esto aparecera dentro de /home/luis un directorio llamado antonio y que sera en realidad un enlace al directorio /home/antonio. Por desgracia, los enlaces simblicos no son tan transparentes al usuario como los enlaces normales, de tal forma que aunque podemos utilizar el nuevo directorio de modo igual al original, es muy importante no borrar el directorio original. Aunque el enlace /home/luis/antonio seguir existiendo, cualquier intento de acceder a l producir un error ya que los datos a los cuales enlaza habrn sido borrados. El modificador -i puede ser utilizado con la orden ln. Como ya vimos, el efecto es el de pedir confirmacin antes de sobreescribir un fichero.

También podría gustarte