Guías
Terminal Actualizado el 6 de noviembre de 2026

Bash y Zsh

Atajos de edición, historial, expansión de variables, bucles, alias, scripts y procesamiento de texto para trabajar rápido en la shell.

  • #bash
  • #zsh
  • #shell
  • #terminal
  • #productividad
AcciónComando
Volver al directorio anterior
Guardar el directorio actual e ir a /tmp
Regresar al directorio guardado
Listar archivos con permisos, tamaño legible y ocultos

Atajos de edición de línea

AcciónAtajo
Ir al inicio / final de la líneaCtrl+a / Ctrl+e
Retroceder / avanzar una palabraAlt+b / Alt+f
Borrar la palabra anteriorCtrl+w
Borrar hasta el inicio (en Zsh, toda la línea)Ctrl+u
Borrar hasta el final de la líneaCtrl+k
Pegar lo último borradoCtrl+y
Buscar en el historial (repite para ir más atrás)Ctrl+r
Insertar el último argumento del comando anteriorAlt+.
Limpiar la pantallaCtrl+l
Cancelar la línea actualCtrl+c

Historial

AcciónComando
Repetir el último comando
Repetir el último comando con sudo
Reusar el último argumento del comando anterior
Ejecutar el comando número 123 del historial
Repetir el último comando cambiando un texto
Buscar en el historial

En Zsh, !! y !$ se expanden primero en la línea para que confirmes con Enter.

Búsqueda de archivos

AcciónComando
Buscar archivos por nombre
Buscar texto recursivamente mostrando línea
Contar coincidencias por archivo
Ver el tamaño de las carpetas del directorio actual

Tuberías y redirección

AcciónComando
Filtrar la salida y contar las líneas
Redirigir stdout y stderr a un archivo
Ver la salida y guardarla a la vez
Descartar la salida por completo
Seguir un archivo de log en tiempo real

Procesar texto

AcciónComando
Contar líneas repetidas, de más a menos
Extraer el primer campo separado por :
Imprimir la primera columna (separada por espacios)
Sumar la columna 2
Reemplazar texto en un archivo (GNU sed)
Pasar la lista de archivos a otro comando
Leer un campo de un JSON
Listar las claves de un objeto JSON

En macOS, sed -i necesita un argumento vacío: sed -i '' 's/a/b/g' file.

Variables y expansión

ExpresiónResultado
${PORT:-3000}Valor de PORT, o 3000 si está vacía o no existe
${NAME:?falta NAME}Aborta con ese mensaje si NAME no está definida
${#NAME}Longitud del texto
${FILE%.*}Quita la extensión: report.tar.gz → report.tar
${PATH_VAR##*/}Solo el nombre del archivo (como basename)
${NAME/old/new}Reemplaza la primera aparición de old
$(git branch --show-current)Sustituye por la salida del comando
$((3 * 4))Aritmética entera: 12
cp app.conf{,.bak}Llaves: se expande a cp app.conf app.conf.bak
mkdir -p logs/{dev,qa,prod}Crea tres carpetas de una vez; {1..5} genera rangos

Usa siempre comillas dobles alrededor de las variables ("$FILE") para evitar problemas con espacios.

Condicionales y bucles

bash
if [[ -f .env ]]; then
  echo "Using .env"
elif [[ -z "${API_URL:-}" ]]; then
  echo "API_URL is not set" >&2
fi

for file in *.log; do
  gzip "$file"
done

while read -r line; do
  echo "Host: $line"
done < hosts.txt

[[ -d dist ]] && echo "built" || echo "run the build first"

Alias y funciones

Añádelos a ~/.bashrc (Bash) o ~/.zshrc (Zsh) y recarga con source ~/.zshrc.

bash
alias ll='ls -lah'
alias gs='git status -sb'
alias ..='cd ..'

# Create a folder and enter it
mkcd() {
  mkdir -p "$1" && cd "$1"
}

# Show what is listening on a port
port() {
  lsof -i ":$1"
}
AcciónComando
Ver qué es un comando (alias, función o binario)
Ejecutar el comando original ignorando el alias
Quitar un alias en la sesión actual

Scripts y shebang

bash
#!/usr/bin/env bash
# Stop on errors, undefined variables and failed pipes
set -euo pipefail

name="${1:-world}"
echo "Hello, $name"
AcciónComando
Dar permiso de ejecución
Ejecutar el script
Comprobar la sintaxis sin ejecutar
Ejecutar mostrando cada línea (depuración)
Ver el código de salida del último comando

Procesos y puertos

AcciónComando
Listar trabajos en segundo plano
Traer al primer plano el trabajo nº 1
Terminar el trabajo en segundo plano nº 1
Buscar procesos activos de Node.js
Ver qué proceso ocupa un puerto (ej. 4200)