Con el entorno ya montado en la lección anterior —Bash 5.x, tu ~/veloz-ops creado y el PATH configurado— ha llegado el momento de moverte por el sistema con soltura. Navegar por la línea de comandos no es un trámite: es la habilidad que sostiene todo lo demás. Cuando en el Módulo 9 tu script tenga que localizar /var/log/veloz/acceso.log desde cualquier directorio, o cuando a las tres de la mañana tengas que averiguar qué está llenando el disco de srv-veloz-01, todo se reducirá a moverte y mirar con precisión. En esta lección aprenderás la anatomía de un comando, el mapa del sistema de ficheros de Linux y las herramientas para recorrerlo e inspeccionarlo.

Contenido

  1. Anatomía del prompt y de un comando
  2. El árbol de directorios de Linux
  3. Rutas absolutas y relativas
  4. pwd: dónde estoy
  5. cd: moverse
  6. ls: mirar
  7. Interpretar la salida de ls -l
  8. tree: ver la estructura de un vistazo
  9. pushd y popd: pila de directorios
  10. Inspeccionar sin abrir: file, stat, du y df
  11. Recorrido guiado por la infraestructura de Veloz Envíos

  1. Anatomía del prompt y de un comando

1.1 El prompt

El prompt es la línea que Bash imprime esperando tus órdenes. Con la configuración que dejamos en la lección anterior tiene esta forma:

joan@srv-veloz-01:~/veloz-ops$

Cada pieza informa de algo:

Parte Significado
joan Usuario con el que trabajas
@ Separador
srv-veloz-01 Máquina en la que estás
: Separador
~/veloz-ops Directorio actual (~ es tu carpeta personal)
$ Usuario normal. Si fueras root, aquí verías #

Ese último carácter merece atención: # significa que tienes permisos totales y que un error puede ser irreversible. Acostúmbrate a mirarlo antes de ejecutar cualquier cosa destructiva.

1.2 Las partes de un comando

Un comando en Bash se descompone así:

ls -l -h /var/log/veloz
comando  opciones      argumento
  ls     -l -h    /var/log/veloz
  • Comando: el programa a ejecutar (ls).
  • Opciones (o flags): modifican el comportamiento. Empiezan por guion.
  • Argumentos: aquello sobre lo que actúa el comando.

Las opciones tienen dos formatos que conviene distinguir:

Formato Ejemplo Características
Corto -l, -h Una letra. Se pueden agrupar: -lh equivale a -l -h
Largo --human-readable Palabra completa, más legible. No se agrupan

Estas cuatro formas son equivalentes:

ls -l -h /var/log/veloz
ls -lh /var/log/veloz
ls --format=long --human-readable /var/log/veloz
ls -l --human-readable /var/log/veloz

Regla práctica: usa opciones cortas cuando teclees de forma interactiva y largas cuando escribas scripts. En un script, --human-readable se explica solo; -h obliga a consultar el manual (y en otros comandos -h significa "ayuda", lo que induce a error).

Cuando una opción larga lleva valor, se escribe con = o con espacio:

ls --sort=time /var/log/veloz
ls --sort time /var/log/veloz

Y un detalle que salva situaciones raras: -- marca el final de las opciones. Si algún día tienes un fichero llamado -informe.txt, ls -- -informe.txt lo trata como argumento y no como opción.

  1. El árbol de directorios de Linux

En Linux no hay letras de unidad. Todo cuelga de un único origen: la raíz, /. Los discos adicionales, los USB o las particiones de red se "montan" en algún punto de ese árbol.

graph TD
    R["/"] --> etc["/etc<br/>configuración"]
    R --> var["/var<br/>datos variables"]
    R --> srv["/srv<br/>datos de servicios"]
    R --> home["/home<br/>usuarios"]
    R --> tmp["/tmp<br/>temporales"]
    R --> usr["/usr<br/>programas"]
    var --> log["/var/log"]
    log --> veloz["/var/log/veloz<br/>acceso.log, app.log"]
    srv --> sv["/srv/veloz/datos<br/>envios.csv"]
    home --> joan["/home/joan (~)"]
    joan --> ops["~/veloz-ops<br/>bin lib etc logs"]
    usr --> bin["/usr/bin<br/>ls, grep, date..."]

Los directorios que usarás a diario:

Directorio Qué contiene Ejemplo en Veloz Envíos
/ La raíz de todo
/etc Ficheros de configuración del sistema /etc/nginx/, /etc/passwd
/var Datos que varían durante la operación Logs, colas, cachés
/var/log Registros del sistema y de las aplicaciones /var/log/veloz/acceso.log
/srv Datos servidos por los servicios de la máquina /srv/veloz/datos/envios.csv
/home Carpetas personales de los usuarios /home/joan, abreviado ~
/tmp Temporales; se borra al reiniciar Ficheros intermedios de scripts
/usr/bin Programas del sistema para todos los usuarios ls, grep, date, awk
/usr/local/bin Programas instalados manualmente por el administrador Herramientas propias
/opt Software de terceros autocontenido Agentes de monitorización
/root Carpeta personal del superusuario
/proc Sistema de ficheros virtual con información del kernel /proc/cpuinfo, /proc/meminfo
/dev Dispositivos representados como ficheros /dev/null, /dev/sda

Esta organización no es arbitraria: la define el FHS (Filesystem Hierarchy Standard). Conocerla te permite adivinar dónde están las cosas en cualquier servidor Linux, aunque no lo hayas visto nunca. Si te dicen "revisa los logs de la aplicación", ya sabes que empezarás mirando en /var/log.

  1. Rutas absolutas y relativas

Una ruta es la dirección de un fichero o directorio. Hay dos maneras de expresarla.

  • Ruta absoluta: empieza por / y describe el camino completo desde la raíz. Es inequívoca, funciona desde cualquier sitio.
    /var/log/veloz/acceso.log
    
  • Ruta relativa: no empieza por / y se interpreta a partir del directorio actual.
    veloz/acceso.log     (si estás en /var/log)
    

Bash entiende además cuatro atajos fundamentales:

Símbolo Significado Ejemplo
. El directorio actual ./informe.sh
.. El directorio padre cd ..
~ Tu carpeta personal (/home/joan) cd ~/veloz-ops
- El directorio anterior (donde estabas antes) cd -

Ejemplos con el directorio actual en /var/log/veloz:

Escribes Se resuelve como
acceso.log /var/log/veloz/acceso.log
./acceso.log /var/log/veloz/acceso.log
../syslog /var/log/syslog
../../log/veloz /var/log/veloz
~/veloz-ops/bin /home/joan/veloz-ops/bin
/srv/veloz/datos /srv/veloz/datos

¿Cuándo usar cada una? La regla profesional es clara:

  • En scripts, rutas absolutas. Un script de veloz-ops lanzado por cron puede arrancar desde cualquier directorio; si usa rutas relativas, fallará de forma imprevisible.
  • De forma interactiva, relativas. Se teclea mucho menos.

El atajo - merece una mención especial porque ahorra muchísimo tiempo:

cd /var/log/veloz
cd /srv/veloz/datos
cd -
/var/log/veloz

cd - te devuelve al directorio anterior y además imprime a dónde ha ido. Alternar entre dos ubicaciones lejanas se convierte en una sola tecla.

  1. pwd: dónde estoy

pwd (print working directory) responde a la pregunta más básica.

pwd
/home/joan/veloz-ops

Parece innecesario si el prompt ya lo muestra, pero no lo es: hay prompts que solo enseñan el nombre corto del directorio (\W en lugar de \w), y en un script no hay prompt en absoluto.

Tiene un matiz interesante con los enlaces simbólicos:

pwd -P

-P (physical) muestra la ruta real, resolviendo los enlaces simbólicos. Por defecto, pwd muestra la ruta lógica, es decir, el camino por el que llegaste. Si /srv/veloz/datos fuera en realidad un enlace a /mnt/datos-veloz, pwd diría lo primero y pwd -P lo segundo. En diagnósticos de espacio en disco, esa diferencia importa.

  1. cd: moverse

cd (change directory) cambia el directorio actual. Sus formas más útiles:

cd /var/log/veloz      # ruta absoluta
cd veloz               # ruta relativa (desde /var/log)
cd ..                  # subir un nivel
cd ../..               # subir dos niveles
cd ~                   # ir a tu carpeta personal
cd                     # idéntico a 'cd ~'
cd -                   # volver al directorio anterior
cd ~/veloz-ops/bin     # combinando ~ y ruta relativa

Una secuencia realista de trabajo en srv-veloz-01:

cd /var/log/veloz
pwd
cd ../..
pwd
cd -
pwd
/var/log/veloz
/var
/var/log/veloz

Fíjate en el detalle: cd ../.. desde /var/log/veloz sube dos niveles y aterriza en /var, no en la raíz. Cada .. retrocede exactamente un escalón.

Un apunte técnico importante que se entenderá del todo en la próxima lección: cd no es un programa, es un builtin de Bash. Tiene que serlo. Si fuera un ejecutable externo, se lanzaría como proceso hijo, cambiaría su directorio y moriría, dejando el tuyo intacto. Por eso man cd no encuentra nada y hay que usar help cd; lo veremos en 01-05.

Autocompletado, que aquí es imprescindible: escribe cd /var/log/vel y pulsa Tab. Bash completa a /var/log/veloz/. Si hay varias opciones posibles, pulsa Tab dos veces para listarlas. Los atajos de teclado completos se ven en 02-06, pero este úsalo desde hoy: reduce errores de tecleo drásticamente.

  1. ls: mirar

ls lista el contenido de un directorio. Es probablemente el comando que más veces ejecutarás en tu vida.

ls
bin  etc  lib  logs

Sin argumentos, lista el directorio actual. Puedes indicarle otro:

ls /var/log/veloz
acceso.log  acceso.log.1  app.log  app.log.1  veloz-api.log

6.1 Las opciones que de verdad usarás

Opción Nombre largo Qué hace
-l --format=long Formato largo: permisos, propietario, tamaño, fecha
-a --all Muestra también los ficheros ocultos (los que empiezan por .)
-A --almost-all Como -a pero sin . ni ..
-h --human-readable Tamaños en K, M, G en lugar de bytes (requiere -l)
-t --sort=time Ordena por fecha de modificación, más reciente primero
-r --reverse Invierte el orden
-S --sort=size Ordena por tamaño, mayor primero
-R --recursive Baja por todos los subdirectorios
-d --directory Muestra el directorio en sí, no su contenido
-i --inode Muestra el número de inodo
-F --classify Añade un sufijo según el tipo (/ directorio, * ejecutable, @ enlace)

Las combinaciones que se convertirán en reflejo:

ls -lh /var/log/veloz
total 47M
-rw-r--r-- 1 www-data adm   28M ago  3 10:14 acceso.log
-rw-r--r-- 1 www-data adm  9,4M ago  2 23:59 acceso.log.1
-rw-r--r-- 1 veloz    veloz 6,2M ago  3 10:15 app.log
-rw-r--r-- 1 veloz    veloz 2,1M ago  2 23:59 app.log.1
-rw-r--r-- 1 veloz    veloz 1,3M ago  3 09:02 veloz-api.log
ls -lt /var/log/veloz

Ordenado por fecha: el primero es el que se ha modificado más recientemente. Este es el comando estrella cuando algo acaba de fallar: te dice inmediatamente qué log se está escribiendo ahora mismo.

ls -lhS /var/log/veloz

Ordenado por tamaño de mayor a menor: el comando estrella cuando el disco se llena.

ls -la ~
total 68
drwxr-xr-x 8 joan joan 4096 ago  3 09:30 .
drwxr-xr-x 3 root root 4096 jul 12 08:00 ..
-rw------- 1 joan joan 2814 ago  3 10:02 .bash_history
-rw-r--r-- 1 joan joan 3841 ago  3 09:28 .bashrc
-rw-r--r-- 1 joan joan  807 jul 12 08:00 .profile
drwx------ 2 joan joan 4096 jul 12 08:05 .ssh
drwxrwxr-x 6 joan joan 4096 ago  3 09:30 veloz-ops

Aquí aparece un concepto clave: en Linux, un fichero está oculto simplemente porque su nombre empieza por punto. No hay ningún atributo especial. Por eso ~/.bashrc no se ve con un ls normal. Los directorios . y .. que aparecen son el propio directorio y su padre.

  1. Interpretar la salida de ls -l

Esta es una de esas habilidades que se usan a diario durante toda una carrera profesional. Tomemos una línea:

-rw-r--r-- 1 veloz veloz 6291456 ago  3 10:15 app.log

Se descompone en siete campos:

# Valor Significado
1 -rw-r--r-- Tipo de fichero y permisos
2 1 Número de enlaces duros
3 veloz Usuario propietario
4 veloz Grupo propietario
5 6291456 Tamaño en bytes (con -h, 6,0M)
6 ago 3 10:15 Fecha y hora de última modificación
7 app.log Nombre

El primer campo se lee en cuatro bloques:

-        rw-        r--        r--
tipo   propietario  grupo     otros

El primer carácter indica el tipo:

Carácter Tipo
- Fichero regular
d Directorio
l Enlace simbólico
c Dispositivo de caracteres (p. ej. /dev/null)
b Dispositivo de bloques (p. ej. un disco)
p Tubería con nombre (FIFO)
s Socket

Los tres bloques siguientes son permisos: r leer, w escribir, x ejecutar; un guion significa que ese permiso no está concedido. Así, -rw-r--r-- se lee: fichero regular, el propietario puede leer y escribir, el grupo solo leer, el resto solo leer.

Este análisis explica cosas prácticas de inmediato. Si intentas escribir en /var/log/veloz/app.log siendo joan y el fichero es de veloz con permisos -rw-r--r--, obtendrás Permiso denegado. Y si un script tuyo no arranca con ./script.sh, lo primero que mirarás es si tiene la x. Los permisos, cómo cambiarlos y la notación octal se estudian en profundidad en la lección 02-03; aquí solo necesitas saber leerlos.

Un caso especial que verás mucho en un servidor:

ls -l /var/log/veloz/actual.log
lrwxrwxrwx 1 root root 8 ago  3 00:00 /var/log/veloz/actual.log -> app.log

La l inicial y la flecha -> indican un enlace simbólico: un fichero que apunta a otro. Los permisos rwxrwxrwx de un enlace son siempre así y no significan nada; los que mandan son los del destino.

  1. tree: ver la estructura de un vistazo

tree dibuja la jerarquía de directorios. No viene instalado por defecto en muchos sistemas:

sudo apt install tree      # Debian/Ubuntu
sudo dnf install tree      # Fedora/RHEL
tree ~/veloz-ops
/home/joan/veloz-ops
├── bin
├── etc
├── lib
└── logs

5 directories, 0 files

Opciones útiles:

Opción Efecto
-L n Limita la profundidad a n niveles
-d Solo directorios
-a Incluye ocultos
-h Muestra tamaños legibles
-f Muestra la ruta completa de cada elemento
tree -L 2 -d /var/log
/var/log
├── apt
├── nginx
├── unattended-upgrades
└── veloz

4 directories

Limitar la profundidad con -L es casi obligatorio en directorios grandes: sin ello, tree / puede escupir cientos de miles de líneas.

Si tree no está disponible y no puedes instalarlo (algo habitual en servidores de producción o contenedores), la alternativa es ls -R, que veremos en el recorrido final, o find combinado con formato, que se estudia en 05-01.

  1. pushd y popd: pila de directorios

cd - alterna entre dos directorios, pero a veces necesitas manejar tres o cuatro. Para eso Bash mantiene una pila de directorios.

  • pushd RUTA: apila el directorio actual y se mueve a RUTA.
  • popd: desapila y vuelve al directorio de la cima.
  • dirs -v: muestra la pila numerada.
cd ~/veloz-ops
pushd /var/log/veloz
/var/log/veloz ~/veloz-ops
pushd /srv/veloz/datos
/srv/veloz/datos /var/log/veloz ~/veloz-ops
dirs -v
 0  /srv/veloz/datos
 1  /var/log/veloz
 2  ~/veloz-ops
popd
pwd
/var/log/veloz ~/veloz-ops
/var/log/veloz
popd
pwd
~/veloz-ops
/home/joan/veloz-ops

Cada pushd imprime la pila completa, con la posición actual a la izquierda. Es la herramienta ideal cuando estás diagnosticando una incidencia y necesitas saltar entre logs, datos y scripts sin perder el hilo. También puedes saltar directamente a una posición: pushd +2 rota la pila hasta el elemento número 2.

  1. Inspeccionar sin abrir: file, stat, du y df

Antes de abrir un fichero conviene saber qué es y cuánto ocupa. Cuatro comandos cubren el 90 % de los casos.

10.1 file: qué tipo de fichero es

Linux no se fía de la extensión: file examina el contenido para determinar el tipo.

file /var/log/veloz/app.log /srv/veloz/datos/envios.csv /usr/bin/ls ~/veloz-ops
/var/log/veloz/app.log:      ASCII text
/srv/veloz/datos/envios.csv: CSV text
/usr/bin/ls:                 ELF 64-bit LSB pie executable, x86-64, dynamically linked
/home/joan/veloz-ops:        directory

Su utilidad práctica es enorme: evita que abras un binario de 2 GB con un editor de texto y bloquees la terminal. Antes de hacer cat a un fichero desconocido, pásale file.

Un uso muy pertinente para Veloz Envíos: detectar ficheros comprimidos con extensión engañosa.

file /var/log/veloz/acceso.log.1
/var/log/veloz/acceso.log.1: gzip compressed data, from Unix

Aunque no lleve .gz, está comprimido, y habría que leerlo con zcat en lugar de cat.

10.2 stat: los metadatos completos

stat /var/log/veloz/app.log
  Fichero: /var/log/veloz/app.log
  Tamaño: 6291456    Bloques: 12288      Bloque E/S: 4096   fichero regular
Dispositivo: 8,1  Nodo-i: 262147   Enlaces: 1
Acceso: (0644/-rw-r--r--)  Uid: ( 1001/  veloz)   Gid: ( 1001/  veloz)
     Acceso: 2026-08-03 10:15:22.000000000 +0200
Modificación: 2026-08-03 10:15:22.000000000 +0200
     Cambio: 2026-08-03 10:15:22.000000000 +0200
   Creación: 2026-07-01 08:00:00.000000000 +0200

stat da lo mismo que ls -l pero con precisión total, incluidas las tres marcas de tiempo que Linux mantiene:

Marca Nombre Cambia cuando...
atime Acceso Se lee el contenido
mtime Modificación Se cambia el contenido
ctime Cambio Cambian el contenido o los metadatos (permisos, propietario)

Confundir mtime con ctime es un error habitual en auditorías: si alguien cambió los permisos de un fichero pero no su contenido, mtime sigue igual y solo ctime lo delata.

stat también admite formatos personalizados, muy útiles para scripts:

stat -c '%n tiene %s bytes, modificado el %y' /var/log/veloz/app.log
/var/log/veloz/app.log tiene 6291456 bytes, modificado el 2026-08-03 10:15:22.000000000 +0200

Donde %n es el nombre, %s el tamaño y %y la fecha de modificación. En el Módulo 9 usaremos esta forma para comprobar si un log se ha actualizado recientemente.

10.3 du: cuánto ocupa un directorio

du (disk usage) suma el espacio ocupado.

du -sh /var/log/veloz
47M	/var/log/veloz
  • -s (summarize): un único total en lugar del detalle de cada subdirectorio.
  • -h (human-readable): en K, M, G.

Para ver el reparto por subdirectorio, ordenado de mayor a menor:

du -h --max-depth=1 /var/log | sort -h -r | head -5
312M	/var/log
47M	/var/log/veloz
28M	/var/log/nginx
12M	/var/log/journal
4,1M	/var/log/apt

Este comando es la respuesta estándar a "se está llenando el disco": te dice en qué subdirectorio está el problema, y repitiéndolo un nivel más abajo llegas al culpable en pocos pasos. La tubería | y sort se estudian en el Módulo 2; aquí lo usamos como receta.

10.4 df: cuánto queda en el disco

df (disk free) informa de las particiones montadas y su ocupación.

df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sda1         100G    72G   23G  76% /
/dev/sdb1         500G   410G   65G  87% /srv
tmpfs             3,9G   1,2M  3,9G   1% /run

La diferencia entre ambos comandos suele confundir:

Comando Punto de vista Pregunta que responde
du Desde los ficheros hacia arriba "¿Cuánto ocupa esta carpeta?"
df Desde el sistema de ficheros "¿Cuánto queda en el disco?"

Y una anomalía clásica que conviene conocer: si df dice que el disco está lleno pero du no encuentra los datos, casi siempre es porque un proceso mantiene abierto un fichero ya borrado. El espacio no se libera hasta que ese proceso termina. Es exactamente lo que ocurre cuando alguien borra acceso.log sin reiniciar el servicio que lo escribe. La gestión de procesos se ve en 05-02.

También merece la pena df -i, que muestra los inodos libres: un disco con espacio pero sin inodos disponibles (millones de ficheros diminutos) también da errores de "no queda espacio".

  1. Recorrido guiado por la infraestructura de Veloz Envíos

Pongámoslo todo junto en una sesión real de reconocimiento sobre srv-veloz-01. Es tu primer día y quieres entender el terreno.

Paso 1: Situarte

whoami
pwd
joan
/home/joan

Paso 2: Explorar los logs

cd /var/log/veloz
ls -lht
total 47M
-rw-r--r-- 1 veloz    veloz 6,0M ago  3 10:15 app.log
-rw-r--r-- 1 www-data adm    28M ago  3 10:14 acceso.log
-rw-r--r-- 1 veloz    veloz 1,3M ago  3 09:02 veloz-api.log
-rw-r--r-- 1 www-data adm   9,4M ago  2 23:59 acceso.log.1
-rw-r--r-- 1 veloz    veloz 2,1M ago  2 23:59 app.log.1

Ya sabes mucho con esta sola pantalla:

  • app.log y acceso.log se están escribiendo ahora mismo (fecha de hoy, hora reciente): el servicio está vivo.
  • Los ficheros .1 son rotaciones del día anterior, cortadas a las 23:59.
  • acceso.log pesa 28 MB, cuatro veces más que app.log: si hay que vigilar el espacio, ese es el candidato.
  • acceso.log pertenece a www-data y app.log a veloz: son dos servicios distintos, con identidades distintas. Como joan, podrás leerlos (el bloque de "otros" tiene r) pero no escribir en ellos.

Paso 3: Comprobar el tipo antes de abrir

file acceso.log acceso.log.1
acceso.log:   ASCII text, with very long lines
acceso.log.1: gzip compressed data, from Unix, original size 84213760

Confirmado: el rotado está comprimido pese a no llevar .gz. Buen dato antes de intentar leerlo.

Paso 4: Visitar los datos de negocio

pushd /srv/veloz/datos
ls -lh
/srv/veloz/datos /var/log/veloz
total 12M
-rw-rw-r-- 1 veloz veloz  11M ago  3 06:00 envios.csv
-rw-rw-r-- 1 veloz veloz 512K jul 31 06:00 envios-2026-07.csv
drwxrwxr-x 2 veloz veloz 4,0K jul  1 06:00 historico

Se aprecia un patrón de trabajo: hay un fichero activo, uno mensual y un directorio historico. La fecha 06:00 sugiere un proceso automático que se ejecuta de madrugada.

stat -c 'Modificado: %y | Tamaño: %s bytes' envios.csv
Modificado: 2026-08-03 06:00:12.000000000 +0200 | Tamaño: 11534336 bytes

Paso 5: Comprobar el espacio

du -sh /var/log/veloz /srv/veloz/datos
df -h /srv
47M	/var/log/veloz
12M	/srv/veloz/datos
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sdb1         500G   410G   65G  87% /srv

/srv al 87 %: aún no es crítico, pero es justo el tipo de métrica que nuestro futuro script de informe debe vigilar. Anótalo mentalmente, porque será uno de los requisitos del Módulo 9.

Paso 6: Volver a casa

popd
cd ~/veloz-ops
tree
/var/log/veloz
/home/joan/veloz-ops
├── bin
├── etc
├── lib
└── logs

5 directories, 0 files

De momento está vacío. A partir del Módulo 3 empezaremos a llenarlo.

Alternativa sin tree

Si tree no está instalado en el servidor:

ls -R ~/veloz-ops
/home/joan/veloz-ops:
bin  etc  lib  logs

/home/joan/veloz-ops/bin:

/home/joan/veloz-ops/etc:

/home/joan/veloz-ops/lib:

/home/joan/veloz-ops/logs:

Menos bonito, pero disponible en cualquier máquina.

Errores Comunes y Consejos

  • Confundir /var/log con ~/veloz-ops/logs. El primero lo gestiona el sistema y requiere permisos; el segundo es tuyo. Nuestros scripts escribirán en el segundo.
  • Ejecutar cd sin comprobar si funcionó. Si el directorio no existe, cd falla pero tú sigues donde estabas; en un script, las órdenes siguientes actuarán sobre el directorio equivocado. Se resuelve con cd /ruta || exit, que veremos en 03-04.
  • Usar rutas relativas en scripts. Un script lanzado por cron no arranca en el directorio que imaginas. Rutas absolutas siempre.
  • Olvidar que -h no significa lo mismo en todos los comandos. En ls, du y df es "human readable"; en muchos otros es "help". Ante la duda, man (lección 01-05).
  • Hacer cat a un fichero enorme o binario. Bloquea la terminal y puede dejarla con caracteres corruptos (se arregla con reset). Usa file antes y less para leer.
  • Buscar ocultos con ls a secas. En Linux basta un punto inicial para ocultar un fichero. Usa ls -a cuando algo "no aparece".
  • Ejecutar tree / o du / sin límite. Tarda muchísimo y satura la terminal. Usa -L o --max-depth.
  • Consejo: usa el tabulador de forma sistemática. Además de escribir menos, valida que la ruta existe mientras la escribes: si no completa, es que te has equivocado.
  • Consejo: ls -lt y du -h --max-depth=1 | sort -hr son los dos comandos de diagnóstico que más veces salvan una guardia nocturna. Memorízalos.

Ejercicios

Ejercicio 1: Resolver rutas mentalmente

Estás en /var/log/veloz. Sin ejecutar nada, indica a qué ruta absoluta equivale cada expresión:

  1. ..
  2. ../../..
  3. ./app.log
  4. ../nginx/error.log
  5. ~/veloz-ops/bin
  6. ../../../srv/veloz/datos/envios.csv

Ejercicio 2: Reconocimiento de un servidor

Realiza en tu máquina (adaptando las rutas si no tienes la estructura de Veloz Envíos) esta secuencia de reconocimiento, y explica qué te dice cada resultado:

  1. Averigua tu directorio actual.
  2. Lista /var/log en formato largo, con tamaños legibles y ordenado por fecha de modificación descendente.
  3. Identifica cuál es el fichero o directorio más grande de /var/log.
  4. Averigua el porcentaje de ocupación de la partición donde está /var.
  5. Determina de qué tipo es el fichero /etc/passwd sin abrirlo.

Ejercicio 3: Navegación con pila

Usando exclusivamente pushd, popd y dirs, escribe la secuencia de comandos que:

  1. Partiendo de ~, visite /var/log, luego /etc y luego /tmp, apilando cada uno.
  2. Muestre la pila numerada.
  3. Vuelva a /etc deshaciendo un solo nivel.
  4. Regrese finalmente a ~.

Indica en qué directorio quedas después de cada paso.

Soluciones

Solución al Ejercicio 1

Expresión Ruta absoluta Razonamiento
.. /var/log Sube un nivel desde /var/log/veloz
../../.. / Tres niveles: logvar/. No se puede subir más allá de la raíz
./app.log /var/log/veloz/app.log . es el directorio actual
../nginx/error.log /var/log/nginx/error.log Sube a /var/log y baja por nginx
~/veloz-ops/bin /home/joan/veloz-ops/bin ~ no depende de dónde estés
../../../srv/veloz/datos/envios.csv /srv/veloz/datos/envios.csv Sube a / y baja por srv

Detalle del tercer caso: / es el techo. cd ../../../../.. desde cualquier sitio te deja en /, sin error.

Solución al Ejercicio 2

# 1
pwd

# 2
ls -lht /var/log

# 3
du -h --max-depth=1 /var/log | sort -hr | head -3

# 4
df -h /var

# 5
file /etc/passwd

Salida y lectura de cada punto:

/home/joan

Estás en tu carpeta personal.

total 312M
drwxr-x--- 2 root adm    4,0K ago  3 10:16 veloz
-rw-r----- 1 syslog adm   18M ago  3 10:16 syslog
drwxr-xr-x 2 root root   4,0K ago  3 00:00 nginx

Lo primero es lo más recientemente modificado: los servicios que están escribiendo ahora. Es el punto de partida para investigar una incidencia en curso.

312M	/var/log
47M	/var/log/veloz
28M	/var/log/nginx

La primera línea es el total del directorio consultado; a partir de ahí, veloz es el mayor consumidor. Nota: --max-depth=1 incluye el propio directorio, por eso aparece /var/log en cabeza.

S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sda1         100G    72G   23G  76% /

/var no tiene partición propia: cuelga de /, que está al 76 %. Es un dato importante, porque significa que un log desbocado puede llenar todo el sistema, no solo /var.

/etc/passwd: ASCII text

Es texto plano, así que puede leerse con cat o less sin riesgo. Pese al nombre, no contiene contraseñas (están en /etc/shadow).

Solución al Ejercicio 3

cd ~
pushd /var/log     # -> /var/log      | pila: /var/log ~
pushd /etc         # -> /etc          | pila: /etc /var/log ~
pushd /tmp         # -> /tmp          | pila: /tmp /etc /var/log ~
dirs -v
popd               # -> /etc          | pila: /etc /var/log ~
popd; popd         # -> ~             | pila: ~

Salida de dirs -v en el paso 2:

 0  /tmp
 1  /etc
 2  /var/log
 3  ~

Recorrido: ~/var/log/etc/tmp → (popd) /etc → (popd) /var/log → (popd) ~.

Observa que cada pushd apila el directorio en el que estabas y te lleva al nuevo, mientras que popd descarta la cima y te sitúa en el siguiente. Una alternativa al último paso sería cd ~ directamente, pero el ejercicio pedía usar solo la pila. Si quisieras saltar directamente a /var/log desde /tmp sin desapilar, pushd +2 rotaría la pila hasta esa posición.

Conclusión

Ya te mueves por el sistema con criterio. Sabes descomponer un comando en programa, opciones y argumentos; conoces el mapa del FHS y qué guarda cada directorio clave; distingues rutas absolutas de relativas y sabes cuándo usar cada una; manejas pwd, cd, ls con sus opciones decisivas, tree y la pila de pushd/popd; y sabes interpretar ls -l línea a línea e inspeccionar ficheros con file, stat, du y df antes de tocarlos. Sobre todo, has hecho tu primer reconocimiento real de srv-veloz-01 y ya sabes dónde vive cada pieza de Veloz Envíos.

Hasta ahora has estado usando el shell. En la siguiente lección, Entendiendo el Shell, abriremos la caja: qué ocurre exactamente entre que pulsas Enter y aparece el resultado, por qué cd no puede ser un programa externo, cómo busca Bash los comandos en el PATH, qué es un subshell y por qué una variable definida dentro de uno desaparece al salir. Entender ese mecanismo es lo que separa a quien copia comandos de quien sabe lo que está haciendo.

Curso de Programación en Bash

Módulo 1: Introducción a Bash

Módulo 2: Comandos Básicos de Bash

Módulo 3: Fundamentos de Scripting

Módulo 4: Scripting Intermedio

Módulo 5: Técnicas Avanzadas de Scripting

Módulo 6: Trabajando con Herramientas Externas

Módulo 7: Automatización y Programación

Módulo 8: Mejores Prácticas y Optimización

Módulo 9: Proyectos del Mundo Real

© Copyright 2026. Todos los derechos reservados