Carpetas (directorios) en Linux

Cómo moverse entre carpetas en terminal


GNU/Linux tiene su propia distribución de ficheros y carpetas que, para usuarios que provengan de Windows, puede ser confusa, ya que es bastante diferente. En Linux hay una máxima que se sigue como filosofía: todo son ficheros: los «accesos directos», los dispositivos físicos como el ratón o el teclado, los discos duros, las carpetas, e incluso y obviamente, los ficheros.

Mientras que en Windows, una ruta normal de carpetas podría ser C:\Users\Manz, una ruta equivalente en un sistema operativo Linux sería /home/manz:

Comparativa de carpetas (directorios) en Windows y Linux

En Linux, los nombres de ficheros son sensibles a mayúsculas y minúsculas, es decir, puede coexistir un fichero llamado gato y otro Gato en la misma carpeta, puesto que son ficheros diferentes. Sin embargo, en un sistema Windows, serían el mismo fichero.

¿En qué carpeta estoy?

El comando pwd

En una terminal de Linux, normalmente a la izquierda se nos muestra la carpeta donde nos encontramos (o parte de ella). Sin embargo, dependiendo de la configuración de nuestra shell, es posible que no aparezca. Si queremos saber en que carpeta nos encontramos, podemos utilizar el comando pwd (print work directory).

El comando tree

Si no tenemos muy clara la estructura de carpetas donde estamos, podemos utilizar el comando tree, el cuál nos muestra un árbol de carpetas, esquematizado. Por ejemplo, escribiendo tree /var/log nos mostrará algo parecido a esto:

$ tree /var/log

/var/log
|-- alternatives.log
|-- apt
|   |-- eipp.log.xz
|   |-- history.log
|   `-- term.log
|-- btmp
|-- dpkg.log
|-- faillog
|-- lastlog
`-- wtmp

1 directory, 9 files

De esta forma podemos ver «pseudo-gráficamente» la estructura de carpetas. Ten en cuenta que el comando tree no viene instalado en el sistema, y hay que instalarlo previamente con un sudo apt install tree.

El comando et

Existe una mejora que es una especie de mezcla entre tree y du, llamada et (erdtree). Este comando permite mostrar en forma de árbol la estructura de carpeta, pudiendo personalizar como queremos mostrarlo:

$ et
twitch-cinema (566.811 KiB)
├─ postcss.config.js (65 B)
├─ vite.config.js (405 B)
├─ package.json (882 B)
├─ src (83.932 KiB)
│  ├─ index.html (618 B)
│  ├─ index.js (835 B)
│  ├─ index.css (1.085 KiB)
│  ├─ assets (6.375 KiB)
│  ├─ modules (35.832 KiB)
│  └─ components (39.221 KiB)
├─ pnpm-lock.yaml (102.235 KiB)
└─ public (379.323 KiB)
   ├─ images (87.921 KiB)
   └─ fonts (291.402 KiB)

Por aquí tienes el github de erdtree, donde puedes encontrar la instalación y el formato de configuración para personalizarlo. Por ejemplo, creando un fichero en ~/.erdtreerc con el siguiente contenido:

--level 2
--icons
--scale 3

-s size

Listar ficheros

El comando ls

Para ver los ficheros y carpetas del directorio actual, basta con utilizar el comando ls (LiSt files). Esto mostrará una lista en horizontal con todos los ficheros y carpetas encontradas. También podemos especificar la ruta que queremos listar por parámetro, por ejemplo: ls /home. Por ejemplo:

$ ls /

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

En algunos casos, puede que el ls devuelva los ficheros sin resaltado de sintaxis de color. Puedes probar con ls --color para ver si muestra los ficheros con colores. Las distribuciones de Linux, suelen crear un alias en el fichero ~/.bashrc o ~/.zshrc para que cuando se escriba ls, realmente se haga un ls --color.

Existen algunos parámetros interesantes para mostrar más información al listar ficheros y carpetas, como por ejemplo ls -lh, donde la l usa el formato ancho (más información) y la h muestra «en humano» el tamaño de los ficheros (usando unidades para que sea más fácil).

Aquí vemos algunos de los más interesantes:

Parámetros Descripción
-l (long) Usa el formato ancho para mostrar datos adicionales (tamaño, permisos, etc...)
-a (all) Muestra también ficheros ocultos (que empiezan por punto)
--color Activa colores al mostrar los ficheros.
-h (human) Muestra el tamaño de los archivos con la unidad K, M o G.
-S (size) Ordena ficheros por tamaño, el más pesado primero.
-t (time) Ordena ficheros por fecha de modificación, el más reciente primero.
-r (reverse) Invierte el orden de los ficheros.

Observa que para indicar varios parámetros, en lugar de escribir, por ejemplo, ls -l -h -S puedes contraer los parámetros y escribir ls -lhS.

El comando exa

Existe una mejora del ls, bastante interesante, que utiliza resaltado de sintaxis para que sea más sencillo identificar los permisos rápidamente. Se llama exa y está desarrollada en Rust. Podemos instalar esta herramienta fácilmente si disponemos de Rust en nuestro sistema, utilizando su gestor de paquetes. Simplemente escribimos cargo install exa y lo instalaremos.

La salida del formato largo de exa es el siguiente:

exa: ls mejorado con sintaxis de color

Aunque no es un reemplazo 100% idéntico en parámetros, puedes crear un alias de ls para que ejecute exa en su lugar. Como curiosidad y para una mejor identificación de ficheros, con el parámetro exa --icons puede mostrar iconos de los tipos de ficheros a la izquierda.

El comando lsd

Existe otra alternativa a ls llamada lsd y muy parecida a exa. Puedes descargarla e instalarla haciendo lo siguiente:

sudo apt install wget
wget https://github.com/Peltoche/lsd/releases/download/0.17.0/lsd_0.17.0_amd64.deb
sudo dpkg -i lsd_0.17.0_amd64.deb

También tiene resaltado de sintaxis con colores, soporte de iconos, junto a otras características, por lo que también es una buena opción.

Cambiar de carpetas

El comando cd

Para movernos entre carpetas, utilizaremos el comando cd (change directory) seguido del nombre de la carpeta (movimiento relativo) o ruta completa (movimiento absoluto) a la que queremos acceder. Ten en cuenta que al escribir el nombre de la carpeta o ruta, puedes pulsar TAB y el sistema te sugiere las opciones que encajen con lo que has escrito (o autocompleta si solo hay una opción), de modo que no tendrás que escribirlo por completo.

Existen algunas palabras clave para referirnos a rutas específicas:

Símbolo Ejemplo Descripción
.. cd .. «Sale» de la carpeta actual y se mueve a la carpeta padre.
. Hace referencia a la carpeta actual. Útil como abreviatura.
~ cd ~ Accede a la carpeta personal del usuario. Igual que escribir cd sin parámetros.

De la misma forma, se pueden hacer combinaciones como ls ~/.oh-my-fish/, que es lo mismo que ls /home/manz/.oh-my-fish/ (si soy el usuario manz) o ls ../etc sería equivalente a ls /etc si estoy en la carpeta /home.

El comando pushd y popd

Otra forma de trabajar entre carpetas, es utilizando los comandos pushd (push directory) y popd (pop directory). Ambos funcionan trabajando con una estructura de pila donde podemos hacer push (para meter una carpeta) o pop (para sacar una carpeta). De esta forma, si sabemos que más adelante necesitaremos volver a acceder a una ruta compleja, podemos hacer lo siguiente:

$ pushd /etc/nginx          # Guarda la ruta /etc/nginx en la pila
$ cd /home/manz             # Cambiamos a otra ruta
...                       # Trabajamos en esa ruta
$ popd                      # Vuelve a la ruta guardada previamente en la pila

Podemos ejecutar varias veces el comando pushd e ir apilando varias rutas o carpetas diferentes. También tener en cuenta que se puede utilizar . como parámetro de pushd para guardar la ruta actual en la que nos encontramos de forma rápida.

El comando j (autojump)

Si acostumbras a trabajar en una terminal, es muy común perder bastante tiempo escribiendo los nombres de las carpetas o pensando cuál era la ruta, en la que estabas, si no estás muy familiarizado con ella.

El comando autojump es una mejora interesante del cd, ya que se basa en saltar a la carpeta «frecuente» que más se aproxime al parámetro escrito; esto es, la ruta o carpeta más frecuente y más reciente. Veamoslo con un ejemplo:

$ cd /etc/nginx
$ ls -lh
$ cd /home/manz
$ j nginx
/etc/nginx

En el ejemplo anterior, al escribir j nginx, el comando autojump accede a la ruta /etc/nginx, porque es la carpeta más reciente a la que hemos accedido frecuentemente que encaja con el texto escrito por parámetro: nginx. El comando nos muestra por pantalla la carpeta coincidente, y cambia a ella automáticamente.

Nota: El comando j es un alias de autojump y no viene instalado por defecto en el sistema. Para instalarlo en Debian, basta con hacer un sudo apt install autojump y añadir la línea source /usr/share/autojump/autojump.bash (la extensión depende de la shell que usemos). Existen otras mejoras similares como z, v o fasd.

Carpetas del sistema

Linux tiene una estructura de carpetas bien definida, donde cada carpeta tiene una finalidad muy concreta, y en ella se guardan los archivos correspondientes. Por otra parte, mientras que en Windows la ruta raíz (la primera carpeta del sistema) es C:\, en Linux es /, puesto que todo parte de esa ruta raíz.

Desde esa ruta / nos podemos encontrar varias carpetas, cada una con una finalidad concreta:

Carpeta Descripción
/ Carpeta raíz del sistema. Equivalente a C:\ en Windows.
/bin Binarios (comandos ejecutables) principales.
/boot Archivos de arranque. Equivale a C:\bootmgr en Windows.
/dev Dispositivos físicos de hardware.
/etc Archivos de configuración. Equivale al registro de Windows.
/home Carpetas del usuario. Equivale a C:\Users en Windows.
/lib Bibliotecas del sistema. Equivale a C:\Windows\System32.
/lost+found Archivos corruptos o recuperados.
/media Medios extraíbles. Generalmente, carpetas de CD/DVD, usb, unidades extraíbles...
/mnt Montaje temporal reservado para el administrador de sistemas.
/opt Aplicaciones o paquetes adicionales (opcionales).
/proc Procesos internos del sistema.
/root Carpeta personal del administrador.
/run Información reciente.
/sbin Archivos binarios reservados para root. Sólo accesible si tienes privilegios.
/srv Datos específicos para servicios.
/sys Nueva versión o evolución de /proc/
/tmp Archivos temporales. Muchas veces, eliminados al reiniciar el sistema.
/usr Datos de paquetes instalados. Equivale a C:\Archivos de Programa en Windows.
/var Logs, cache, variables, etc...

Más adelante, en otro artículo, veremos como realizar otras operaciones de manipulación como copiar, borrar, mover y crear carpetas o ficheros.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev