Comment exécuter un fichier .sh sous Linux : Guide complet pour les débutants et les administrateurs système
Les scripts shell sont l’épine dorsale de l’automatisation Linux. Que vous déployiez une application web, planifiiez des sauvegardes ou configuriez un serveur nouvellement provisionné, les fichiers .sh vous permettent de regrouper des séquences de commandes complexes dans un seul exécutable répétable. Ce guide vous guide à travers chaque méthode pour exécuter des scripts shell dans Linux — de l’exécution basique aux processus en arrière-plan et à la planification cron — avec les meilleures pratiques qui tiennent bon dans les environnements de production.
Qu’est-ce qu’un fichier .sh sous Linux ?
Un fichier .sh est un script en texte brut écrit en langage shell (généralement Bash ou POSIX sh) que le shell Linux interprète et exécute ligne par ligne. Les scripts shell sont utilisés pour :
- Automatiser les tâches répétitives d’administration système
- Déployer et configurer des applications
- Gérer les utilisateurs, les permissions et les systèmes de fichiers
- Planifier les tâches de maintenance comme les sauvegardes et la rotation des journaux
- Initialiser les nouveaux serveurs après le provisionnement
Si vous gérez un environnement VPS Hosting ou un Serveur Dédié, les scripts shell sont une compétence indispensable qui vous fera gagner des heures de travail manuel chaque semaine.
Prérequis
Avant d’exécuter tout fichier .sh, assurez-vous que vous avez :
- Accès à un terminal Linux (local ou via SSH)
- Un compte utilisateur avec les permissions appropriées
- Le fichier script déjà sur le système (créé localement ou transféré via SCP/SFTP)
Méthode 1 : Rendre le fichier exécutable avec chmod
Par défaut, les fichiers .sh nouvellement créés ou téléchargés n’ont pas de permissions d’exécution. Avant d’exécuter le script en tant que programme, vous devez explicitement accorder les droits d’exécution en utilisant la commande chmod.
chmod +x script.shPour vérifier que les permissions ont été appliquées correctement :
ls -l script.shVous devriez voir un résultat similaire à :
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shLes drapeaux x confirment que le fichier est maintenant exécutable par le propriétaire, le groupe et les autres.
> Conseil de sécurité : Si vous souhaitez restreindre l’exécution au seul propriétaire du fichier, utilisez chmod 700 script.sh à la place de chmod +x.
Méthode 2 : Exécuter le Script en Utilisant un Chemin Relatif ou Absolu
Une fois le fichier exécutable, vous pouvez l’exécuter directement depuis le terminal.
Utiliser un Chemin Relatif (Répertoire Courant)
Si le script se trouve dans votre répertoire de travail actuel, préfixez-le avec ./:
./script.shLe ./ indique au shell de chercher dans le répertoire courant plutôt que de parcourir le système $PATH.
Utiliser un Chemin Absolu
Si le script est stocké dans un autre emplacement, fournissez son chemin complet :
/home/user/scripts/script.shou
/usr/local/bin/script.shL’utilisation de chemins absolus est particulièrement importante lors de l’exécution de scripts à partir de tâches cron ou d’autres contextes automatisés où le répertoire de travail peut différer.
Méthode 3 : Exécuter le Script avec bash ou sh (Aucune Permission d’Exécution Requise)
Vous pouvez invoquer un script shell en appelant explicitement l’interpréteur, même si le fichier n’a pas de permissions d’exécution. Ceci est particulièrement utile pour tester rapidement un script avant de le rendre définitivement exécutable.
bash script.shou, pour les scripts conformes à POSIX :
sh script.shDifférence Entre bash et sh
| Commande | Interpréteur | Supporte les Fonctionnalités Spécifiques à Bash |
|---|---|---|
bash script.sh | GNU Bash | Oui |
sh script.sh | POSIX sh (souvent dash sur Ubuntu) | Non |
Si votre script utilise une syntaxe spécifique à Bash comme les tableaux, [[ ]] conditionnels, ou la substitution de processus, utilisez toujours bash plutôt que sh.
Méthode 4 : Exécuter le Script en tant que Superutilisateur (sudo)
Certains scripts nécessitent des privilèges au niveau root pour modifier les fichiers système, gérer les services, installer des packages ou modifier les configurations réseau. Utilisez sudo pour élever les permissions :
sudo ./script.shou transmettez le script directement à bash avec des droits élevés :
sudo bash script.shConsidérations Importantes en Matière de Sécurité
- Ne jamais exécuter un script en tant que root sans l’avoir lu au préalable. Un script malveillant ou mal écrit avec accès sudo peut causer des dommages système irréversibles.
- Préférez exécuter les scripts avec les privilèges minimaux requis.
- Si un script a seulement besoin d’écrire dans un répertoire spécifique, envisagez d’ajuster les permissions du répertoire plutôt que d’exécuter l’ensemble du script en tant que root.
Méthode 5 : Exécuter le Script en Arrière-plan
Par défaut, l’exécution d’un script dans le terminal bloque votre session jusqu’à ce que le script se termine. Pour les tâches longues — telles que les transferts de fichiers volumineux, les migrations de bases de données ou les constructions de serveur — vous voudrez envoyer le processus en arrière-plan.
Utiliser l’opérateur &
./script.sh &Le symbole & divise le processus en arrière-plan et rend immédiatement le contrôle à votre terminal. Le shell affiche le PID (Process ID) du travail en arrière-plan, que vous pouvez utiliser pour le surveiller ou l’arrêter ultérieurement.
Maintenir le Script en Exécution Après la Déconnexion avec nohup
Si vous vous déconnectez de SSH, les travaux en arrière-plan lancés avec & se termineront généralement. Utilisez nohup pour éviter cela :
nohup ./script.sh &La sortie est redirigée vers nohup.out par défaut. Pour spécifier un fichier journal personnalisé :
nohup ./script.sh > /var/log/myscript.log 2>&1 &Surveiller les Travaux en Arrière-plan
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éthode 6 : Planifier l’exécution de scripts avec Cron
Pour les tâches récurrentes — sauvegardes nocturnes, nettoyages hebdomadaires, vérifications de santé horaires — le planificateur cron intégré de Linux est la solution standard.
Ouvrir l’éditeur Crontab
crontab -eSyntaxe 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)Exemples pratiques de Cron
| Planification | Expression Cron | Cas d’usage |
|---|---|---|
| Chaque jour à 2:00 AM | 0 2 * * * | Sauvegarde de base de données nocturne |
| Chaque lundi à 6:00 AM | 0 6 * * 1 | Rotation hebdomadaire des journaux |
| Chaque heure | 0 * * * * | Vérification de surveillance de disponibilité |
| Toutes les 15 minutes | */15 * * * * | Actualisation du cache |
| Au redémarrage du système | @reboot | Démarrer un service ou un script au démarrage |
Exemple : Sauvegarde quotidienne automatisée
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Cela exécute backup.sh chaque jour à 2:00 AM et ajoute la sortie standard et les erreurs à un fichier journal pour l’audit.
> Conseil professionnel : Utilisez toujours des chemins absolus dans les entrées cron. Cron s’exécute avec un environnement minimal et peut ne pas avoir accès au même $PATH que votre shell interactif.
Méthode 7 : Sourcer un Script (Exécuter dans le Contexte du Shell Actuel)
Il existe une autre méthode d’exécution à connaître : le sourçage d’un script. Contrairement aux méthodes ci-dessus, le sourçage exécute le script dans la session shell actuelle plutôt que de créer un sous-shell. Cela signifie que toutes les variables ou fonctions définies dans le script persistent dans votre environnement actuel.
source script.shou de manière équivalente :
. script.shCeci est couramment utilisé pour charger des variables d’environnement, activer des environnements virtuels ou appliquer des modifications de configuration à la session actuelle.
Dépannage des erreurs courantes
| Message d’erreur | Cause probable | Solution |
|---|---|---|
Permission denied | Le fichier n’a pas la permission d’exécution | Exécutez chmod +x script.sh |
No such file or directory | Chemin incorrect ou fichier manquant | Vérifiez le chemin avec ls et pwd |
bad interpreter: No such file or directory | Ligne shebang incorrecte (par exemple, fins de ligne Windows) | Exécutez dos2unix script.sh pour corriger les fins de ligne |
command not found | Script non dans $PATH et sans préfixe ./ | Utilisez ./script.sh ou le chemin absolu complet |
syntax error near unexpected token | Script écrit pour bash mais exécuté avec sh | Utilisez bash script.sh explicitement |
Meilleures pratiques pour écrire et exécuter des scripts Shell
Suivre ces pratiques rendra vos scripts plus sûrs, plus maintenables et plus faciles à déboguer — en particulier dans les environnements serveur.
1. Commencez toujours par une ligne Shebang
La première ligne de chaque script doit déclarer l’interpréteur :
#!/bin/bashou pour une portabilité maximale :
#!/usr/bin/env bash2. Activez le mode strict
Ajoutez ceci près du haut de chaque script de production :
set -euo pipefail-e— Quitter immédiatement si une commande échoue-u— Traiter les variables non définies comme des erreurs-o pipefail— Détecter les défaillances dans les commandes en pipeline
3. Lisez le script avant de l’exécuter
N’exécutez jamais un fichier .sh provenant d’une source externe ou non fiable sans en examiner d’abord le contenu :
cat script.shou ouvrez-le dans un éditeur de texte. C’est particulièrement critique lors de l’exécution avec sudo.
4. Utilisez les commentaires généreusement
#!/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. Organisez les scripts dans des répertoires dédiés
| Répertoire | Utilisation recommandée |
|---|---|
/usr/local/bin/ | Scripts accessibles à tous les utilisateurs au niveau du système |
~/scripts/ ou ~/bin/ | Scripts personnels de l’utilisateur |
/opt/scripts/ | Scripts d’automatisation spécifiques à l’application |
/etc/cron.daily/ | Scripts à exécuter quotidiennement via cron |
6. Enregistrez la sortie du script
Redirigez toujours la sortie vers un fichier journal pour les scripts s’exécutant sans surveillance :
./script.sh >> /var/log/script.log 2>&17. Testez les scripts dans un environnement sûr d’abord
Avant de déployer un script sur un serveur de production, testez-le sur un environnement de staging ou une instance VPS jetable où les erreurs ne causeront pas de temps d’arrêt.
Exécution de scripts Shell sur un serveur Linux : Considérations pratiques
Lors de l’exécution de scripts sur un serveur Linux distant — qu’il s’agisse d’un environnement partagé ou d’une machine dédiée — quelques facteurs supplémentaires entrent en jeu :
- Accès SSH : La plupart des scripts côté serveur s’exécutent via SSH. Des outils comme
screenoutmuxvous permettent de maintenir des sessions persistantes afin que les scripts de longue durée survivent aux déconnexions. - Permissions utilisateur : Dans les environnements d’hébergement partagé, votre capacité à exécuter des scripts peut être limitée. Un VPS avec cPanel vous donne un accès root complet et un contrôle total sur l’exécution des scripts.
- Déploiements automatisés : Combinez les scripts shell avec les tâches cron pour automatiser les déploiements, les renouvellements de certificats (particulièrement utile avec les Certificats SSL), et les tâches de maintenance de routine.
- Variables d’environnement : Les scripts exécutés via cron ou SSH peuvent ne pas hériter de l’environnement de votre shell interactif. Définissez toutes les variables nécessaires explicitement dans le script ou sourcez un fichier de profil.
Référence rapide : Toutes les méthodes en un coup d’œil
| Méthode | Commande | Cas d’utilisation |
|---|---|---|
| Exécuter avec permission | chmod +x script.sh && ./script.sh | Exécution standard |
| Exécuter avec bash | bash script.sh | Aucune permission d’exécution requise |
| Exécuter avec sh | sh script.sh | Scripts compatibles POSIX |
| Exécuter en tant que root | sudo ./script.sh | Scripts nécessitant des privilèges élevés |
| Exécuter en arrière-plan | ./script.sh & | Exécution non-bloquante |
| Exécuter de manière persistante | nohup ./script.sh & | Survivre à la déconnexion SSH |
| Planifier avec cron | crontab -e | Tâches automatisées récurrentes |
| Sourcer le script | source script.sh | Appliquer les modifications au shell actuel |
Conclusion
L’exécution de fichiers .sh dans Linux est une compétence fondamentale qui déverrouille toute la puissance de l’automatisation système. Le flux de travail principal est simple : accordez la permission d’exécution avec chmod +x, puis exécutez le script avec ./script.sh ou bash script.sh. Pour les environnements de production, combinez les chemins absolus, le mode strict, la journalisation et la planification cron pour construire des pipelines d’automatisation robustes et fiables.
Si vous gérez des scripts sur un serveur, la qualité de votre infrastructure d’hébergement est importante. L’hébergement VPS et les serveurs dédiés d’AlexHost vous donnent un accès root complet, une disponibilité stable et les performances dont vous avez besoin pour exécuter les charges de travail d’automatisation en toute confiance — que vous planifiiez des sauvegardes nocturnes, déployiez des applications ou gériez des flux de travail multi-scripts complexes.
sur tous les services d'hébergement