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
- Anatomía del prompt y de un comando
- El árbol de directorios de Linux
- Rutas absolutas y relativas
pwd: dónde estoycd: moversels: mirar- Interpretar la salida de
ls -l tree: ver la estructura de un vistazopushdypopd: pila de directorios- Inspeccionar sin abrir:
file,stat,duydf - Recorrido guiado por la infraestructura de Veloz Envíos
- 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:
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í:
- 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/velozRegla 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:
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.
- 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.
- 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-opslanzado 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 - 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.
pwd: dónde estoy
pwd: dónde estoypwd (print working directory) responde a la pregunta más básica.
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:
-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.
cd: moverse
cd: moversecd (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 relativaUna secuencia realista de trabajo en srv-veloz-01:
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.
ls: mirar
ls: mirarls lista el contenido de un directorio. Es probablemente el comando que más veces ejecutarás en tu vida.
Sin argumentos, lista el directorio actual. Puedes indicarle otro:
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:
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
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.
Ordenado por tamaño de mayor a menor: el comando estrella cuando el disco se llena.
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.
- Interpretar la salida de
ls -l
ls -lEsta es una de esas habilidades que se usan a diario durante toda una carrera profesional. Tomemos una línea:
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:
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:
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.
tree: ver la estructura de un vistazo
tree: ver la estructura de un vistazotree dibuja la jerarquía de directorios. No viene instalado por defecto en muchos sistemas:
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 |
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.
pushd y popd: pila de directorios
pushd y popd: pila de directorioscd - 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 aRUTA.popd: desapila y vuelve al directorio de la cima.dirs -v: muestra la pila numerada.
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.
- Inspeccionar sin abrir:
file, stat, du y df
file, stat, du y dfAntes 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.
/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.
Aunque no lleve .gz, está comprimido, y habría que leerlo con zcat en lugar de cat.
10.2 stat: los metadatos completos
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 +0200stat 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:
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.
-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:
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.
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".
- 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
Paso 2: Explorar los logs
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.logyacceso.logse están escribiendo ahora mismo (fecha de hoy, hora reciente): el servicio está vivo.- Los ficheros
.1son rotaciones del día anterior, cortadas a las 23:59. acceso.logpesa 28 MB, cuatro veces más queapp.log: si hay que vigilar el espacio, ese es el candidato.acceso.logpertenece awww-datayapp.logaveloz: son dos servicios distintos, con identidades distintas. Comojoan, podrás leerlos (el bloque de "otros" tiener) pero no escribir en ellos.
Paso 3: Comprobar el tipo antes de abrir
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
/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.
Paso 5: Comprobar el espacio
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
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:
/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/logcon~/veloz-ops/logs. El primero lo gestiona el sistema y requiere permisos; el segundo es tuyo. Nuestros scripts escribirán en el segundo. - Ejecutar
cdsin comprobar si funcionó. Si el directorio no existe,cdfalla pero tú sigues donde estabas; en un script, las órdenes siguientes actuarán sobre el directorio equivocado. Se resuelve concd /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
-hno significa lo mismo en todos los comandos. Enls,duydfes "human readable"; en muchos otros es "help". Ante la duda,man(lección 01-05). - Hacer
cata un fichero enorme o binario. Bloquea la terminal y puede dejarla con caracteres corruptos (se arregla conreset). Usafileantes ylesspara leer. - Buscar ocultos con
lsa secas. En Linux basta un punto inicial para ocultar un fichero. Usals -acuando algo "no aparece". - Ejecutar
tree /odu /sin límite. Tarda muchísimo y satura la terminal. Usa-Lo--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 -ltydu -h --max-depth=1 | sort -hrson 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:
..../../.../app.log../nginx/error.log~/veloz-ops/bin../../../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:
- Averigua tu directorio actual.
- Lista
/var/logen formato largo, con tamaños legibles y ordenado por fecha de modificación descendente. - Identifica cuál es el fichero o directorio más grande de
/var/log. - Averigua el porcentaje de ocupación de la partición donde está
/var. - Determina de qué tipo es el fichero
/etc/passwdsin abrirlo.
Ejercicio 3: Navegación con pila
Usando exclusivamente pushd, popd y dirs, escribe la secuencia de comandos que:
- Partiendo de
~, visite/var/log, luego/etcy luego/tmp, apilando cada uno. - Muestre la pila numerada.
- Vuelva a
/etcdeshaciendo un solo nivel. - 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: log → var → /. 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/passwdSalida y lectura de cada punto:
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.
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.
/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.
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:
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
- ¿Qué es Bash?
- Configurando tu Entorno
- Navegación Básica en la Línea de Comandos
- Entendiendo el Shell
- Encontrar Ayuda: man, help y --help
Módulo 2: Comandos Básicos de Bash
- Operaciones con Archivos y Directorios
- Comandos de Procesamiento de Texto
- Permisos y Propiedad de Archivos
- Redirección y Tuberías
- Comodines y Expansión de Rutas
- Historial y Atajos de Teclado
Módulo 3: Fundamentos de Scripting
- Creando y Ejecutando un Script
- Variables y Constantes
- Operadores Básicos
- Sentencias Condicionales
- Argumentos y Entrada del Usuario
- Comillas, Expansión y Sustitución
Módulo 4: Scripting Intermedio
- Bucles en Bash
- Funciones en Bash
- Arrays y Arrays Asociativos
- Manipulación de Cadenas
- La Sentencia case y los Menús Interactivos
- Aritmética y Cálculos Numéricos
Módulo 5: Técnicas Avanzadas de Scripting
- Operaciones Avanzadas con Archivos
- Gestión de Procesos
- Manejo de Errores y Depuración
- Expresiones Regulares
- Entrada/Salida Avanzada: Descriptores y Here-Documents
- Scripts Modulares y Librerías Reutilizables
Módulo 6: Trabajando con Herramientas Externas
Módulo 7: Automatización y Programación
- Trabajos Cron
- Automatizando Tareas
- Scripts de Respaldo y Restauración
- Monitoreo y Registro
- Servicios y Temporizadores con systemd
- Automatización Remota con SSH
Módulo 8: Mejores Prácticas y Optimización
- Escribiendo Código Legible
- Optimizando Scripts en Bash
- Consideraciones de Seguridad
- Control de Versiones con Git
- Análisis Estático con ShellCheck y shfmt
- Pruebas Automatizadas con Bats
- Portabilidad: POSIX sh frente a Bashismos
