3. Taller de Ubuntu
3.6. Manejo de directorios y ficheros
Se muestra ahora cómo crear directorios y ficheros, moverlos, copiarlos, bo- rrarlos, etc. Lo haremos sobre el sistema de ficheros de Ubuntu. Recordemos que en UNIX los dispositivos antes de poderse usar se han de montar, y que antes de retirar el soporte se deben desmontar. Este último punto es extrema- damente importante, puesto que si no, la integridad de los datos no está ga- rantizada en absoluto. Podemos, por ejemplo, antes de proceder a trabajar so- bre el sistema de ficheros, intentar retirar el CD-ROM pulsando el botón de expulsión. ¡Sorpresa! No se puede. No debemos pensar que se ha estropeado el dispositivo y mucho menos GNU/Linux. Simplemente sucede que este dis- positivo también ha sido montado automáticamente por el sistema durante el arranque y que, por tanto, ha pasado a formar parte del sistema; no tendría ningún sentido que pudiéramos retirar el CD-ROM sin antes informar al siste- ma; así pues, este ha tomado el control de este dispositivo y, entre otras cosas, ha deshabilitado el botón de expulsión del CD-ROM, precisamente a fin de que accidentalmente este sea retirado sin antes ser desmontado.
No sucede lo mismo con la disquetera convencional o con los dispositivos USB: en estos dispositivos la expulsión se hace de manera puramente mecáni- ca, por lo que es imposible que el sistema pueda impedir que expulsemos el disquete o el USB sin informar antes de ello. Pero esto no es recomendable, tal y como ya se ha comentado, porque puede suponer la pérdida de todos los da- tos que pudiera contener. Por tanto, mientras no aprendamos a montar y des- montar dispositivos de soporte de datos, el disquete o USB debe permanecer conectado desde que el sistema arranca hasta que se para, puesto que durante el proceso de parada, entre otras operaciones, se efectuarán las de desmontaje de estos dispositivos. Pasemos ahora al USB. ¿Dónde lo ha montado el sistema? Para responder a estas preguntas ejecutamos la orden mount sin argumentos ni opciones adicionales (precisamente esta es la orden que se utiliza para montar dispositivos, y umount para desmontarlos). Podemos ver cómo el sistema ha montado el USB dentro del directorio media y, además, en el entorno gráfico ha creado una nueva entrada en la barra del launcher de Unity al final de todo. Figura 18
Esta orden ejecutada sin argumentos nos muestra los dispositivos montados en el sistema en el momento de ejecutarlo y alguna información adicional sobre ellos (esta misma información se puede encontrar en el fichero /etc/ mtab; en consecuencia, al hacer cat /etc/mtab [para mostrar el contenido de mtab] conseguiríamos los mismos resultados).
En la última línea el sistema ha montado el dispositivo USB /dev/sdb1/, en /media/008AE9F88AE9E9DC. Cambiamos, por tanto, a este directorio para empezar a trabajar sobre el USB y comprobamos que efectivamente está mon- tado de forma correcta y que podemos ver su contenido:
ubuntu@ubuntu:$ cd /media/008AE9F88AE9E9Dc ubuntu@ubuntu:/media/008AE9F88AE9E9DC$ ls -la total 8
drwx--- 1 ubuntu ubuntu0 May 27 01:47 . drwx--- 1 ubuntu ubuntu 8192 May 27 01:47 ..
Creamos nuestro primer directorio, entramos y creamos un par de subdirec- torios:
ubuntu@ubuntu:/media/008AE9F88AE9E9DC$ mkdir d00 ubuntu@ubuntu:/media/008AE9F88AE9E9DC$ cd d00/
ubuntu@ubuntu:/media/008AE9F88AE9E9DC/d00$ mkdir subd00 subd01 ubuntu@ubuntu:/media/008AE9F88AE9E9DC/d00$ ls
subd00 subd01
Entramos al primer subdirectorio y creamos nuestro primer fichero: ubuntu@ubuntu:/media/008AE9F88AE9E9DC/d00$ cd subd00
ubuntu@ubuntu:/media/008AE9F88AE9E9DC/d00/subd00$ touch file00 ubuntu@ubuntu:/media/008AE9F88AE9E9DC/d00/subd00$ ls -la total 1
drwxrwxrwx 2 ubuntu ubuntu 512 May 27 01:50 . drwxrwxrwx 4 ubuntu ubuntu 512 May 27 01:50 .. -rwxrwxrwx 1 ubuntu ubuntu0 May 27 01:51 file00
En realidad el comando touch no sirve para crear ficheros vacíos, a pesar de que lo hace si el fichero no existe, sino que sirve para cambiar las informacio- nes relativas a fechas y horas de los archivos. Podemos poner algún contenido en nuestro primer fichero y comprobar que efectivamente ha quedado graba- do. Lo podemos realizar con los comandos echo y el redireccionamiento “>” y “>>”.
En el caso del entorno gráfico podemos ver los contenidos de las carpetas en- trando en ellas y observando las características que tienen con el botón de la derecha del ratón, y crear nuevas carpetas y ficheros también con el botón de la derecha dentro de la carpeta donde se quiere crear.
Se puede utilizar también un editor de texto para la consola con el fin de crear un fichero. Para ello, utilizaremos el editor vi, que se llama con el comando vi. Este editor tiene dos modos: el de órdenes, al cual se entra cuando se arranca, y el de edición. Para entrar al modo de edición basta con que pulsemos la tecla “i”, y para pasar al modo de órdenes hay que pulsar “Esc”. Si queremos guardar lo que se ha editado, hemos de ponernos en modo órdenes y escribir :w y :q para salir (vi dispone de muchas más órdenes, pero con estas dos es suficiente para las pruebas que se quieren mostrar ahora). Es muy interesante conocer estas órdenes básicas de vi, puesto que este editor está en casi todos los paquetes básicos de instalación de cualquier distribución, y si esta fallara en algún momento, nos puede ser útil para modificar algún fichero y proseguir esta instalación.
Ejecutamos la orden vi seguida del nombre que queremos dar al fichero, pul- samos la tecla “i”, escribimos lo que nos parezca oportuno, pulsamos “Esc” y “:wq” para guardar y salir. Mediante el comando more, otro paginador muy parecido a less, comprobamos que todo ha salido como se esperaba:
ubuntu@ubuntu:$ vi file01
it seems we're on the right way, mate!!! I agree.
:wq
ubuntu@ubuntu:$ more file01
it seems we're on the right way, mate!!! I agree.
Al USB se pueden conectar periféricos como ratones, teclados, escáneres, cá- maras digitales, teléfonos inteligentes, PDA, etc. Pero nos centraremos en las memorias USB, ya que cada día es más común utilizar este tipo de dispositivos en vez de los antiguos disquetes. Las memorias nos permiten almacenar varios gigabytes de información en un medio muy pequeño y fácil de transportar. Hay diferentes sistemas, como el sistema flash o el sistema memorystick. Estos sistemas funcionan perfectamente con GNU/Linux. Actualmente basta con “pincharlos” en el USB para que el sistema los detecte y lea la estructura de ficheros que tienen. Normalmente se montan como si fueran discos SCSI, y se suelen encontrar en /dev/sda1, o si hay otros discos SCSI ya instalados en el ordenador, en /dev/sdb1 o /dev/sdc1, dependiendo de los discos que haya conectados.
Como ya hemos visto, la orden mount nos permite montar cualquier sistema de ficheros, y con umount los podemos desmontar. Para saber cuántos discos hay montados y cómo se han montado, debemos ejecutar la orden mount sin ninguna opción. La información la obtiene del fichero /etc/mtab, puesto que en este fichero tenemos la lista de los sistemas de ficheros montados en aquel momento. De hecho, son los programas mount y umount los que mantienen esta lista en el fichero /etc/mtab.
Como la orden siguiente:
Ubuntu@ubuntu$ mount
/dev/root on / type ext2 (rw)
/ramdisk on /ramdisk type tmpfs (rw,size=401312k) /UNIONFS on /UNIONFS type unionfs
(rw,dirs=/ramdisk=rw:/KNOPPIX=ro:/KNOPPIX2=ro,delete=whiteout) /dev/hdc on /cdrom type iso9660 (ro)
/dev/cloop on /KNOPPIX type iso9660 (ro) /dev/cloop2 on /KNOPPIX2 type iso9660 (ro)
/UNIONFS/dev/pts on /UNIONFS/dev/pts type devpts (rw) /proc/bus/usb on /proc/bus/usb type usbfs (rw,devmode=0666)
automount(pid2320) donde /mnt/auto type autofs (rw,fd=4,pgrp=2320,minproto=2,maxproto=4) /UNIONFS/dev/sda1 on /mnt/sda1 type vfat (rw,nosuid,nodev,umask=000,user=knoppix)
El fichero /etc/fstab es el que contiene qué dispositivos se montan normal- mente, dónde y cómo (cuáles son sus opciones). Pero cuando montamos otros dispositivos o desmontamos el dispositivo que sea, esto se refleja en el fiche- ro /etc/mtab, que es el que nos describe qué sistemas de ficheros tenemos montados en ese momento. Por tanto, todas las modificaciones que se quieran realizar sobre el punto de montaje de un disco o el tipo de sistema de ficheros que tiene implementado está en el fichero /etc/fstab, donde están escritas todas estas características.
Para borrar los ficheros que se han creado en el USB se hace mediante la orden rm de este modo:
root@tty1[subd00]# rm file00
El sistema borra sin preguntar si realmente se quiere hacer esto con el fichero regular file00 que le hemos dicho que elimine. Si leemos el manual de la orden rm, veremos que este borra el archivo sin hacer ninguna pregunta. Pero si nos fijamos en la explicación de la opción -i de este mismo man, veremos que hace que se solicite confirmación para proceder a la eliminación del fichero. Se deberá pulsar “Ctrl+C” para cancelar, “n” para no borrar o “y” o “s” para hacerlo.
¿Cómo podemos hacer que este sea el comportamiento por defecto de esta orden? Con lo que se denomina alias de los comandos, un sobrenombre al comando con los parámetros que se quieran usar más habitualmente. Para ver los alias que hay en el sistema, simplemente se ha de ejecutar la orden alias y se muestran en pantalla, en este caso los siguientes:
En estos alias se puede ver por qué el retorno de la orden ls está en colores, o que para hacer un ls -la basta con que tecleemos la. Mediante alias po- demos establecer y modificar el comportamiento por defecto de órdenes o in- cluso crear otras nuevas:
ubuntu@ubuntu$ alias hi='echo "I say hello"' ubuntu@ubuntu$
I say hello
Volviendo a mirar el manual de la orden rm, vemos para qué sirven las opcio- nes -f y -r . La primera sirve para que la orden se ejecute forzando la elimi- nación o, lo que es lo mismo, desobedeciendo a un posible alias con la opción -i, así se puede eliminar el fichero también sin preguntar rm –f file00. La segunda opción obliga a la recursividad en la eliminación de los ficheros, es decir, a que la orden se extienda sobre los posibles subdirectorios o carpetas, y sus contenidos. Estas opciones son comunes a la mayoría de las órdenes bási- cas destinadas a la manipulación de directorios y ficheros; así pues, podemos crear un segundo directorio en la raíz del USB con todos los contenidos del otro directorio que se ha creado antes usando la orden cp, para ello, debemos recurrir a la recursividad:
ubuntu@ubuntu$ cp -r /media/008AE9F88AE9E9DC/d00/ /media/008AE9F88AE9E9DC/d01 En este caso, hemos usado el direccionamiento absoluto (tanto para especifi-
car el origen como el destino) para realizar la operación de copia. Es decir, hemos indicado, partiendo del directorio raíz, la ruta completa, tanto para el origen como para el destino. Del mismo modo, podríamos haber utilizado el direccionamiento relativo para especificar el origen de la operación, su des- tino o ambas cosas. Cuando usamos el direccionamiento relativo, el origen del direccionamiento es la posición actual dentro del filesystem (sistema de fi- cheros). Como en la mayoría de los casos, el sistema nos ofrece la posibilidad de obtener los mismos resultados empleando diferentes métodos.
Se puede copiar un fichero de otro directorio sobre el directorio actual. Nos situaremos en /media/008AE9F88AE9E9DC/d00/ y podemos copiar el segun- do fichero que hemos creado en el subdirectorio /subdir00 en este mismo directorio:
ubuntu@ubuntu:d01$ cp ../d00/file01 .
Vamos a describir completamente el significado y el porqué de la línea ante- rior. En primer lugar, especificamos el origen del fichero que queremos copiar y, en segundo lugar, hay que especificar obligatoriamente el destino, que es la posición actual (indicado con el “.”). Mediante un ls podemos comprobar si hemos obtenido el resultado que queríamos. Ahora nos podemos situar en el directorio padre, en el que se encuentra montado el USB, y borrar todo lo que
hemos generado hasta ahora. Para hacerlo, utilizaremos el wildcard “*” (existe también el wildcard “?”, que sirve para un solo carácter, así como diferentes métodos para especificar rangos de caracteres, y para referirse, en general, a más de un fichero o directorio) para ahorrarnos teclear:
ubuntu@ubuntu:/media/008AE9F88AE9E9DC$ rm -rf *