next up previous contents
Next: Renombrado de archivos Up: Sistema de Archivos Previous: Redireccionamientos   Índice General

Navegando por el sistema de archivos

Hemos mencionado que el sistema de archivos es jerárquico y que podemos movernos dentro de él. Una de las herramientas indispensables para navegar en el sistema de archivos es pwd que nos dice en que lugar de la jerarquía nos encontramos. Por ejemplo, cuando el usuario Pablo entra en sesión, se encuentra inicialmente en su directorio ``home'', es decir en el directorio asignado a él dentro de la jerarquía de archivos. Si en ese momento ejecuta el comando pwd obtendrá:

$ pwd
/home/pablo

Digamos que ahora necesita escribir varias cartas y que éstas estén almacenadas de tal manera que pueda determinar directamente que son y a quién van dirigidas. De principio, bastaría con nombrarlas con el destinatario, pero pensemos que en un futuro la correspondencia aumentará y por cada persona tendrá varias cartas, y que además en su directorio almacenará otro tipo de información. Entonces, una buena solución es que tenga un directorio exclusivamente para almacenar las cartas, y que dentro de éste exista un directorio por cada destinatario. Así la estructura quedaría de ésta manera:

/home
        /pablo
                /cartas
                        /pedro
                        /gerencia
                        /asuntos_internos
                        /personal
                        /cobranzas
                        /comite_ejecutivo

Para crear un directorio se utiliza la instrucción mkdir de la siguiente manera, mkdir {nombre del directorio}3.8. Una vez creado, para posicionarnos dentro de él usamos cd. Así, la secuencia de instrucciones que Pablo necesita ejecutar para crear la estructura descrita es:

$ mkdir cartas
$ cd cartas
$ mkdir pedro
$ mkdir gerencia
etc.

Para recorrer los directorios o cambiar el directorio actual se utiliza el comando cd. Se puede usar en forma relativa o absoluta. En el primer caso basta con dar el nombre de un subdirectorio a partir de donde estamos. Por ejemplo, si estamos en cartas, para cambiarnos al directorio gerencia, usaremos cd gerencia. Una vez allí, para irnos al directorio cobranzas podemos usar cd .. y cd cobranzas, con lo cual nos regresamos primero al directorio cartas y de ahí nos pasamos al directorio cobranzas. También es posible usar cd ../cobranzas. O incluso, para irnos de cobranzas a nuestro directorio de trabajo, podemos usar cd ../.. ya que nos estamos moviendo al directorio padre del directorio padre del actual.

En el segundo caso, el de directorios asolutos, nos podemos mover dando la trayectoria completa. Por ejemplo, dentro del directorio cobranzas que se encuentra dentro de cartas podemos saber nuestra posición en el árbol con pwd: /home/pablo/cartas/cobranzas y movernos a nuestro directorio de trabajo con cd /home/pablo.

Existen tres maneras de regresarse al directorio original de trabajo. La primera es usando una variable de ambiente que tiene definido el valor de éste. Se usa de la siguiente manera: cd $HOME. La segunda es usando una pseudo variable que también tiene como definición a nuestro directorio de entrada: cd ~. La tercera es la más sencilla: simplemente usando cd sin ningún argumento, nos regresa a nuestro directorio ``home'' que es como se le conoce comunmente.

A la trayectoria que se ha de recorrer para llegar hasta un determinado directorio se le conoce como path. Así decimos que, en el caso del usuario Pablo, su home está en el path /home/pablo.

Ejercicio: Qué pasa si damos: cd .; cd ~/; cd ../.?

Habrá ocasiones en que será necesario eliminar un directorio o un archivo. De hecho, para poder eliminar un directorio, debe de estar vacio o en otras palabras, no contener ningún archivo. Para borrar un archivo existe la instrucción rm, que entre sus opciones tiene dos que nos son de interés inmediato, -i y -f. Con rm -i {nombre(s) de archivo(s)} le indicamos que antes de borrar el archivo nos pida confirmación:

$ rm -i borrame
rm: remove `borrame'? y

Con -f forzamos el borrado de un archivo aún en situaciones especiales.

Para eliminar un directorio --que debemos de recordar que tiene que estar vacio-- existe el comando rmdir. Veamos lo que pasa si tratamos de borrar un directorio que no está vacio. Primero examinamos el contenido de un supuesto directorio lola que digamos que existe en una máquina hipotética:

$ ls -al lola
total 29
-rw-rw-rw-      1       mancha  users   2243    Mar     16      02:39   carta.txt
-rw-rw-rw-      1       mancha  users   24987   Mar     16      02:39   intro.txt

Tiene dos archivos, tratemos de borrarlo:

$ rmdir lola/
rmdir: lola: Directory not empty

Ahora lo haremos borrando primero los archivos contenidos en él:

$ rm lola/*

Los nombres de los archivos en el directorio lola visto desde su padre, son: lola/carta.txt y lola/intro.txt. Al decirle que borre lola/* le decimos que borre todos los archivos contenidos dentro de lola. El carácter * es un comodín que significa cualquier carácter que se repite 0 o más veces. A diferencia de MS-DOS, el carácter ``.'' es uno más sin ningún significado particular.

Si ahora examinamos el contenido del directorio lola, vemos que sólo quedan dos directorios . y .., que siempre existen en todo directorio en Unix.

$ ls -al lola
total 2
drwxrwxrwx      2       mancha  users   1024    Mar     16      02:43   ./
drwxrwxrwx      4       mancha  users   1024    Mar     16      02:42   ../

Ahora podemos borrar este directorio sin ningún problema:

$ rmdir lola

Si trataramos de borrar el directorio . dentro de lola, obtendríamos lo siguiente:

$ rmdir lola/.
rmdir: lola/.: Operation not permitted

Ejercicio: Se le ocurre la razón?

Lo correcto es:

$ rmdir lola

De haber intentado borrar el directorio lola/.. obtendríamos igualmente un error:

$ rmdir lola/..
rmdir: lola/..: Directory not empty

Ejercicio: Porqué?

Habrá situaciones en que tenemos toda una parte de la estructura de archivos que necesitamos borrar y que sería toda una monserga ir borrando directorio a directorio por lo compleja que pueda ser dicha estructura. Digamos que a Pablo se le asigna una nueva función dentro de su organización y que ya no se va a dedicar a escribir cartas. En ese caso decide borrar el contenido del directorio cartas y todos sus subdirectorios con todos los archivos que estos contengan. Por lo que hemos visto hasta ahora, Pablo tendría que recorrer los subdirectorios hasta llegar a aquellos que están en la parte más baja de la estructura --es decir, que ya no contienen subdirectorios-- y comenzar a borra desde allí hacia arriba. Afortunadamente existe una manera rápida de conseguir ésto, con la opción -r de rm. Pero no era este un comando para borrar archivos y no directorios? Bueno, a final de cuentas un directorio es un archivo más dentro de la estructura de archivos de Unix, y por características propias (que están fuera de la intención de éste manual) es más conveniente hacerlo usando rm en lugar de rmdir.

Así la manera más rápida, y peligrosa, de borrar el directorio cartas y su contenido es:

$ rm -fr cartas

Nótese que no hubo necesidad de especificar las dos opciones por separado, es decir, rm -f -r; esto otra característica de los programas de Unix, cuando se utilizan juntas varias opciones, se pueden aglutinar todas con un sólo -.

Dijimos que era la manera más rápida y peligrosa. Lo primero es inmediato, -f asegura que en ningún momento rm se detendrá a preguntarnos si hace lo que le pedimos que hiciese. Lo segundo es un poco más difícil de explicar. Cuando se borra un archivo en Unix, se libera el espacio en disco que éste ocupaba y queda disponible para que el sistema operativo lo utilice en la creación de otro archivo. Como Unix es un sistema operativo multi tareas y multi usuarios, mientras nosotros borramos un archivo, puede ocurrir que el sistema operativo u otro usuario estén creando uno nuevo, de tal manera que de inmediato se ocupe el espacio donde estaba nuestro archivo. Esto quiere decir que es muy probable que en cuanto nosotros borremos el archivo, el área de disco que ocupaba sea utilizada para escribir otro. O sea, que una vez borrado quizá nunca más lo volveremos a ver. De hecho, Unix provee una utilería para tratar de recuperar información borrada de un disco, pero sin ninguna garantía de que se recupere la información borrada y además sólo puede ser ejecutada por el administrador del sistema. En la mayoría de los casos, es prácticamente imposible recuperar un archivo una vez que ha sido borrado.



Subsecciones
next up previous contents
Next: Renombrado de archivos Up: Sistema de Archivos Previous: Redireccionamientos   Índice General
Ismael Olea 2001-04-21