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.