Un shell de Unix, también llamado terminal o consola, es un programa que interpreta comandos de texto y los ejecuta en un sistema compatible con Unix. El shell actúa como interfaz de línea de comandos entre el usuario y el sistema operativo: recibe órdenes (desde el teclado o desde la entrada estándar), lanza programas, gestiona la entrada/salida y devuelve resultados o mensajes de error.
- ls — listar archivos y directorios
- cp — copiar archivos
- man — consultar las páginas de manual de los comandos
Funciones básicas
Además de ejecutar programas, los shells ofrecen mecanismos para:
- Redirección de entrada/salida ( >, >>, <) y tuberías (|).
- Expansión de comodines (globbing) y coincidencia de patrones.
- Sustitución de comandos ($(comando)) y concatenación de órdenes.
- Control de trabajos (ejecución en primer o segundo plano, fg, bg).
- Variables de entorno y variables de shell para configurar comportamiento y pasar información entre procesos.
Tipos y compatibilidad
Existen varias implementaciones de shell. Entre las más conocidas están sh (shell de Bourne), bash (Bourne Again SHell), csh (C Shell), ksh (KornShell), zsh y otras modernas como fish. Muchas utilidades y scripts se basan en el estándar POSIX para garantizar compatibilidad entre distintos shells; no obstante, cada implementación añade características propias, por lo que scripts escritos para un shell concreto pueden no funcionar sin modificaciones en otro.
Scripting
El shell también funciona como lenguaje de programación interpretado: los scripts de shell permiten automatizar tareas administrativas, iniciar programas, procesar texto y coordinar utilidades del sistema. Normalmente un script comienza con una línea llamada shebang, por ejemplo #!/bin/sh o #!/bin/bash, que indica qué intérprete debe ejecutar el archivo. Al escribir scripts se recomienda ceñirse, cuando sea posible, a construcciones portables (por ejemplo, POSIX) y documentar dependencias específicas del intérprete.
Archivos de inicio y personalización
Los shells leen archivos de configuración al iniciar sesiones interactivas o al ejecutar scripts. Entre los más comunes están .profile, .bashrc, .bash_profile, .zshrc, etc. Estos archivos permiten definir variables de entorno, alias, funciones y ajustes de historial y completado automático.
Seguridad y buenas prácticas
- Evitar ejecutar scripts descargados de fuentes no fiables sin revisarlos previamente.
- Usar comillas adecuadamente para prevenir expansiones inesperadas y problemas con caracteres especiales.
- Controlar el contenido de la variable PATH para no ejecutar programas arbitrarios por accidente.
- Limitar privilegios: usar sudo o cambiar a root sólo cuando sea necesario y con precaución.
Interactividad y accesibilidad
Los shells modernos incorporan funciones para mejorar la interacción: historial de comandos con búsquedas, completado de nombres de archivos y comandos, edición en línea (mediante bibliotecas como readline), colorización y plugins que amplían funcionalidades. Estas características facilitan el trabajo interactivo, pero pueden variar entre implementaciones.
Ejemplo
La sintaxis básica es similar entre muchos shells; por ejemplo, para conocer la arquitectura de la CPU es posible ejecutar el comando uname -m, que suele mostrar un identificador como x86_64, armv7l o similar.

