Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Administración Linux

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.sh

Para verificar que los permisos se aplicaron correctamente:

ls -l script.sh

Debería ver una salida similar a:

-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.sh

Los 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.sh

El ./ 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.sh

o

/usr/local/bin/script.sh

El 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.sh

o, para scripts compatibles con POSIX:

sh script.sh

Diferencia Entre bash y sh

ComandoIntérpreteSoporta Características Específicas de Bash
bash script.shGNU Bash
sh script.shPOSIX 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.sh

o pasa el script directamente a bash con derechos elevados:

sudo bash script.sh

Consideraciones 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 process

Mé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 -e

Sintaxis 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ónExpresión CronCaso de Uso Ejemplo
Todos los días a las 2:00 AM0 2 * * *Copia de seguridad de base de datos nocturna
Todos los lunes a las 6:00 AM0 6 * * 1Rotación de registros semanal
Cada hora0 * * * *Verificación de monitoreo de disponibilidad
Cada 15 minutos*/15 * * * *Actualización de caché
Al reiniciar el sistema@rebootIniciar un servicio o script al arrancar

Ejemplo: Copia de Seguridad Diaria Automatizada

0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Esto 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.sh

o equivalentemente:

. script.sh

Esto 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 errorCausa probableSolución
Permission deniedEl archivo carece de permiso de ejecuciónEjecuta chmod +x script.sh
No such file or directoryRuta incorrecta o archivo faltanteVerifica la ruta con ls y pwd
bad interpreter: No such file or directoryLínea shebang incorrecta (p. ej., finales de línea de Windows)Ejecuta dos2unix script.sh para corregir los finales de línea
command not foundScript no en $PATH y sin prefijo ./Usa ./script.sh o ruta absoluta completa
syntax error near unexpected tokenScript escrito para bash pero ejecutado con shUsa 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/bash

o para máxima portabilidad:

#!/usr/bin/env bash

2. 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.sh

o á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

DirectorioUso 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>&1

7. 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 screen o tmux te 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étodoComandoCaso de Uso
Ejecutar con permisochmod +x script.sh && ./script.shEjecución estándar
Ejecutar con bashbash script.shSin necesidad de permiso de ejecución
Ejecutar con shsh script.shScripts compatibles con POSIX
Ejecutar como rootsudo ./script.shScripts que requieren privilegios elevados
Ejecutar en segundo plano./script.sh &Ejecución sin bloqueo
Ejecutar de forma persistentenohup ./script.sh &Sobrevivir al cierre de sesión SSH
Programar con croncrontab -eTareas automatizadas recurrentes
Cargar el scriptsource script.shAplicar 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.