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
-
Diseña una ruta de navegación. Sin ejecutar nada todavía, escribe en papel la secuencia de comandos
cdpara ir desde/Users/ana/Proyectos/webhasta/Users/ana/Descargasusando solo rutas relativas. Luego escribe la misma con una única ruta absoluta. Explica en qué situación preferirías cada una. -
Predice y verifica. Antes de ejecutarlos, predice qué imprimirá cada comando y por qué:
echo $HOME,pwdtras hacercd ~/.., yls ..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.