Shell vs. Terminal

Comprende las diferencias fundamentales entre estas dos herramientas esenciales

Módulo 1 ⏱️ 20-25 min 🖥️ Terminal 🐚 Shell 📚 Principiante

¿Cuál es la diferencia?

Muchas personas usan los términos "terminal" y "shell" de forma intercambiable, pero en realidad son conceptos diferentes que trabajan juntos para proporcionar la interfaz de línea de comandos.

Terminal

¿Qué es? Una aplicación gráfica que proporciona una ventana donde puedes interactuar con el shell.

Función: Interfaz visual para mostrar texto y recibir entrada del teclado.

Ejemplos:

  • GNOME Terminal (Ubuntu)
  • Terminal.app (macOS)
  • Windows Terminal
  • Alacritty, Kitty, iTerm2

Shell

¿Qué es? El programa que interpreta y ejecuta los comandos que escribes.

Función: Procesador de comandos que ejecuta programas y scripts.

Ejemplos:

  • Bash (más común)
  • Zsh (macOS por defecto)
  • Fish (amigable)
  • Dash (minimalista)
Analogía Simple

Piensa en el terminal como la ventana de tu navegador y el shell como el motor del navegador. La ventana te permite ver e interactuar, pero el motor es lo que realmente procesa todo.

Historia y Evolución

Terminales Físicos

Originalmente, los "terminales" eran dispositivos físicos: teclado y pantalla conectados a una computadora central (mainframe). Estos terminales "tontos" solo mostraban texto enviado por la computadora.

Emuladores Modernos

Hoy usamos "emuladores de terminal" - programas que simulan esos terminales antiguos, pero con muchas más características como colores, fuentes personalizables, pestañas, etc.

# Comando ejecutado en 1975 en un terminal físico DEC VT100
$ ls
archivo1.txt    archivo2.txt    directorio1

# El mismo comando hoy en un emulador moderno
$ ls --color=auto -la
total 12
drwxr-xr-x 3 usuario grupo 4096 oct 15 10:30 .
drwxr-xr-x 5 usuario grupo 4096 oct 15 10:25 ..
-rw-r--r-- 1 usuario grupo 1024 oct 15 10:20 archivo1.txt
-rw-r--r-- 1 usuario grupo 2048 oct 15 10:25 archivo2.txt
drwxr-xr-x 2 usuario grupo 4096 oct 15 10:30 directorio1

Tipos de Shell

Bash

Bourne Again Shell

  • Shell por defecto en la mayoría de distribuciones Linux
  • Excelente para scripting
  • Compatible con sh
  • Amplia documentación

Zsh

Z Shell

  • Shell por defecto en macOS
  • Autocompletado inteligente
  • Temas y plugins (Oh My Zsh)
  • Compatible con Bash

Fish

Friendly Interactive Shell

  • Autocompletado basado en historial
  • Syntax highlighting en tiempo real
  • Configuración web
  • Sintaxis diferente a Bash

Dash

Debian Almquist Shell

  • Shell muy ligero y rápido
  • Usado para scripts del sistema
  • Compatible con POSIX
  • Menos características interactivas

Identificando tu Entorno

# ¿Qué shell estás usando?
$ echo $SHELL
/bin/bash

# ¿Qué shell está ejecutándose actualmente?
$ echo $0
bash

# ¿Qué terminales tienes disponibles?
$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/zsh

# ¿Qué terminal estás usando? (variable de entorno)
$ echo $TERM
xterm-256color

# Información detallada del terminal
$ infocmp $TERM | head -3
#	Reconstructed via infocmp from file: /lib/terminfo/x/xterm-256color
xterm-256color|xterm with 256 colors,
	am, bce, ccc, km, mc5i, mir, msgr, npc, xenl,
Importante

La variable $SHELL muestra tu shell por defecto, pero podrías estar ejecutando un shell diferente temporalmente. Usa echo $0 para ver el shell actual.

Cambiando de Shell

# Cambiar temporalmente a otro shell
$ zsh
% echo "Ahora estoy en zsh"
Ahora estoy en zsh
% exit
$ echo "De vuelta en bash"
De vuelta en bash

# Cambiar el shell por defecto permanentemente
$ chsh -s /usr/bin/zsh
Password: [tu contraseña]

# Verificar el cambio (necesitarás hacer logout/login)
$ echo $SHELL
/usr/bin/zsh

# Ver shells instalados
$ chsh -l
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/usr/bin/zsh
Nota sobre el cambio de shell

Al cambiar tu shell por defecto con chsh, el cambio solo se hace efectivo en nuevas sesiones de login. Cierra y abre tu terminal (o haz logout/login) para ver el cambio.

Configuración de Terminal vs Shell

Configuración del Terminal

  • Colores y temas
  • Fuentes y tamaños
  • Tamaño de ventana
  • Comportamiento del mouse
  • Atajos de teclado
  • Pestañas y divisiones

Configuración del Shell

  • Historial de comandos
  • Aliases y funciones
  • Variables de entorno
  • Plugins y extensiones
  • Prompt personalizado
  • Autocompletado

Ejercicio Práctico

Explorando tu Entorno

Ejecuta estos comandos para entender mejor tu configuración actual:

Comandos de diagnóstico Copiar
# 1. Identifica tu shell actual
echo "Shell actual: $0"
echo "Shell por defecto: $SHELL"

# 2. ¿Qué terminal estás usando?
echo "Terminal: $TERM"
ps -p $(ps -p $$ -o ppid=) -o comm=

# 3. ¿Qué versión de bash tienes?
bash --version

# 4. Lista todos los shells disponibles
cat /etc/shells

# 5. Prueba un comando específico de tu shell
if [[ "$0" == *"bash"* ]]; then
    echo "Estás en Bash - puedes usar [[ ]]"
elif [[ "$0" == *"zsh"* ]]; then
    echo "Estás en Zsh - tienes funciones avanzadas"
else
    echo "Estás usando: $0"
fi