Explorador
Concepto

Terminal, shell y tipos de shell

La diferencia entre terminal, shell y kernel, las shells más comunes y los archivos que configuran bash.

Actualizado el

En esta guía

Tres piezas distintas

  • Terminal: la ventana donde se escribe (Windows Terminal, iTerm, GNOME Terminal).
  • Shell: el programa que interpreta los comandos (bash, zsh).
  • Kernel: quien realmente ejecuta lo que la shell le pide.
echo $SHELL       # la shell por defecto del usuario
echo $0           # la shell que está en uso ahora
ps -p $$          # lo mismo, vía el proceso actual
cat /etc/shells   # shells instaladas y permitidas
ls -l /bin/sh     # en Ubuntu apunta a dash, no a bash

Tipos de shell

Shell Notas
sh El estándar POSIX original. Mínimo y portable.
dash Muy rápida, solo POSIX. Es /bin/sh en Ubuntu y Debian.
bash La más extendida. Es la que viene por defecto en la mayoría de distros.
zsh Más personalizable. Es la shell por defecto en macOS.
fish Amigable, con autocompletado inteligente. No es compatible con bash.

Importa porque un script con #!/bin/sh que use sintaxis exclusiva de bash (los bashismos, como [[ ]] o los arreglos) puede fallar en Ubuntu, donde sh es dash.

Archivos de configuración de bash

Archivo Cuándo se lee
~/.bashrc En cada terminal interactiva nueva. Aquí van los alias y el PATH.
~/.profile Al iniciar sesión (login).
~/.bash_history Guarda el historial de comandos.
alias ll='ls -lah'                        # alias temporal, solo en esta sesión
echo "alias ll='ls -lah'" >> ~/.bashrc    # permanente
source ~/.bashrc                          # recarga la configuración sin cerrar la terminal

Primer arranque de una distro

Al abrir una distro recién instalada conviene actualizarla y comprobar lo básico:

sudo apt update && sudo apt upgrade -y
whoami                # el usuario actual
pwd                   # carpeta actual (debería ser /home/usuario)
cat /etc/os-release   # qué distro y versión es

Al escribir la contraseña de sudo no se muestra nada, ni asteriscos. Es normal.

En WSL conviene trabajar dentro del sistema de archivos de Linux (~ o /home/usuario) y no en /mnt/c/.... Es mucho más rápido y evita problemas de permisos.