Cómo ejecutar un archivo .sh en Linux: Guía completa para principiantes y administradores de sistemas
Los scripts de shell son la columna vertebral de la automatización en Linux. Ya sea que estés desplegando una aplicación web, programando copias de seguridad o configurando un servidor recién aprovisionado, los archivos .sh te permiten agrupar secuencias de comandos complejas en un único ejecutable repetible. Esta guía te lleva a través de cada método para ejecutar scripts de shell en Linux — desde la ejecución básica hasta procesos en segundo plano y programación con cron — con mejores prácticas que se mantienen en entornos de producción.
¿Qué es un archivo .sh en Linux?
Un archivo .sh es un script de texto plano escrito en lenguaje shell (típicamente Bash o POSIX sh) que el shell de Linux interpreta y ejecuta línea por línea. Los scripts de shell se utilizan para:
- Automatizar tareas repetitivas de administración del sistema
- Desplegar y configurar aplicaciones
- Gestionar usuarios, permisos y sistemas de archivos
- Programar trabajos de mantenimiento como copias de seguridad y rotación de registros
- Inicializar nuevos servidores después del aprovisionamiento
Si estás gestionando un entorno de VPS Hosting o un Servidor Dedicado, la programación de scripts de shell es una habilidad indispensable que te ahorrará horas de trabajo manual cada semana.
Requisitos previos
Antes de ejecutar cualquier archivo .sh, asegúrate de que tengas:
- Acceso a una terminal Linux (local o a través de SSH)
- Una cuenta de usuario con permisos apropiados
- El archivo de script ya en el sistema (creado localmente o transferido a través de SCP/SFTP)
Método 1: Hacer el archivo ejecutable con chmod
Por defecto, los archivos .sh recién creados o descargados no tienen permisos de ejecución. Antes de ejecutar el script como un programa, debe otorgar explícitamente derechos de ejecución usando el comando chmod.
chmod +x script.shPara verificar que los permisos se aplicaron correctamente:
ls -l script.shDebería ver una salida similar a:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shLos flags x confirman que el archivo ahora es ejecutable por el propietario, el grupo y otros.
> Consejo de seguridad: Si desea restringir la ejecución solo al propietario del archivo, use chmod 700 script.sh en lugar de chmod +x.
Método 2: Ejecutar el Script Usando una Ruta Relativa o Absoluta
Una vez que el archivo es ejecutable, puedes ejecutarlo directamente desde la terminal.
Usando una Ruta Relativa (Directorio Actual)
Si el script está en tu directorio de trabajo actual, prefijalo con ./:
./script.shEl ./ le indica al shell que busque en el directorio actual en lugar de buscar en el sistema $PATH.
Usando una Ruta Absoluta
Si el script se almacena en otra ubicación, proporciona su ruta completa:
/home/user/scripts/script.sho
/usr/local/bin/script.shEl uso de rutas absolutas es especialmente importante cuando se ejecutan scripts desde trabajos cron u otros contextos automatizados donde el directorio de trabajo puede diferir.
Método 3: Ejecutar el Script con bash o sh (Sin Permiso de Ejecución Requerido)
Puedes invocar un script de shell llamando explícitamente al intérprete, incluso si el archivo carece de permisos de ejecución. Esto es particularmente útil para probar rápidamente un script antes de hacerlo permanentemente ejecutable.
bash script.sho, para scripts compatibles con POSIX:
sh script.shDiferencia Entre bash y sh
| Comando | Intérprete | Soporta Características Específicas de Bash |
|---|---|---|
bash script.sh | GNU Bash | Sí |
sh script.sh | POSIX sh (a menudo dash en Ubuntu) | No |
Si tu script utiliza sintaxis específica de Bash como arrays, [[ ]] condicionales, o sustitución de procesos, siempre usa bash en lugar de sh.
Método 4: Ejecutar el Script como Superusuario (sudo)
Algunos scripts requieren privilegios de nivel raíz para modificar archivos del sistema, gestionar servicios, instalar paquetes o cambiar configuraciones de red. Usa sudo para elevar permisos:
sudo ./script.sho pasa el script directamente a bash con derechos elevados:
sudo bash script.shConsideraciones Importantes de Seguridad
- Nunca ejecutes un script como root sin leerlo primero. Un script malicioso o mal escrito con acceso sudo puede causar daños irreversibles al sistema.
- Prefiere ejecutar scripts con los privilegios mínimos requeridos.
- Si un script solo necesita escribir en un directorio específico, considera ajustar los permisos del directorio en lugar de ejecutar el script completo como root.
Método 5: Ejecutar el Script en Segundo Plano
Por defecto, ejecutar un script en la terminal bloquea tu sesión hasta que se complete el script. Para tareas de larga duración — como transferencias de archivos grandes, migraciones de bases de datos o compilaciones de servidores — querrás enviar el proceso al segundo plano.
Usando el Operador &
./script.sh &El símbolo & bifurca el proceso al segundo plano y devuelve inmediatamente el control a tu terminal. El shell imprime el PID (ID de Proceso) del trabajo en segundo plano, que puedes usar para monitorearlo o terminarlo más tarde.
Mantener el Script Ejecutándose Después de Desconectarse con nohup
Si te desconectas de SSH, los trabajos en segundo plano lanzados con & típicamente se terminarán. Usa nohup para evitar esto:
nohup ./script.sh &La salida se redirige a nohup.out por defecto. Para especificar un archivo de registro personalizado:
nohup ./script.sh > /var/log/myscript.log 2>&1 &Monitorear Trabajos en Segundo Plano
jobs # List background jobs in the current session
ps aux | grep script.sh # Find the process by name
kill PID # Terminate a specific background processMétodo 6: Programar la Ejecución de Scripts con Cron
Para tareas recurrentes — copias de seguridad nocturnas, limpiezas semanales, verificaciones de salud cada hora — el programador cron integrado de Linux es la solución estándar.
Abrir el Editor Crontab
crontab -eSintaxis de Cron
* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └── Day of week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)Ejemplos Prácticos de Cron
| Programación | Expresión Cron | Caso de Uso Ejemplo |
|---|---|---|
| Todos los días a las 2:00 AM | 0 2 * * * | Copia de seguridad de base de datos nocturna |
| Todos los lunes a las 6:00 AM | 0 6 * * 1 | Rotación de registros semanal |
| Cada hora | 0 * * * * | Verificación de monitoreo de disponibilidad |
| Cada 15 minutos | */15 * * * * | Actualización de caché |
| Al reiniciar el sistema | @reboot | Iniciar un servicio o script al arrancar |
Ejemplo: Copia de Seguridad Diaria Automatizada
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Esto ejecuta backup.sh todos los días a las 2:00 AM y añade tanto la salida estándar como los errores a un archivo de registro para auditoría.
> Consejo profesional: Siempre usa rutas absolutas en entradas cron. Cron se ejecuta con un entorno mínimo y puede no tener acceso al mismo $PATH que tu shell interactivo.
Método 7: Obtener un Script (Ejecutar en el Contexto del Shell Actual)
Hay un método de ejecución más que vale la pena conocer: obtener un script. A diferencia de los métodos anteriores, obtener un script lo ejecuta dentro de la sesión del shell actual en lugar de generar un subshell. Esto significa que cualquier variable o función definida en el script persiste en tu entorno actual.
source script.sho equivalentemente:
. script.shEsto se usa comúnmente para cargar variables de entorno, activar entornos virtuales o aplicar cambios de configuración a la sesión actual.
Solución de errores comunes
| Mensaje de error | Causa probable | Solución |
|---|---|---|
Permission denied | El archivo carece de permiso de ejecución | Ejecuta chmod +x script.sh |
No such file or directory | Ruta incorrecta o archivo faltante | Verifica la ruta con ls y pwd |
bad interpreter: No such file or directory | Línea shebang incorrecta (p. ej., finales de línea de Windows) | Ejecuta dos2unix script.sh para corregir los finales de línea |
command not found | Script no en $PATH y sin prefijo ./ | Usa ./script.sh o ruta absoluta completa |
syntax error near unexpected token | Script escrito para bash pero ejecutado con sh | Usa bash script.sh explícitamente |
Mejores prácticas para escribir y ejecutar scripts de Shell
Seguir estas prácticas hará que tus scripts sean más seguros, mantenibles y fáciles de depurar, especialmente en entornos de servidor.
1. Siempre comienza con una línea Shebang
La primera línea de cada script debe declarar el intérprete:
#!/bin/basho para máxima portabilidad:
#!/usr/bin/env bash2. Habilita el modo estricto
Añade esto cerca del inicio de cada script de producción:
set -euo pipefail-e— Salir inmediatamente si algún comando falla-u— Tratar variables no establecidas como errores-o pipefail— Capturar fallos en comandos encadenados
3. Lee el script antes de ejecutarlo
Nunca ejecutes un archivo .sh de una fuente externa o no confiable sin revisar su contenido primero:
cat script.sho ábrelo en un editor de texto. Esto es especialmente crítico cuando se ejecuta con sudo.
4. Usa comentarios abundantemente
#!/bin/bash
# backup.sh — Daily backup script for /var/www
# Author: sysadmin@example.com
# Last updated: 2024-06-10
# Define source and destination directories
SOURCE="/var/www"
DEST="/mnt/backup"5. Organiza scripts en directorios dedicados
| Directorio | Uso recomendado |
|---|---|
/usr/local/bin/ | Scripts accesibles a nivel del sistema para todos los usuarios |
~/scripts/ o ~/bin/ | Scripts personales del usuario |
/opt/scripts/ | Scripts de automatización específicos de la aplicación |
/etc/cron.daily/ | Scripts para ejecutar diariamente vía cron |
6. Registra la salida del script
Siempre redirige la salida a un archivo de registro para scripts que se ejecutan sin supervisión:
./script.sh >> /var/log/script.log 2>&17. Prueba scripts en un entorno seguro primero
Antes de implementar un script en un servidor de producción, pruébalo en un entorno de staging o en una instancia de VPS desechable donde los errores no causen tiempo de inactividad.
Ejecutar Scripts de Shell en un Servidor Linux: Consideraciones Prácticas
Al ejecutar scripts en un servidor Linux remoto — ya sea en un entorno compartido o en una máquina dedicada — entran en juego algunos factores adicionales:
- Acceso SSH: La mayoría de los scripts del lado del servidor se ejecutan a través de SSH. Herramientas como
screenotmuxte permiten mantener sesiones persistentes para que los scripts de larga duración sobrevivan a las desconexiones. - Permisos de usuario: En entornos de hosting compartido, tu capacidad para ejecutar scripts puede ser limitada. Un VPS con cPanel te proporciona acceso root completo y control total sobre la ejecución de scripts.
- Despliegues automatizados: Combina scripts de shell con trabajos cron para automatizar despliegues, renovaciones de certificados (especialmente útil junto con Certificados SSL) y tareas de mantenimiento rutinario.
- Variables de entorno: Los scripts que se ejecutan a través de cron o SSH pueden no heredar el entorno de tu shell interactivo. Define todas las variables necesarias explícitamente dentro del script o carga un archivo de perfil.
Referencia Rápida: Todos los Métodos de un Vistazo
| Método | Comando | Caso de Uso |
|---|---|---|
| Ejecutar con permiso | chmod +x script.sh && ./script.sh | Ejecución estándar |
| Ejecutar con bash | bash script.sh | Sin necesidad de permiso de ejecución |
| Ejecutar con sh | sh script.sh | Scripts compatibles con POSIX |
| Ejecutar como root | sudo ./script.sh | Scripts que requieren privilegios elevados |
| Ejecutar en segundo plano | ./script.sh & | Ejecución sin bloqueo |
| Ejecutar de forma persistente | nohup ./script.sh & | Sobrevivir al cierre de sesión SSH |
| Programar con cron | crontab -e | Tareas automatizadas recurrentes |
| Cargar el script | source script.sh | Aplicar cambios al shell actual |
Conclusión
Ejecutar archivos .sh en Linux es una habilidad fundamental que desbloquea todo el poder de la automatización del sistema. El flujo de trabajo principal es simple: otorgar permiso de ejecución con chmod +x, luego ejecutar el script con ./script.sh o bash script.sh. Para entornos de producción, combina rutas absolutas, modo estricto, registro y programación cron para construir canalizaciones de automatización robustas y confiables.
Si estás gestionando scripts en un servidor, la calidad de tu infraestructura de hosting es importante. El VPS Hosting y los Servidores Dedicados de AlexHost te dan acceso root completo, tiempo de actividad estable y el rendimiento que necesitas para ejecutar cargas de trabajo de automatización con confianza — ya sea que estés programando copias de seguridad nocturnas, implementando aplicaciones o gestionando flujos de trabajo complejos de múltiples scripts.
en todos los servicios de hosting