$ fondamentaux bash

Comprendre Bash
de zéro à ta stack

Un cours pratique orienté ton environnement réel : VPS Hostinger, Docker, Coolify, n8n, Supabase — et les agents LLM.

Niveau
Débutant → Intermédiaire
Durée estimée
~2h lecture + pratique
Prérequis
Accès SSH à ton VPS
01

C'est quoi bash ?

Bash est un interpréteur de commandes — un programme qui lit des instructions en texte et les exécute sur le système d'exploitation Linux. Quand tu ouvres un terminal et tu tapes quelque chose, c'est bash qui lit, comprend et exécute.

Le nom signifie Bourne Again SHell — une réécriture du shell original Unix des années 70. Il est présent sur absolument tous les serveurs Linux sans aucune installation requise. C'est pourquoi tous les guides, scripts d'installation, Docker, Coolify, et les agents LLM s'appuient dessus.

Analogie simple : Bash est au serveur Linux ce que le terminal Windows est à Windows — mais beaucoup plus puissant, universel, et scriptable.

Sur ton PC portable sous macOS ou Linux, c'est bash (ou zsh, son cousin direct) que tu utilises dans le terminal. Sur ton VPS Hostinger, c'est bash que tu pilotes via SSH. Même commandes, même logique, partout.

02

La place de bash dans ta stack

Voici comment bash s'insère concrètement dans ton environnement MultiBrasServices :

Toi (SSH) ──→ Bash (shell) ──→ Linux kernel
               ↑ tu tapes ici       ↑ traduit           ↑ exécute vraiment

Bash ──→ Docker ──→ Coolify / n8n / Supabase
         commandes docker        tes conteneurs tournent ici

Claude (LLM) ──→ bash_tool ──→ Bash ──→ Linux
                    ↑ outil connecté      ↑ même shell, même puissance

Bash n'est pas "à côté" de Docker ou Coolify — il est en dessous. Quand Coolify installe un service, il exécute des commandes bash. Quand un agent LLM agit sur une machine, il passe par bash. La boîte noire devient transparente dès que tu comprends le shell.

Clé de compréhension : Quand Claude utilise bash_tool dans cette conversation, il fait exactement ce que tu ferais en tapant dans ton terminal SSH. Même niveau d'accès, même commandes.

03

Lire une ligne de commande

Avant de taper quoi que ce soit, il faut savoir lire ce qu'on voit dans un terminal. Chaque partie a un sens précis.

Le prompt — ce qui s'affiche avant ta commande

anatomie du prompt
ulrich@vps:~$ ma-commande # ↑↑↑↑↑↑ ↑ ↑↑↑ ↑ ↑ ↑ # user @ host : ~ $   # ulrich → l'utilisateur connecté # @vps → le nom de la machine (ton VPS Hostinger) # :~ → le dossier courant (~ = ton home /home/ulrich) # $ → tu es un utilisateur normal (# = tu es root/admin)   # Exemples de prompts selon où tu es : ulrich@vps:~$ ← dans /home/ulrich ulrich@vps:/opt/coolify$ ← dans /opt/coolify root@vps:/# ← connecté en root, à la racine du système

La structure d'une commande

anatomie d'une commande
$ docker logs -f --tail 100 n8n # ↑ ↑ ↑ ↑ ↑ # commande sous- option option longue argument # cmd courte avec valeur (nom du conteneur)   # Options courtes : -f -r -la -n 50 # Options longues : --follow --recursive --tail=100 # On peut souvent combiner : -la = -l + -a   # Exemples réels : $ ls -la /opt/coolify ← commande + options + argument $ tail -f -n 50 app.log ← 2 options + argument $ docker ps ← commande + sous-commande, pas d'argument

Les chemins : absolu vs relatif

chemins
# Chemin ABSOLU — commence toujours par / # Même résultat peu importe où tu es $ cd /opt/coolify ← va dans /opt/coolify depuis n'importe où $ cat /home/ulrich/.env   # Chemin RELATIF — part de là où tu es actuellement ulrich@vps:/opt$ cd coolify ← = cd /opt/coolify ulrich@vps:/opt$ cd ../home ← remonte d'un niveau, va dans home ulrich@vps:/opt$ ./script.sh ← exécute script.sh dans le dossier courant

Les caractères spéciaux

CaractèreSignification
~Ton dossier home (/home/ulrich). cd ~ te ramène toujours chez toi.
.Le dossier courant. ./script.sh = exécute dans le dossier où tu es.
..Le dossier parent. cd .. remonte d'un niveau.
*Wildcard — correspond à n'importe quoi. *.log = tous les fichiers .log.
$Préfixe d'une variable. $NOM = valeur de la variable NOM.
#Commentaire dans un script. Tout ce qui suit est ignoré par bash.
/Séparateur de chemin ET racine du système (/ seul = la racine absolue).
-Préfixe d'une option courte (-f), ou chemin spécial : cd - retourne au dossier précédent.

Le code de retour — bash sait si ça a marché

code de retour $?
# Après chaque commande, bash stocke un code dans $? # 0 = succès | tout autre nombre = erreur   $ docker ps CONTAINER ID IMAGE ... $ echo $? 0 ← succès   $ cat fichier-inexistant.txt cat: fichier-inexistant.txt: No such file or directory $ echo $? 1 ← erreur   # C'est pour ça que && fonctionne : apt update && apt upgrade ← upgrade seulement si update renvoie 0
À retenir : Le prompt te dit qui tu es, où tu es et avec quels droits. Avant de taper une commande destructive, lis ton prompt — deux secondes qui évitent de supprimer le mauvais dossier.
05

Lire des fichiers & chercher

Indispensable pour inspecter des logs, des configs, des fichiers .env sur ton VPS sans ouvrir un éditeur graphique.

CommandeDescription
cat fichierAffiche le contenu entier d'un fichier
less fichierLecture paginée (q pour quitter, / pour chercher)
head -n 20 fichierAffiche les 20 premières lignes
tail -n 50 fichierAffiche les 50 dernières lignes
tail -f fichierSuit le fichier en temps réel — parfait pour les logs live
grep "mot" fichierCherche "mot" dans un fichier
grep -r "mot" dossier/Cherche récursivement dans tous les fichiers
find / -name "*.env"Trouve tous les fichiers .env sur le système
bash — logs & recherche
# Voir les logs de n8n en direct (Ctrl+C pour arrêter) ulrich@vps:~$ docker logs -f n8n [2026-05-11] INFO Workflow executed successfully [2026-05-11] INFO Webhook received...   # Chercher une erreur dans les logs Coolify ulrich@vps:~$ grep -r "ERROR" /var/log/coolify/ app.log: ERROR Connection refused on port 5432   # Inspecter un .env sans éditeur ulrich@vps:~$ cat /opt/n8n/.env N8N_PORT=5678 DB_TYPE=postgresdb
Astuce VPS : tail -f est ta meilleure arme pour déboguer. Lance-le sur les logs d'un service pendant que tu testes — les erreurs apparaissent en direct.
06

Processus & services

Comprendre ce qui tourne sur ta machine. Crucial quand un port est occupé, qu'un service ne répond plus, ou que la RAM est pleine.

CommandeDescription
ps auxListe tous les processus en cours
topVue temps réel CPU/RAM (q pour quitter)
htopVersion améliorée de top (à installer via apt)
kill PIDArrête un processus par son numéro
kill -9 PIDForce l'arrêt immédiat (ne peut pas être ignoré)
lsof -i :8080Quel processus utilise le port 8080 ?
systemctl status nginxÉtat d'un service système
docker psConteneurs Docker actifs
docker ps -aTous les conteneurs (même arrêtés)
df -hEspace disque disponible
free -hRAM utilisée / disponible
bash — diagnostic port occupé
# Mon service ne démarre pas — port 3000 occupé ? ulrich@vps:~$ lsof -i :3000 COMMAND PID USER FD TYPE NODE NAME node 1423 ulrich 12u IPv4 TCP *:3000 (LISTEN)   # Je vois le PID 1423 — je vérifie ce que c'est ulrich@vps:~$ ps aux | grep 1423 ulrich 1423 node /opt/old-app/server.js   # Vieux process oublié — je l'arrête proprement ulrich@vps:~$ kill 1423
07

Droits & permissions

Sur Linux, chaque fichier a des droits de lecture (r), écriture (w) et exécution (x) pour son propriétaire, son groupe, et les autres. Beaucoup d'erreurs mystérieuses sur un VPS viennent de permissions incorrectes.

bash — lire les droits
ulrich@vps:~$ ls -la -rwxr-xr-- ulrich staff backup.sh # ↑↑↑ propriétaire : peut lire, écrire, exécuter # ↑↑↑ groupe : peut lire et exécuter # ↑↑↑ autres : peuvent seulement lire
CommandeDescription
chmod +x script.shRend un script exécutable
chmod 644 fichierrw-r--r-- : lisible par tous, modifiable seulement par toi
chmod 600 .envrw------- : uniquement toi (idéal pour les secrets)
chmod 755 dossier/rwxr-xr-x : standard pour les dossiers web
chown user:group fichierChange le propriétaire d'un fichier
sudo commandeExécute en tant que super-administrateur
whoamiAffiche l'utilisateur courant
Bonne pratique : Tes fichiers .env contenant des clés API et mots de passe doivent toujours être en chmod 600. Jamais lisibles par d'autres utilisateurs sur le serveur.
08

Pipes & redirections

Le vrai superpouvoir de bash : enchaîner des commandes. La sortie d'une commande devient l'entrée de la suivante. C'est ce qui permet d'écrire des one-liners très puissants.

SymboleDescription
cmd1 | cmd2Pipe — envoie la sortie de cmd1 vers cmd2
cmd > fichierRedirige la sortie vers un fichier (écrase le contenu)
cmd >> fichierAjoute à la fin du fichier sans écraser
cmd 2> erreurs.logRedirige uniquement les erreurs vers un fichier
cmd1 && cmd2Exécute cmd2 seulement si cmd1 réussit (code 0)
cmd1 || cmd2Exécute cmd2 seulement si cmd1 échoue
bash — pipes en pratique
# Compter les erreurs dans les logs Docker ulrich@vps:~$ docker logs n8n | grep "error" | wc -l 7   # Archiver les logs du jour ulrich@vps:~$ docker logs n8n >> /var/log/n8n-backup.log   # Mettre à jour ET redémarrer — seulement si la mise à jour réussit ulrich@vps:~$ apt update && apt upgrade -y && systemctl restart nginx   # Filtrer les conteneurs actifs par nom ulrich@vps:~$ docker ps | grep coolify a3f1b coolify:latest Up 3 days 0.0.0.0:8000->8000/tcp coolify
09

Variables & scripts bash

Dès que tu répètes plus de 3 commandes, pense à un script. Un fichier .sh automatise des tâches récurrentes — backups, déploiements, maintenance du VPS.

bash — variables
# Assigner une variable (pas d'espaces autour du =) ulrich@vps:~$ NOM="zoomali" ulrich@vps:~$ echo "Projet : $NOM" Projet : zoomali   # Variable calculée : résultat d'une commande ulrich@vps:~$ DATE=$(date +%Y%m%d) ulrich@vps:~$ echo $DATE 20260511
backup-supabase.sh
#!/bin/bash # Script de backup automatique — MultiBrasServices   DB_NAME="zoomali_prod" BACKUP_DIR="/opt/backups" DATE=$(date +%Y%m%d_%H%M)   mkdir -p $BACKUP_DIR pg_dump $DB_NAME > $BACKUP_DIR/backup_$DATE.sql   echo "✅ Backup terminé : backup_$DATE.sql"
bash — exécuter le script
# Rendre le script exécutable (une seule fois) ulrich@vps:~$ chmod +x backup-supabase.sh   # Lancer ulrich@vps:~$ ./backup-supabase.sh ✅ Backup terminé : backup_20260511_2130.sql

⚠ 10

rm — la commande la plus dangereuse

💀 Pas de corbeille. Pas d'annulation. Immédiat.

Sur Linux, rm supprime définitivement. Il n'y a aucune corbeille, aucun Ctrl+Z possible. La suppression est instantanée et irréversible — même en production sur un VPS avec des clients.

Les différentes formes de rm et leurs niveaux de risque :

rm — du moins au plus dangereux
# Supprime un fichier unique — relativement sûr si tu vises bien ulrich@vps:~$ rm fichier.txt   # -r = récursif, supprime un dossier et TOUT son contenu ulrich@vps:~$ rm -r mon-dossier/   # -f = force, passe outre les protections, aucune confirmation ulrich@vps:~$ rm -rf mon-dossier/   ⚠ DANGER ABSOLU — supprime le système entier en quelques secondes ulrich@vps:~$ rm -rf /  ← NE JAMAIS TAPER ÇA # Détruit complètement le serveur. Irrécupérable.   ⚠ Variante avec espace accidentel — aussi catastrophique ulrich@vps:~$ rm -rf /opt /coolify ← espace = supprime /opt ENTIER d'abord

Le scénario classique de catastrophe — le wildcard :

le piège du * (wildcard)
# Objectif : supprimer les fichiers .log dans /opt/logs # Problème : tu t'es trompé de dossier courant   ulrich@vps:/opt/coolify$ rm -rf *.log # Si aucun .log n'existe ici mais que le shell expand * différemment # tu peux supprimer des fichiers non voulus   ✅ La bonne méthode : vérifier avec ls AVANT de supprimer ulrich@vps:~$ ls *.log  ← je vois exactement ce qui sera supprimé app.log debug.log access.log ulrich@vps:~$ rm *.log  ← maintenant je supprime en confiance

Les protections disponibles :

rm — options de sécurité
# -i = interactif, demande confirmation pour chaque fichier ulrich@vps:~$ rm -i fichier.txt rm: remove 'fichier.txt'? y   # Simuler sans supprimer — affiche la commande sans l'exécuter ulrich@vps:~$ echo rm -rf /opt/vieux-projet/ rm -rf /opt/vieux-projet/  ← vérifie avant d'enlever le "echo"   # Alias de sécurité à ajouter dans ~/.bashrc alias rm='rm -i'  ← toujours demander confirmation
Règle d'or : Sur un VPS en production — avant tout rm -rf, fais d'abord un ls sur la cible pour voir exactement ce qui sera supprimé. Deux secondes qui peuvent sauver ton serveur et tes clients.
⚠ 11

Autres commandes à manier avec précaution

Ce ne sont pas des commandes à éviter — ce sont des commandes à comprendre avant d'utiliser.

🔥 dd — le "destroyer de données"

La commande dd copie des données brutes octet par octet. Utilisée pour flasher des disques, créer des images système. Une erreur dans if= (source) ou of= (destination) et tu écrases un disque entier silencieusement.

dd
dd if=/dev/sda of=/dev/sdb ← écrase sdb avec sda. Irrécupérable. # Toujours vérifier if= (source) et of= (destination) deux fois
⚡ chmod -R 777 — la fausse bonne idée

Quand un service refuse de lire un fichier, la tentation est d'ouvrir les droits à tout le monde avec 777. Sur un VPS, c'est ouvrir la porte : n'importe qui peut lire tes clés API, modifier tes configs, exécuter du code.

permissions
chmod -R 777 /var/www/ ← tout le monde peut tout lire ET modifier chmod -R 755 /var/www/ ← ✅ lecture pour tous, écriture seulement toi chmod 600 .env         ← ✅ secrets : toi seulement
🧨 > fichier seul — le vidage silencieux

Le symbole > seul, sans commande devant, vide instantanément un fichier. Une faute de frappe peut détruire un fichier de config essentiel.

redirection accidentelle
> /etc/nginx/nginx.conf ← vide la config nginx. Service cassé. cp /etc/nginx/nginx.conf nginx.conf.bak ← ✅ toujours sauvegarder avant
📋 Coller une commande inconnue avec sudo

Ne jamais copier-coller une commande depuis internet sans la comprendre, surtout avec sudo. C'est le vecteur d'attaque numéro un sur les VPS. Si tu ne comprends pas une ligne, demande avant d'exécuter — à moi, ou sur un forum de confiance.

12

Bonnes pratiques sur ton VPS

Les réflexes à acquérir pour travailler sereinement, même sous pression.

CommandePourquoi c'est important
pwdToujours vérifier où tu es avant une suppression ou modification
lsVérifier ce qui existe avant d'utiliser rm ou >
cp fichier fichier.bakCopier avant de modifier un fichier de config important
historyVoir les dernières commandes — utile pour retrouver ce qui a planté
man commandeLire le manuel d'une commande avant de l'utiliser
commande --helpAide rapide sur les options disponibles
which commandeSavoir où est installée une commande
Alias de sécurité : Ajoute ces lignes dans ton ~/.bashrc sur le VPS et recharge avec source ~/.bashrc :
~/.bashrc — alias recommandés
# Sécurité — demande toujours confirmation alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'   # Raccourcis pratiques alias ll='ls -la' alias dps='docker ps' alias dlogs='docker logs -f' alias disk='df -h' alias mem='free -h'   # Appliquer les changements ulrich@vps:~$ source ~/.bashrc
La règle des 3 secondes : Avant toute commande destructive sur le VPS (rm, dd, >, chmod -R), prends 3 secondes pour relire ce que tu as tapé. La plupart des catastrophes sur serveur arrivent dans la précipitation ou le copier-coller rapide.