3- Manejando Archivos y Directorios

  • ls
  • cd
  • more
  • less
  • cat
  • touch
  • echo
  • mkdir
  • ln
  • cp
  • mv
  • rm
  • rmdir
  • Resumen

    Introducción
    La base de todo sistema operativo que traten de asemejarce al Unix tradicional como nuestro querido Slackware Linux están orientados mayormente a la línea de comandos. Algunas personas puede creer que la X es fundamental para el desarrollo armonioso del sistema, pero enrealidad esto no es así. La línea de comando todavía es el principal medio por el cual nosotros mandamos ordenes al sistema y, por consiguiente, es importante entender como manejarce en ella, entendiendo un par de órdenes básicas que nos facilitarán el uso diario de nuestra distribución.

    Lo próximo explica a nivel básico el uso de algunos comandos que nos serán de gran ayuda para nuestro desempeño en el sistema. Como se dice en el capítulo de ayuda existen grandes fuentes de información sobre comandos y linux en general por si tú eres de esas personas que les gusta saber el ¿porque? de las cosas.


    ls

    Su sintáxis es :

    ls [options] [file...]

    Este nos muestra una lista de información acerca de los archivos que se encuentran en el directorio actual por default. Su similitud, pero para  DOS es el comandor dir.

      $ cd /
      $ ls

      bin  boot  cdrom  dev  etc  home  lib  mnt  mount  opt  proc  programas  root  sbin  tmp  ufro.mpeg  usr  var

    En el ejemplo anterior no se puede apreciar la diferencia archivos o directorios. Para este cometido usamos las opciones dos opciones -F que nos muestra un "/" después del nombre de un directorio, si es FIFO nos muestra al final del nombre un "|" o si es un ejecutable nos muestra al final del nombre un "*", si es un link simbólico nos muestra al final del nombre del archivo una "@" y la opción -C lista los archivos en comunas, ordenadas verticalmente.

      $ ls -FC
    bin/   cdrom/  etc/   lib/  mount/  proc/       root/  tmp/        usr/
    boot/  dev/    home/  mnt/  opt/    programas/  sbin/  ufro.mpeg*  var/

    El comando ls también tiene la característica que puede ser usado para dar más detalles referentes a un archivo o directorio. Como pueden ser sus permisos, su dueño, su grupo, su fecha de creación, ver si es un link, etc.

      $ ls -l
       total 2324
      drwxr-xr-x      2 root     bin          2304 Apr  30   09:58  bin
      drwxr-xr-x      3 root     root        1024 May   3   16:07  boot
      drwxr-xr-x      2 root     root            48 May   1   02:05  cdrom
      drwxr-xr-x    14 root     root      61048 May   9   14:40  dev
      drwxr-xr-x    42 root     root        4256 May   9   14:39  etc
      drwxr-xr-x      4 root     root            96 Apr  30   14:34   home
      drwxr-xr-x      4 root     root        2520 Apr  30    09:56  lib
      drwxr-xr-x      5 root     root          120 Mar 16     2002  mnt
      drwxr-xr-x    23 root     root          536 Apr  25    13:51  mount
      drwxr-xr-x      4 root     root            96 Mar   7    17:59  opt
      dr-xr-xr-x      96 root     root             0 May   9    10:39  proc
      drwxr-xr-x      8 root     root          576 May   9    16:21  programas
      drwx--x---     16 root     root          720 May  8     20:01  root
      drwxr-xr-x      2 root     bin          5456 Jun   1      2002  sbin
      drwxrwxrwt  16 root     root          616 May   9    14:48  tmp
      -r-xr-xr-x        1 root     root   2290859 Mar 13    12:07  ufro.mpeg
      drwxr-xr-x    18 root     root          544 Mar  13    21:00  usr
      drwxr-xr-x    16 root     root          456 Mar  13    21:00  var


     Suponga que usted quiere conseguir una lista de los archivos ocultos en el directorio actual. Eso se logra con la opción "-a", la cual lista todos los archivos en el directorio, incuyendo todos los archivo que comienzan con ".".

      $ ls -a
      .   bin    cdrom  etc      lib     mount  proc             root   tmp            usr
      ..  boot  dev      home  mnt  opt        programas  sbin  ufro.mpeg   var

    Estos archivos que comienzan por un "." son conocidos también como archivos ocultos, ya que, no son mostrados con el comando ls simple.
    Como te puede simaginar existe una gran gama de opciones a las cuales puedes recurrir para lograr el objetivo que decees con ls, pero si realmente deceas un mayor detalle vee las páginas del manual.


    cd

    Su sintáxis es:

    cd ?dirName?

    Esta es usada para cambiar el actual directorio de trabajo a dirName, o al directorio home ( especificado en la variable $HOME ) si dirNmae no es dado.

      darkstar:~$ cd /tmp
      darkstar:/tmp$ cd etc
      bash: cd: usr: No such file or directory
      darkstar:/tmp$ cd /etc
      darkstar:/etc$

    Como es de notar si el nombre del directorio usr/ no comienza con un slash ( ya que el directorio usr/ se encuentra en la raíz del sistema), el comando cd tratará de entrar a un directorio llamado usr/ en el directorio actual ( en este caso /tmp ), si este directorio ( usr/ ) no es encontrado en el directorio actual nos arroja un error "bash: cd: usr: No such file or directory".

    Para conseguir una ayuda de este comando (como es una orden construida en el shell), puede usar los siguientes comandos:

      $ help cd
      $ cd --help


    more

    Su sintáxis es:

    more [-dlfpcsu] [-num] [+/ pattern] [+ linenum] [file ...]

    Este comando nos sirve como una utilidad de página. Un ejemplo en particular de cuando nos sirve este comando es, cuando la salida de un ls es demaciado larga, o la salida de dmesg o algún otro archivo con bastante información como los logs del sistema. Esto es porque los comandos no sabes encajonar o dividir la información para ir viéndolas por partes. Pero para esto tenemos el comando more(1).

    Ahora veá,mos un ejemplo en la práctica.

      $ cd /dev
      $ ls -l


    Como haz podido darte cuenta, este directorio contiene una gran cantidad de archivos que demoran un buen tiempo en ser mostrados en su totalidad con el comando ls -l. Ahora, cuando el comado termine de ejecutarce teclea este comando:

      $ ls -l | more
     
    Aquí usamos el comando ls -l seguido de un "|" que es una tubería ( mejor conocido como pipe ) que sirve para unir dos comandos y este pipe es seguido por el comando more que nos mostrará la información por partes y cuando queramos avanzar un archivo mas abajo presionamos enter, pero si queremos ver la siguiente página de archivos listados presionamos la barra espaciadora.

    Aparte de more tenemos un comando aún más flexible el cual es less(1).


    less

    Esta orden es bastante más hábil que more(1), y tiene la particularidad de que si deceamos volver una pantalla más atrás de la salida del comando por ejemplo ls -l, lo podemos hacer. El comando less(1) nos deja hacer esto ya que e suna función que e sparte de él. El comando less(1) se usa de la misma forma que more(1). Por ejemplo.

    $ cd /dev
    $ ls -l | less


    Lo que ocurre simplemente esque la información entregada por el comando ls -l es entubada por el comando less, permitiendonos así, movernos desde el inico de la informacion al final o viceversa. Y para podernos salir de less presionamos la letra "q" ( que vendría siendo como quit ).


    cat

    Este comando es la abreviatura de "encadene". El propósito de cat en un principio fué unir o fusionar archivos de texto en uno, pero este también puede ser usado para lograr diferentes objetivos.

    Para fusionar dos archivos o más, debemos ejecutar el comando seguido de el o los archivos que queremos fusionar, seguido de un redireccionador, el cual va acompañado del nombre del archivo que será usado para fusionar las salidas estandar ( standard output ) o las entradas entándar ( standard input ) de los archivos. Un ejemplo de eto sería

       $ cat archivo1 archivo2 archivo3 > Archivo_final

     Esta orden toma el contenido de file1, file2, y file3 y lo fusiona todos en un solo archivo. Esto significa que toma el contenido de file1, file2 y file3 dejando el output ( la salida ) gracias al redireccionador ">" en un archivo llamaod FinalFile.

    Este comando ( como la mayoría de los comandos Unix), pueden ser usados convinando el comando con otro gracias a "|" ( que es un pipe como explicaba un par de líneas arriba). Un ejemplo de esto sería:

      $ cat archivo1 | less

    Esto nos muestra el contenido de archivo1 permitiendonos así, movernos a antojo por todo el contenido de archivo1 gracias a less ( en caso de que el contenido de archivo1 sea extenso claro está).
    Este también puede ser usado para copiar archivos. Por ejemplo:

      $ cat /mp3.pl > ~/copia_mp3.pl

     Lo que ocurre auí es que, se copia el archivo mp3.pl que se ubica en la raíz a nuestro directorio home con el nombre "copia-mp3.pl".
    Como has de deducir con los pocos ejemplos que e expuesto, el comando cat tiene varios usos, además es ideal usar este tipo de comandos así en scripts para la shell. Si deceas más información puedes consultar las páginas del manual.


    touch

    Este es usado para modificar el timestamp de un archivo, que es la fecha y hora de creación de creación de un archivo en cuestión. Si el archivo que inidcamos con touch no existe este será creado. Por ejemplo:

      $ touch /home/slacky/slackware.txt

    Aquí hemos creado un archivo llamado slackware.txt en el directorio /home/slacky/ ( si esque este no existe ). En caso de que este archivo existiera de antes solo se modificará la hora y fecha de creación. También podriamos copiar las fechas de creación de un archivo a otro de la siguiente manera:

    $ touch -r archivo1 archivo2

    Lo que ocurre, es que, el tiemstamp de archivo1 es tomado y dejado en archivo2. Además de estas opciones hay varios más las cuales son definidas y explicadas mejor en la página del manual.


    echo

    Este comando nos muestra una línea de texto. Echo se podría definir como un eco de la salida estandar de STRING(s) ( que sería(n) la(s) cadena(s) ). Si usamos echo defecto, este desplegará el string y una nueva línea después. Para evitar esto usamos la opción -n que elimina esa nueva línea al final del output del string indicado con echo. La opción -e hace que echo busque los caracteres de salida en el string y los ejecute.


    mkdir

    Este comando simplemente nos permite crear directorios. Si este es ejecutado por default más el nombre del directorio a crear este directorio se crea en el directorio actual osea donde ejecutamos el comando mkdir. Un ejemplo para crear un directorio llamado Slackware es así:

      # mkdir Slackware
      
     Pero también podemos especificar el comando seguido de la ruta en donde crearemos el directorio :

      # mkdir /usr/src/Slackware
     
    Pero, ¿que pasa si los directorios que se encuentran entre el directorio que nosotros deceamos crear y la raíz no existen ?, bueno, para esto podemos usar la opción -p, esta crea el o los directorios indicados entre el directorio que nosotros estamos creando y la raíz evitandonos cualquier fallo. Un claro ejemplo de esto es:

      $ mkdir -p /patrick/linuxchile/slackware


    ln

    Su sintáxis es:

    ln [options] source [dest]

    El comando ln(1) es usado para crear links ( o enlaces ) entre archivos. Por default, los links creados son hard links ( o enlaces duros ), pero podemos usando la opción -s podemos crear links simbólicos o soft links ( enlaces blandos).Las diferencias entre estos dos tipos de links son explicada en la sección Links del capitulo 9. Por ejemplo, si decearamos crear un link simbólico al directorio /home/slacky/musica simplemente tecleamos:

     # ln -s /home/slacky/musica /musica

    Para crear un hard link ( o enlace duro) es tan fácil como esto :
     
     # ln /home/slacky/musica /musica


    cp

    El comando cp copia archivos (o, opcionalmente directorios).  Tú puedes cualquierarchivo dandole un despitno, o copiando arbitrariamente muchosarchivos a un directorio de destino. Por ejemplo:estamos copiando el archivo slack.txt que se encuentra en el directorio actual al directorio /tmp :

      $ cp slacky.txt /tmp

     Al momento de copiar el archivo estamos creandolo, pero, ¿que pasa si nosotros deceamos que este archivo se copie tal cual, osea con su respectivo timestamp?, para esto usamos la opción-a que nos asegura que los timestamp no son modificados en la copia. Ejemplo :

     $ cp -a slacky.txt /tmp

    Para copiar un directorio más los archivos que este contiene a otro directorio usamos la opción -R. Ejemplo:

      $ cp -R musica /tmp

    El comando cp tiene muchas más opciones que pueden ser encontradas en las paginas del manual.


    mv

    Este comando se usa para mover un archivo o directorio de una ubicación a otra. Para esto debemos nombrar la fuente y el destino cuando ejecutamos mv. Ejemplo:

      # mv slacky.txt /usr/local/share/

    Con mv también podemos renombrar un directorio o archivo de la siguiente manera:
     
    $ mv slacky.txt slackware.txt

    Para una mayor información sobre las diferentes opciones de mv revisa la pagina del manual.


    rm

    El comando rm(1) elimina por default archivos en el sistema y gracias a la opción -r árboles de directorios. Este es uno de los tantos comandos que deben ser usados con un cuidado especial, ya que, Linux no proporciona una manera de recuperar archivos eliminados.

    Para eliminar un archivo es así:

      $ rm archivo

    Si nos arroja un error como "rm: cannot unlink `/etc/passwd': Permission denied" debemos fijarnos en los permisos del archivo que deceamos borrar.

    Si el archivo tiene los permisos de leer desactivados, usted conseguirá un mensaje de error. Para forzar la eliminación del archivo sin importar lo que pase, coloque la opción -f

       $ rm -f archivo
      
     Si deceamos remover un directorio entero debemos indicar las opciones -r y -f juntas. Ejemplo :

      # rm -rf /

    Tenga especial cuidado con esta última lína, ya que, si usted fuese root y ejecutara este comando perderá todo el sistema. Hay otra gran cantidad de opcionesindicada con detalle en la página del manual.


    rmdir

    Este es usado para eliminar directorios del filesystem. El directorio a eliminar debe estar vacío antes de que sea eliminado. Su sintáxis es:

      $ rmdir <DIRECTORIO>
     
     Por ejempo, si deceamos quitar el subdirectorio slack/ el que se encuentra en el directorio de trabjao actual sería así:

      $ rmdir slack/
      
     Si el directorio no existe, rmdir le avisará. También podemos especificar la ruta completa del directorio que deceamos eliminar. Por ejemplo:

      $ rmdir /tmp/slack/

     Aquí estamos eliminando el directorio slack/ que se encuentra en /tmp/ .

     Nosotros podemos eliminar un directorio y todos sus directorios raíz gracias a la opción -p. Por ejemplo:

      $ rmdir -p /tmp/slack/

    Lo que ocurre aquí, es que, primero se trata de eliminar en directorio slacky/, si esto se consigue tratará de eliminar el directorio tmp/ y así hasta que nos salga un error o hasta que el árbol de directorios sea eliminado por completo.


    Resumen

    En este capítulo se fuerón vistos una gran variedad de programas con sus respectivos ejemplos y manipulación. Ahora usted debería saber o almenos tener una idea de como crear, eliminar y mover casi todo en el sistema de archivos ( o filesystem). Usted también debe saber cómo listar y tocar los archivos si lo necesita. Y finalmente, usted debe saber por qué ejecutar el comando rm -rf / como root, podría ser lo peor que se le podría ocurrir.


    Estructura del Filesystem Indice Control del Procesos