¿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:
# 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