Un sistema de archivos, llamado comúnmente como File System o FS, determina la organización de los datos en un soporte de almacenamiento, y por lo tanto como gestiona y organiza el sistema operativo los ficheros.

En GNU/Linux, como todos los sistemas operativos basados en Unix, es otro sistema orientado en ficheros. Todo -o casi todo- se representa en ficheros, tanto los datos -imágenes de las últimas vacaciones, la tesis de la carrera, etc-, como los periféricos -terminales, ratones, teclados, tarjeta de sonido, etc- o incluso los medios de comunicación -sockets, tuberías nombradas, etc-. Así que en GNU/Linux siempre acabarás tocando un fichero para modificar una configuración -o no-.

Además, el sistema de ficheros en GNU/Linux es jerárquico y describe un árbol de directorios y subdirectorios que recaen a partir de algo que llamamos raíz o root.

Rutas relativas y rutas absolutas

Una ruta permite describir la ubicación de un directorio o un fichero dentro del sistema de archivos. Generalmente si dicha ruta empieza con / significará que la ruta es absoluta, porque empieza desde el root directory -que no se debe de confundir con el directorio del administrador root /root-. Por ejemplo, una ruta absoluta sería:

/home/voidnull/Documentos/GPL/GestionDeFicheros.pdf

En una ruta absoluta encontraremos:

  • Que empieza desde la raíz y por lo tanto empieza por /
  • describe todos los directorios que hay que cruzar para acceder al fichero o directorio deseado
  • no contiene ni . ni ...

A diferencia de las rutas absolutas, las rutas relativas parten del directorio activo en el que el sistema -o el shell- se encuentra actualmente. Desde las rutas relativas se pueden acceder a directorios y ficheros sin tener que teclear la ruta absoluta. Para ello es necesario utilizar dos entradas muy particulares: uno de ellos es el punto ., que representa el directorio activo -en el que te encuentras- y luego los dos puntos .. que representa el directorio del nivel superior.

En una ruta relativa encontraremos:

  • Describe una ruta relativa a una posición determinada en la estructura, en general (pero no siempre) desde la posición actual.
  • Describe en principio la ruta más corta para ir a un punto a otro.
  • Puede contener puntos o dos puntos.

Aún así, los tres puntos descritos anteriormente, no son obligatorios.

La virgulilla

En bash tenemos un carácter que posiblemente nadie sepa como se llama y lo acabamos llamando «el chuchurrillo de la tecla del número 4». Este carácter, ~ se llama virgulilla y en sistemas basados en Unix es un alias del directorio personal. En rutas relativas se puede utilizar la virgulilla, pero ésta no debe ir procedida por carácter alguno. Por ejemplo, si nos queremos desplazar a un directorio dentro de nuestro directorio personal:

$ cd ~/Documents

Comandos básicos para la gestión de directorios

Para desplazarnos por directorios deberemos de utilizar el comando cd (change directory). Otro comando interesante, es pwd (print working directory) que permite saber donde nos encontramos en ese momento dentro del árbol de directorios.

void@null:~$ pwd
/home/t3rr0rz0n3
void@null:~$ cd Documents/
void@null:~/Documents$ pwd
/home/t3rr0rz0n3/Documents
void@null:~/Documents$

Si nos encontramos en /home/t3rr0rz0n3/MiCarpeta y ejecutamos un ls -la para ver los ficheros que hay dentro de ese directorio veremos lo siguiente:

void@null:~/MiCarpeta$ ls -la
total 8
drwxrwxr-x 2 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 19:33 .
drwxr-xr-x 33 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 19:33 ..

Si nos fijamos, veremos que hay dos directorios, el punto y el doble punto. Si ejecutamos cd . veremos que no nos habremos movido del directorio, ya que ese punto significa moverse al directorio activo -como hemos explicado antes-. Y si ejecutamos cd .. veremos que en nuestro prompt habrá cambiado de void@null:~/MiCarpeta por void@null:~$.

Listar archivos y directorios

Otro comando importante es ls, este comando permite listar el contenido de un directorio en líneas o columnas. Soporta varios parámetros de los cuales los más importantes son:

  • ls -l: Lista los directorios y ficheros con información detallada.
  • ls -a: Lista los directorios y ficheros y además los ficheros ocultos -los que tienen un punto delante-.
  • ls -R: Si el comando detecta subdirectorios, entra en ellos de manera recursiva.
  • ls -t: Lista los ficheros y directorios ordenados por fecha (de más reciente a más antigua).

Cuando listamos un directorio con el parámetro -l podemos observar lo siguiente:

-rw-rw-r– 1 t3rr0rz0n3 t3rr0rz0n3 4 ju 10 19:42 fichero
  • -rw-rw-r--: El primer símbolo representa el tipo de archivo (-: ordinario, d: directorio, l: vínculo simbólico…) los otros, por bloques de tres son los permisos del usuario (rw-), el grupo (rw-) y otros (r--). Si quieres saber más de permisos, puedes ver este artículo: Permisos especiales: Suid, Sgid y Sticky Bit.
  • 1: Un contador de vínculos.
  • t3rr0rz0n3: El propietario del archivo, que suele ser su creador.
  • t3rr0rz0n3: El grupo al cual pertenece el archivo.
  • 4: Tamaño en bytes del fichero.
  • ju 10 19:42: Fecha de la última modificación.
  • fichero: Nombre del archivo.

Gestionar ficheros y directorios

Para crear ficheros vacíos podemos utilizar diferentes comandos, pero el más conocido es el fichero touch. Este comando se utiliza a continuación del nombre del fichero que queremos crear sin contenido:

$ touch fichero

La creación de archivos vacíos no es el principal uso de touch. Si vuelve a ejecutar el mismo comando en el archivo, observará que la fecha de modificación ha cambiado. En el manual de touch podremos ver que es posible modificar completamente la fecha y la hora de un archivo. Esto puede ser útil para forzar las copias de seguridad incrementales de archivos.

Para crear directorios, utilizaremos el comando mkdir (make a directory) permite crear directorios o varios directorios o incluso una estructura completa. Por defecto solo se puede crear un directorio, en el caso de querer crear subdirectorios es necesario utilizar el parámetro -p.

void@null:~/MiCarpeta$ mkdir carpeta/subcarmeta
mkdir: no se ha podido crear el directorio «carpeta/subcarmeta»: El fichero o directorio no existe
void@null:~/MiCarpeta$ mkdir -p carpeta/subcarmeta
void@null:~/MiCarpeta$ ls -lR
.:
total 8
drwxrwxr-x 3 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 20:04 carpeta
-rw-rw-r– 1 t3rr0rz0n3 t3rr0rz0n3 4 de ju 10 19:54 fichero
./carpeta:
total 4
drwxrwxr-x 2 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 20:04 subcarmeta

El comando rmdir (remove directory) su primer uno o varios directorios. No puede suprimir una estructura. Si el directorio que intentamos eliminar contiene ficheros o directorios aparecerá un error.

$ rmdir carpeta/
rmdir: no se ha podido eliminar ‘carpeta/’: El directorio no está vacío

También podemos borrar un directorio con rm -rf aunque deberemos de ir con cuidado con este comando, porque con el parámetro -f estamos forzando a borrar el directorio aunque contenga contenido.

El comando cp (copy) copia uno o varios archivos en otro archivo o en un directorio. Las rutas pueden ser absolutas o relativas y el comando admite diferentes opciones interesantes:

  • -i: Pide confirmación para copiar el archivo.
  • -r: Recursivo, copia un directorio y todo su contenido.
  • -p: Se preservan los permisos y fechas.
  • -f: Forzar la copia.
  • -a: Copia el archivo al destino lo más idéntico posible al origen.

El comando mv (move) permite mover, volver a nombrar un archivo las dos cosas a la vez. Funciona como el comando cp.

void@null:~/MiCarpeta$ ls
carpeta fichero
void@null:~/MiCarpeta$ mv fichero carpeta/renombrado
void@null:~/MiCarpeta$ ls -lR
.:
total 4
drwxrwxr-x 3 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 20:16 carpeta
./carpeta:
total 8
-rw-rw-r– 1 t3rr0rz0n3 t3rr0rz0n3 4 de ju 10 19:54 renombrado
drwxrwxr-x 2 t3rr0rz0n3 t3rr0rz0n3 4096 de ju 10 20:04 subcarmeta

Si nos fijamos, movemos un fichero dentro de la carpeta llamada carpeta y aprovechamos para cambiar el nombre del fichero por renombrado.

Ya lo hemos mencionado antes, pero existe también el comando rm (remove) que permite suprimir uno o varios archivos, y si es preciso, una estructura completa según diferentes opciones.

Las opciones más habituales:

  • -i: El comando requiere una confirmación para cada uno de los archivos que se desea suprimir.
  • -r: El parámetro siguiente que se espera es un directorio. En este caso, la supresión es recursiva.
  • -f: Forzar la supresión.
Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación