Juan Diego Andrés PRADA··RAMÍREZ Entrar
Lección 2 de 7

Fundamentos del shell

¿Qué es?

El shell es el programa con el que conversas cuando abres una terminal: tú escribes una orden en texto y él la interpreta y se la pasa al sistema operativo. No es la terminal en sí (esa es solo la ventana), sino el intérprete que vive dentro. En macOS suele ser Zsh y en Linux suele ser Bash, pero para empezar son casi idénticos. Esta primera lección te enseña a leer ese diálogo y a moverte con soltura.

¿Cómo funciona?

Cuando pulsas Enter, el shell parte tu línea en tres piezas: el programa, las opciones (flags) que cambian su comportamiento y los argumentos sobre los que actúa. Localiza el programa recorriendo las carpetas que guarda en la variable PATH, lo ejecuta y te devuelve el resultado en pantalla. Además recuerda lo que escribiste antes (historial), completa nombres con la tecla TAB y te deja navegar el árbol de carpetas con comandos como cd, pwd y ls.

¿Para qué sirve?

Dominar el shell es la base sobre la que se apoya todo lo demás del curso: sin saber moverte ni leer un comando, ningún script ni automatización tendrá sentido. Aquí, además, creas con tus propias manos la carpeta kit-automatizacion, que será el hogar de tu proyecto final «Tu kit de automatización personal». Todo lo que automatices después vivirá y se ejecutará desde el terreno que aprendes a pisar en esta lección.

El shell es el programa que interpreta lo que escribes y se lo traduce al sistema operativo. Cuando abres la Terminal (macOS) o un emulador de terminal (Linux), no estás hablando "con la terminal": estás hablando con un shell que vive dentro de ella. En macOS moderno el shell por defecto es Zsh; en la mayoría de distribuciones Linux es Bash. Para casi todo lo de este curso son intercambiables, y marcaremos las diferencias cuando importen.

Lo primero que ves es el prompt: una línea que termina normalmente en $ (usuario normal) o # (root). Es la invitación del shell a que escribas una orden.

usuario@maquina ~ % # Zsh en macOS suele terminar en %
usuario@maquina:~$ # Bash en Linux suele terminar en $

Anatomía de un comando

Un comando tiene tres partes: el programa, las opciones (flags) y los argumentos.

ls -l -a /Users
# │ │ │ └── argumento: sobre qué actúa
# │ └──┴────── opciones (flags) que cambian el comportamiento
# └────────────── programa que se ejecuta

Las opciones de una letra suelen combinarse: ls -la equivale a ls -l -a. Las opciones largas usan dos guiones: ls --all. Cuando dudes de qué hace un programa, pregúntale a él mismo:

man ls # manual completo (q para salir)
ls --help # ayuda rápida; en macOS muchos comandos no la traen, usa man
tldr ls # ejemplos prácticos (si lo instalas: brew install tldr)

En man, navega con las flechas, busca con /palabra y sal con q. El manual no es para leerlo entero: es para localizar la opción que necesitas.

Moverte por el sistema de archivos

El sistema de archivos es un árbol. La raíz es /. Tu carpeta personal es ~ (equivale a /Users/tu-nombre en macOS y /home/tu-nombre en Linux). En todo momento estás "parado" en un directorio: el directorio de trabajo actual.

pwd # print working directory: dónde estoy
ls # listar contenido del directorio actual
cd Proyectos # entrar a la carpeta Proyectos
cd .. # subir un nivel
cd ~ # ir a mi carpeta personal
cd - # volver al directorio anterior (muy útil)

Conviene distinguir dos tipos de rutas:

  • Ruta absoluta: empieza en la raíz. cd /usr/local/bin. Siempre apunta al mismo sitio.
  • Ruta relativa: parte de donde estás. cd ../Descargas. Depende del directorio actual.

. significa "el directorio actual" y .. significa "el directorio padre". Verás ./script.sh para ejecutar algo que está justo aquí.

Atajos que ahorran horas

El shell tiene memoria y autocompletado. Aprovecharlos es la diferencia entre teclear como en los noventa y moverte rápido.

# Autocompletar: escribe las primeras letras y pulsa TAB
cd Proy<TAB> # se completa a Proyectos/

# Historial: flecha arriba recorre comandos anteriores
history # ver todo el historial numerado
!! # repetir el último comando
Ctrl + R # buscar en el historial escribiendo parte del comando

Edición de la línea (funciona en Bash y Zsh):

Ctrl + A # ir al inicio de la línea
Ctrl + E # ir al final
Ctrl + U # borrar desde el cursor hasta el inicio
Ctrl + K # borrar desde el cursor hasta el final
Ctrl + L # limpiar la pantalla (como clear)

Variables de entorno

El shell guarda configuración en variables de entorno. La más importante es PATH: la lista de carpetas donde el shell busca los programas que escribes.

echo $HOME # tu carpeta personal
echo $PATH # carpetas donde se buscan los comandos
echo $SHELL # qué shell estás usando

Cuando escribes git, el shell recorre PATH de izquierda a derecha buscando un ejecutable llamado git. Si "command not found", casi siempre es que el programa no está instalado o su carpeta no está en PATH.

Ejemplo guiado: del prompt a un directorio nuevo

Vamos a crear el esqueleto de tu futuro kit de automatización, paso a paso.

# 1. Confirma dónde estás
pwd
# /Users/tu-nombre

# 2. Ve a tu carpeta personal por si acaso
cd ~

# 3. Crea una carpeta para tus scripts
mkdir kit-automatizacion

# 4. Entra y verifica que está vacía
cd kit-automatizacion
ls -la
# Verás . y .. (el propio directorio y su padre)

# 5. Crea un archivo vacío de notas y compruébalo
touch NOTAS.md
ls -l
# -rw-r--r-- 1 tu-nombre staff 0 ... NOTAS.md

# 6. Vuelve por donde viniste
cd -

Acabas de usar navegación, creación de carpetas y archivos, y un atajo (cd -). Esa carpeta kit-automatizacion será el hogar del proyecto final del curso.

Los nombres con espacios necesitan comillas o escape: cd "Mis Proyectos" o cd Mis\ Proyectos. Sin eso, el shell cree que Mis y Proyectos son dos argumentos distintos.

Tech English: shell (intérprete de órdenes), prompt (línea de invitación), flag/option (modificador), argument (sobre qué actúa), working directory (directorio actual), path (ruta), autocomplete (autocompletado).

Ejercicios

  1. Diseña una ruta de navegación. Sin ejecutar nada todavía, escribe en papel la secuencia de comandos cd para ir desde /Users/ana/Proyectos/web hasta /Users/ana/Descargas usando solo rutas relativas. Luego escribe la misma con una única ruta absoluta. Explica en qué situación preferirías cada una.

  2. Predice y verifica. Antes de ejecutarlos, predice qué imprimirá cada comando y por qué: echo $HOME, pwd tras hacer cd ~/.., y ls .. cuando estás dentro de tu carpeta personal. Ejecuta después y compara tu predicción con el resultado; donde te equivoques, razona qué supuesto era falso.

Tu progreso se guarda en este navegador. Inicia sesión para guardarlo en tu cuenta y verlo desde cualquier dispositivo.