Shell

    1. Introducción
      1. Historia de los shells en Unix
        1. Bourne Shell (sh), csh y ksh
        2. Bash: origen, GNU y licenciamiento
        3. POSIX Shell: estandarización y portabilidad
        4. Evolución de Bash 1.x → 2.x → 3.x → 4.x → 5.x
        5. Línea temporal de características (arrays, asociativos, coproc, globstar)
        6. Comunidad, mantenimiento y políticas de releases
      2. Shells y compatibilidad
        1. sh vs bash vs dash vs ksh vs zsh
        2. Conformidad POSIX y “bashismos”
        3. Detección de shell activo y versión ($SHELL, bash --version)
        4. Portabilidad entre distribuciones y BSD/macOS
        5. BusyBox/Almquist (ash) y entornos mínimos
        6. Limitaciones en sistemas embebidos
      3. Instalación y actualización de Bash
        1. Distribuciones Linux (apt, dnf, pacman, zypper)
        2. macOS (Homebrew, MacPorts)
        3. Windows (WSL, MSYS2, Git Bash, Cygwin)
        4. Compilación desde fuente y opciones comunes
        5. Selección de shell por defecto (chsh, /etc/shells)
        6. Verificación de instalación y PATH
      4. Ejecutar el shell y scripts
        1. Sesión interactiva vs no interactiva
        2. Shebangs (#!/bin/sh, #!/usr/bin/env bash)
        3. Ejecución directa, bash script.sh, permisos y chmod +x
        4. source/. vs ejecución en subshell
        5. Flags y modos (-c, -i, -l, -O, -o, -v, -x)
        6. Entrada/salida estándar, tuberías y redirecciones básicas
      5. Terminales y línea de comandos
        1. TTY vs PTY
        2. Emuladores de terminal (GNOME Terminal, iTerm2, Windows Terminal, kitty, Alacritty)
        3. Multiplexores (tmux, screen)
        4. Readline, historial y edición de línea
        5. Autocompletado y bash-completion
        6. Copiado/pegado, mouse reporting y scrollback
      6. Editores y herramientas de desarrollo
        1. Vim, Neovim, Emacs, Nano, VS Code
        2. LSP/“language server” para shell (bash-language-server)
        3. Formateadores y linters (shfmt, ShellCheck)
        4. Integración con depuradores y perfiles de ejecución
        5. Fragmentos, plantillas y snippets de scripts
        6. Proyectos de ejemplos y repos de referencia
    2. Fundamentos
      1. Conceptos básicos del shell
        1. Comandos, argumentos y opciones
        2. Estado de salida y semántica de éxito/fracaso
        3. Rutas absolutas vs relativas
        4. PATH, búsqueda de comandos y hashing de rutas
        5. Builtins vs ejecutables externos
        6. Separadores, espacios y saltos de línea
      2. Variables y entorno
        1. Definición, asignación y alcance
        2. Exportación al entorno (export)
        3. Variables de entorno comunes (PATH, HOME, USER, SHELL)
        4. Variables locales vs globales
        5. env, printenv y archivos de entorno
        6. Convenciones de nombres y mayúsculas
      3. Tipos de datos prácticos
        1. Cadenas y evaluación de palabras
        2. Números en aritmética de shell
        3. Arrays indexados (bash)
        4. Arrays asociativos (bash)
        5. Valores nulos y no definidos
        6. Lectura segura de datos con IFS
      4. Citas y expansión
        1. Comillas simples vs dobles
        2. Escape con barra invertida
        3. Expansión de variables
        4. Sustitución de comandos
        5. Expansión aritmética
        6. Orden de expansiones y efectos colaterales
      5. Globbing y patrones
        1. Patrón *, ?, []
        2. extglob y patrones extendidos
        3. globstar y coincidencia recursiva
        4. nullglob, failglob, nocaseglob
        5. Diferencias con expresiones regulares
        6. Interacciones con IFS y splitting
      6. Operadores
        1. Aritméticos en (( ))
        2. Comparación en [ ] y [[ ]]
        3. Operadores de archivo (-e, -f, -d, -r, -w, -x)
        4. Operadores de cadena (=, !=, <, >, =~)
        5. Asignación compuesta y let
        6. Precedencia práctica en shell
      7. Control de flujo
        1. if, elif, else
        2. case con patrones
        3. for clásico y for … in
        4. while y until
        5. break, continue, exit, return
        6. Sentencias condicionales cortas con && y ||
      8. Funciones
        1. Definición y llamada
        2. Parámetros posicionales y $#, $*, $@, $?, $$, $!
        3. local y sombras de variables
        4. Valores de retorno y echo/stdout
        5. Bibliotecas de funciones y source
        6. Namespacing por convención
      9. Estado de salida y manejo de errores
        1. Códigos de retorno y set -e
        2. pipefail y errores en tuberías
        3. set -u y variables no definidas
        4. trap y captura de señales
        5. Limpieza y funciones cleanup
        6. Diseño de scripts “fail-fast”
      10. Opciones del shell
      11. set para opciones POSIX
      12. shopt para opciones específicas de bash
      13. Modo POSIX vs modo bash
      14. Opciones de globbing y expansión
      15. Ajustes de historia y readline
      16. Persistencia en dotfiles
    3. Estructuras y manipulación de datos
      1. Cadenas en shell
        1. Longitud, subcadenas y sustituciones
        2. Borrado de prefijos/sufijos con patrones
        3. Sustitución global de patrones
        4. Conversión de mayúsculas/minúsculas
        5. Manejo de caracteres especiales y binarios
        6. Normalización de fin de línea y codificaciones
      2. Arrays indexados
        1. Declaración, inicialización y expansión
        2. Acceso por índice y rebanado
        3. Iteración sobre índices y valores
        4. Operaciones de inserción y borrado
        5. Longitud y expansión segura con [@]
        6. Errores comunes con IFS y splitting
      3. Arrays asociativos
        1. Declaración y asignación de claves
        2. Iteración por clave y valor
        3. Existencia de claves y pruebas
        4. Copias y referencias
        5. Serialización simple de mapas
        6. Limitaciones de portabilidad
      4. Lectura y parsing
        1. read seguro con -r y IFS
        2. mapfile/readarray
        3. Lectura de campos, CSV y delimitadores
        4. getopts para opciones cortas
        5. getopt/GNU para opciones largas
        6. Validación de entrada y mensajes de ayuda
      5. Expresiones regulares y patrones
        1. [[ string =~ regex ]] en bash
        2. grep básico, ERE y PCRE según herramienta
        3. sed para sustituciones en flujo
        4. awk para campos y registros
        5. Limitaciones de regex en [[ ]]
        6. Casos de uso mezcla regex/patrones
      6. Archivos y directorios
        1. Comprobaciones de archivo y directorio
        2. Metadatos y permisos
        3. Timestamps y touch
        4. Listados y filtros
        5. Búsqueda con find
        6. Trabajo seguro con nombres con espacios y saltos de línea
      7. Redirecciones y descriptores
        1. >, >>, <, 2>, &>, <>
        2. exec para reasignar FDs
        3. tee y duplicación de salida
        4. noclobber y set -C
        5. Here-docs (<<, <<-) y here-strings (<<<)
        6. Pseudodispositivos y /dev/null
      8. Tuberías y procesos
        1. Piping entre múltiples comandos
        2. Efectos de subshell en (...)
        3. Agrupación { ...; }
        4. xargs y -0 con -print0
        5. parallel para concurrencia
        6. Consideraciones de rendimiento
      9. Sustituciones y procesos especiales
        1. Sustitución de comandos $( )
        2. Sustitución de procesos <( ) y >( )
        3. Co-procesos coproc
        4. Nombres de tuberías mkfifo
        5. /dev/tcp y /dev/udp en bash
        6. Captura de stderr por separado
    4. Programación estructurada y modular
      1. Organización de scripts
        1. Estructura de carpetas y convenciones
        2. Cabeceras, licencia y metadatos
        3. Funciones reutilizables y bibliotecas
        4. “Main” y flujo de ejecución
        5. Gestión de errores y logging
        6. Salidas y códigos de retorno
      2. Interfaz de línea de comandos
        1. Diseño de --help y --version
        2. Subcomandos por convención
        3. Validación de parámetros y contratos
        4. Mensajes de uso y ejemplos
        5. Colores y TTY detección
        6. Compatibilidad con sudo
      3. Configuración y entorno
        1. Archivos .env y dotenv CLI
        2. Variables de entorno y precedencia
        3. Archivos INI/TOML/YAML con grep/sed/awk/jq/yq
        4. Plantillas con here-doc y placeholders
        5. Rutas relativas y absolutas robustas
        6. Detección de sistema y distros
      4. Sourcing y módulos
        1. source de librerías internas
        2. Control de colisiones de nombres
        3. Variables readonly y constantes
        4. Carga condicional y “guardas”
        5. Versión mínima de bash y chequeos
        6. Dependencias de herramientas externas
      5. Estilo y calidad
        1. Guías de estilo (Google Shell Style Guide)
        2. ShellCheck: categorías y reglas comunes
        3. shfmt: indentación y formato
        4. Nombres de funciones y variables
        5. Comentarios y secciones
        6. Revisiones y code review
      6. Documentación
        1. Cabeceras con descripción y uso
        2. --help autogenerado por funciones
        3. Manuales man mínimos con ronn/pandoc
        4. README de CLI
        5. Ejemplos reproducibles
        6. Notas de compatibilidad
      7. Pruebas
        1. bats-core: estructura y aserciones
        2. shUnit2: suites y fixtures
        3. cram/tap: pruebas de línea de comandos
        4. Mocks de comandos con PATH y wrappers
        5. Tests de integración con contenedores
        6. Cobertura y medición de rutas de error
      8. Depuración
        1. set -x y PS4
        2. bash -x y trazas
        3. set -v y eco de entradas
        4. trap ERR y diagnósticos
        5. printf/echo dirigidos a stderr
        6. Reproducibilidad de fallos
      9. Rendimiento y benchmarking
        1. time y /usr/bin/time
        2. hyperfine para CLIs
        3. Minimización de subshells
        4. Sustituciones eficientes vs pipelines
        5. Uso de awk/sed/perl cuando corresponda
        6. Perfilado con strace/dtruss (lectura de alto nivel)
    5. Texto, datos y utilidades de Unix
      1. Búsqueda y filtrado
        1. grep, egrep, ripgrep
        2. head, tail, sed filtros básicos
        3. awk para columnas y agregaciones
        4. cut, paste, tr
        5. sort, uniq, comm, join
        6. nl, wc, fold, fmt
      2. Estructuras y formatos
        1. CSV robusto con delimitadores
        2. TSV y cut --output-delimiter
        3. JSON con jq
        4. YAML con yq
        5. INI con awk/grep patrones
        6. Binarios y xxd/hexdump
      3. Archivos y compresión
        1. tar y variantes de compresión
        2. gzip, bzip2, xz, zstd
        3. zip/unzip
        4. Extracción selectiva y streaming
        5. Integridad y checksums (md5sum, sha256sum)
        6. Archivos temporales con mktemp
      4. Sistema de archivos
        1. stat, ls y formatos
        2. chmod, chown, umask
        3. df, du y cuotas
        4. Enlaces duros y simbólicos
        5. Montajes y puntos de montaje
        6. lsof y archivos abiertos
      5. Búsqueda y ejecución
        1. find con pruebas de tiempo y tamaño
        2. -exec y -print0
        3. xargs paralelo y seguro
        4. Limitación de profundidad
        5. Selección por permiso/usuario/grupo
        6. Eliminación segura y confirmación
      6. Flujo y transformación
        1. tee para bifurcar
        2. Filtros composables
        3. Tratamiento de errores en pipelines
        4. awk como “mini lenguaje”
        5. sed multi-línea y hold space
        6. Mantenimiento de orden estable
    6. Concurrencia, procesos y sistema
      1. Procesos y jobs
        1. Ejecución en background &
        2. jobs, fg, bg
        3. wait y recolección
        4. disown y longevidad
        5. nohup y sesiones
        6. Subshells vs shell actual
      2. Señales y trap
        1. SIGINT, SIGTERM, SIGHUP
        2. Limpieza de recursos
        3. Trampas para EXIT y ERR
        4. Reintentos exponenciales
        5. Ventanas de carrera y bloqueos
        6. flock y exclusión mutua
      3. Paralelismo práctico
        1. xargs -P y límites
        2. GNU parallel
        3. Coprocesos coproc
        4. Paralelismo por archivos y sharding
        5. Estrategias de backoff
        6. Observabilidad básica
      4. Tiempo y temporización
        1. date y formatos portables
        2. sleep, usleep (según SO)
        3. timeout y cancelación
        4. Medición con time y SECONDS
        5. Zonas horarias y TZ
        6. Rounding y diferencias de tiempo
      5. Programación y scheduling
        1. cron y crontab
        2. anacron
        3. systemd timers
        4. at/batch
        5. systemd-run para tareas únicas
        6. Logs y rotación con logrotate
      6. Recursos del sistema
        1. ulimit y límites de FDs
        2. nice y renice
        3. Afinidad y taskset (Linux)
        4. Memoria y free/vm_stat
        5. CPU y mpstat/top/htop
        6. I/O y iostat/dstat
    7. Redes y comunicación
      1. Transferencias
        1. curl y wget
        2. scp, sftp, rsync
        3. Autenticación con claves
        4. Verificación de certificados
        5. Reanudación y --continue-at
        6. Throttling de ancho de banda
      2. Conectividad
        1. ping, ping6
        2. traceroute/mtr
        3. dig/host
        4. nc/netcat y puertos
        5. /dev/tcp para testing
        6. Proxies y variables de entorno
      3. SSH y automatización
        1. ssh y opciones de control
        2. ~/.ssh/config y multiplexación
        3. Agentes ssh-agent/gpg-agent
        4. Ejecución remota paralela
        5. Transferencias atómicas con rsync
        6. Túneles y port forwarding
      4. APIs y formatos
        1. curl con JSON
        2. jq para parseo y filtros
        3. Autenticación por tokens
        4. Retries y backoff
        5. Logging de peticiones y respuestas
        6. Sanitización de secretos en logs
    8. Entorno, dotfiles y personalización
      1. Inicio de sesión y perfiles
        1. Shell de login vs no login
        2. .bashrc, .bash_profile, .profile
        3. Orden de carga y herencia
        4. Distinciones macOS/Linux
        5. Scripts globales en /etc
        6. Depuración de inicio con set -x
      2. Prompt y estética
        1. PS1, PS2, PS4
        2. Colores ANSI y escapes
        3. Información de git y estado
        4. Prompts por contexto (root, prod)
        5. Separadores unicode y símbolos
        6. Detección de TTY para colores
      3. Historial y productividad
        1. HISTFILE, HISTSIZE, HISTCONTROL
        2. history y expansión !
        3. Búsqueda incremental con Readline
        4. Atajos de edición (emacs/vi mode)
        5. fc y edición del último comando
        6. Deduplicación de comandos
      4. Autocompletado
        1. bash-completion paquetes
        2. Completados personalizados
        3. Context-aware completion
        4. Cache y rendimiento
        5. Compatibilidad entre distros
        6. Mantenimiento de scripts de completion
      5. Gestión del entorno
        1. Variables por proyecto
        2. direnv y hooks
        3. Versionado de herramientas (asdf, mise)
        4. Nix y shells reproducibles
        5. Plantillas de perfiles
        6. Seguridad de archivos de inicio
    9. Seguridad en shell
      1. Principios básicos
        1. Citar siempre las variables
        2. Evitar word splitting accidental
        3. Manejo de IFS seguro
        4. set -Eeuo pipefail en scripts críticos
        5. umask y permisos por defecto
        6. noclobber y sobrescrituras
      2. Inyección y sanitización
        1. Construcción segura de comandos
        2. Evitar eval
        3. Validación de rutas y nombres
        4. Filtrado de entrada y listas blancas
        5. Limitación de globbing inesperado
        6. Escapes al invocar herramientas
      3. Archivos temporales
        1. mktemp y directorios dedicados
        2. Limpieza con trap
        3. Colisiones y condiciones de carrera
        4. Nombres predecibles a evitar
        5. tmpfs y consideraciones de rendimiento
        6. Permisos y herencia en TMPDIR
      4. Secretos y credenciales
        1. Variables de entorno sensibles
        2. Archivos .netrc y permisos
        3. Pass/Keychain/GPG
        4. Redacción de logs
        5. Integración con gestores de secretos
        6. Expiración y rotación
      5. Casos conocidos
        1. Shellshock y funciones en entorno
        2. PATH envenenado
        3. Scripts sudo inseguros
        4. ssh sin restricción de comandos
        5. tar y paths relativos
        6. find -exec y comodines
    10. Portabilidad y diferencias de plataformas
      1. GNU vs BSD
        1. sed -i y compatibilidad
        2. date y formatos
        3. xargs flags por defecto
        4. tar opciones divergentes
        5. readlink y realpath
        6. stat campos y sintaxis
      2. Linux vs macOS vs *BSD
        1. Utilidades de red
        2. Directorios del sistema
        3. Enlaces simbólicos y Finder
        4. Lanzadores y launchd
        5. Homebrew y rutas en ARM
        6. Frameworks y restricciones SIP
      3. Entornos mínimos
        1. BusyBox/ash
        2. Alpine y musl
        3. Imágenes scratch/distroless
        4. Docker entrypoints en sh
        5. Shells en initramfs
        6. Limitaciones de locales
      4. Windows y POSIX
        1. WSL y interoperabilidad
        2. MSYS2/Cygwin
        3. CRLF vs LF
        4. Rutas y letras de unidad
        5. Procesos y señales
        6. Permissions y ACLs
    11. Integración con ecosistema y empaquetado
      1. Gestores de paquetes del sistema
        1. apt, dnf/yum, pacman, zypper
        2. brew, port
        3. nix/guix
        4. snap/flatpak para CLIs
        5. Repos privados y mirrors
        6. Cachés y proxies
      2. Distribución de scripts
        1. Instalación en /usr/local/bin
        2. Paquetización DEB/RPM básica
        3. Publicación via tarballs
        4. Checksums y firmas
        5. Versionado semántico por convención
        6. Changelogs y notas de versión
      3. Contenedores
        1. Dockerfiles con sh/bash
        2. Entrypoint vs CMD
        3. Señales y PID 1
        4. Imágenes multi-stage
        5. Salud y readiness checks
        6. Logs y STDOUT/STDERR
      4. CI/CD
        1. Ejecutores y runners
        2. Caching de dependencias
        3. Matrices y paralelismo
        4. Artefactos y reportes
        5. Lint/test en pipelines
        6. Firmas y supply chain
      5. Interoperabilidad
        1. Makefiles y targets
        2. Invocación desde otros lenguajes
        3. Subprocesos y códigos de retorno
        4. IPC simple con FIFOs
        5. JSON/YAML como interfaz
        6. CLI contract-first
    12. Redes, servicios y sistemas
      1. Gestión de servicios
        1. systemd y systemctl
        2. SysV init scripts
        3. Launchd en macOS
        4. Supervisores (supervisord, s6)
        5. Logs de sistema y journalctl
        6. Rotación y retención
      2. Almacenamiento y backups
        1. rsync avanzado
        2. Snapshots y LVM/ZFS (conceptos)
        3. Verificación de integridad
        4. Backups diferenciales/incrementales
        5. Restores y pruebas periódicas
        6. Cifrado en repositorios
      3. Observabilidad
        1. top, htop, atop
        2. vmstat, iostat, dstat
        3. lsof y fugas de descriptores
        4. ss/netstat
        5. Logging estructurado con jq
        6. Exportadores y métricas simples
      4. Seguridad operativa
        1. sudo políticas y NOPASSWD
        2. pam y restricciones
        3. faillock/fail2ban básicos
        4. Chequeos de permisos en scripts
        5. Listas de control y setcap
        6. Auditoría de comandos críticos
    13. Casos de uso y patrones
      1. Procesamiento masivo de archivos
        1. Canonización de nombres
        2. Renombrado seguro
        3. Extracción y partición
        4. Validaciones de estructura
        5. Resúmenes y reportes
        6. Reintentos de operaciones fallidas
      2. Pipelines de datos
        1. Extracción → Transformación → Carga
        2. Logs y métricas por etapa
        3. Paralelismo por particiones
        4. Reprocesamiento idempotente
        5. Control de versiones de pipeline
        6. Almacenamiento temporal y limpieza
      3. CLI de utilería
        1. Plantillas --help
        2. Comandos anidados
        3. Config por archivo y env
        4. Verbosidad y --quiet
        5. Códigos de retorno estandarizados
        6. Tests de humo automáticos
      4. Automatización de despliegues
        1. Construcción y empaquetado
        2. Publicación artefactos
        3. Migraciones y rollbacks
        4. Checks de salud post-deploy
        5. Canary y gradual rollouts
        6. Auditoría y trazabilidad
      5. Mantenimiento y tareas programadas
        1. Limpieza de caches
        2. Rotación de logs
        3. Verificación de espacio
        4. Renovación de certificados
        5. Respaldo y rotación
        6. Alertas y notificaciones
    14. Lectura, escritura y formatos específicos
      1. CSV/TSV robusto
        1. Delimitadores y comillas
        2. Filtrado por columnas
        3. Uniones y mezclas
        4. Limpieza de encabezados
        5. Detección de codificaciones
        6. Conversión a JSON/YAML
      2. JSON
        1. Extracción y transformación con jq
        2. Validación y esquema básico
        3. Merge y patch
        4. Orden y pretty-print
        5. Streams y SLURP
        6. Filtrado por claves
      3. YAML
        1. yq para consultas
        2. Conversión YAML↔JSON
        3. Anclas y alias (operativo)
        4. Plantillas con here-doc
        5. Splits por documentos
        6. Validación básica
      4. Texto y codificaciones
        1. UTF-8 por defecto
        2. Eliminación de BOM
        3. Normalización de saltos de línea
        4. Reemplazos seguros de binarios
        5. Detección con file
        6. Reglas de localización
    15. Internos del shell
      1. Ciclo de vida de un comando
        1. Tokenización y parsing
        2. Expansiones en orden
        3. Globbing y splitting
        4. Redirecciones y FDs
        5. Fork/exec y espera
        6. Recolección del estado
      2. Builtins esenciales
        1. cd, echo, printf
        2. test/[, [[
        3. read, mapfile
        4. set, shopt
        5. exec, eval (con cautela)
        6. trap, ulimit
      3. Readline y edición
        1. .inputrc y bindings
        2. Modos emacs/vi
        3. Macros simples
        4. Compleciones dinámicas
        5. Historial y expansión !
        6. Control de mayúsculas/minúsculas
      4. Opciones y comportamiento
        1. POSIX mode
        2. Emulación de sh
        3. Opciones heredadas
        4. Variables especiales de bash
        5. Límite de recursión de funciones
        6. Máximos de longitud de línea/argv
    16. Internacionalización y locales
      1. Locales del sistema
        1. LC_ALL, LANG, LC_* variables
        2. Efectos en sort/grep/awk
        3. Estabilidad con LC_ALL=C
        4. Fechas, números y collations
        5. Conversión de charset
        6. Scripts reproducibles y locales fijas
      2. Mensajes y traducción (nivel operativo)
        1. Mensajes de ayuda neutrales
        2. Señales y textos estándar
        3. Salidas parsables vs human-friendly
        4. Documentación bilingüe por convención
        5. Evitar dependencias regionales
        6. Pruebas con locales variados
    17. Buenas prácticas y antipatrones
      1. Citar siempre expansiones
      2. Evitar for x in $(cmd) para líneas
      3. Preferir read -r con IFS controlado
      4. Manejo de errores explícito
      5. No abusar de subshells innecesarios
      6. Reemplazar cat inútil (UUOC)
      7. grep -q para pruebas silenciosas
      8. set -Eeuo pipefail cuando aplique
      9. Validar entradas externas
      10. Registrar acciones críticas
    18. Migración y compatibilidad
      1. De bash a POSIX sh
      2. Detección y eliminación de bashismos
      3. Sustituciones de [[[ cuando sea posible
      4. mapfile/arrays en entornos sin bash
      5. extglob y alternativas
      6. Pruebas cruzadas en shells comunes
    19. Catálogo de recetas frecuentes
      1. Parseo robusto de flags con getopts
      2. Leer fichero línea a línea seguro
      3. Procesar grandes árboles con find -print0
      4. Pipelines con manejo de errores
      5. Retries con backoff exponencial
      6. Locking con flock
      7. Logging con niveles y timestamps
      8. Rotación de logs por tamaño
      9. Descargas con checksum y verificación
      10. Recolección y limpieza a la salida
    20. Referencias y ecosistema
      1. Manuales (man bash, POSIX)
      2. Guías de estilo reconocidas
      3. Proyectos ejemplo y plantillas
      4. Herramientas de verificación (ShellCheck, shfmt)
      5. Conjuntos de pruebas (bats, shUnit2)
      6. Comunidades y recursos de aprendizaje