La ligne de commande et Bash
Naviguer, manipuler des fichiers, chercher, enchaîner des commandes avec les tuyaux, gérer les permissions et écrire ses premiers scripts. Le terminal, outil quotidien de tout·e dev.
À la fin du cours, tu sais
- Comprendre ce qu'est un terminal, un shell et Bash
- Se repérer et naviguer dans l'arborescence des dossiers
- Créer, copier, déplacer et supprimer fichiers et dossiers
- Lire et chercher du contenu dans les fichiers
- Enchaîner des commandes avec les tuyaux et les redirections
- Comprendre les permissions et rendre un fichier exécutable
- Écrire et lancer un premier script Bash
Prérequis
- Aucun prérequis technique : ce cours part de zéro
- Un terminal : celui de macOS ou Linux, ou WSL / Git Bash sur Windows
Étape 1 sur 11 : Pourquoi le terminal
Chapitre 1
Pourquoi le terminal
Cette fenêtre noire pleine de texte fait peur au début, mais c'est l'outil le plus puissant et le plus universel du développement.
Quand on débute, le terminal intimide : un écran sombre, un curseur qui clignote, aucun bouton. Pourtant, c'est l'outil que tout·e développeur·euse utilise chaque jour, pour une raison simple : il est plus rapide, plus précis et plus puissant que les interfaces graphiques pour une foule de tâches. Là où tu cliquerais dix fois dans des fenêtres, une seule ligne de commande fait le travail, et peut même être répétée ou automatisée.
Autre atout décisif : le terminal est universel. Git, Node, Docker, le déploiement de sites, les serveurs distants : presque tous les outils du métier se pilotent en ligne de commande. Un serveur en production n'a d'ailleurs souvent pas d'interface graphique du tout : le terminal est le seul moyen d'y agir. Apprendre le terminal, ce n'est pas une option, c'est un passage obligé, et c'est bien plus accessible qu'il n'y paraît.
Terminal, shell, Bash : trois mots à distinguer
- Le terminal : la fenêtre, l'application dans laquelle tu tapes. C'est le contenant.
- Le shell : le programme qui lit tes commandes, les exécute et te répond. C'est le moteur.
- Bash : le shell le plus répandu (avec
zsh, très proche). C'est une variété de moteur.
En clair : tu ouvres un terminal, qui fait tourner un shell comme Bash, auquel tu donnes des commandes. Ces distinctions sont un peu théoriques au début, mais elles t'évitent la confusion quand on parle de « ton shell » ou de « script Bash ». Sur macOS, le shell par défaut est aujourd'hui zsh, quasi identique à Bash pour tout ce que tu apprendras ici.
L'anatomie d'une commande
ls -l /Users/alice
# │ │ └── argument : sur quoi la commande agit
# │ └────── option (ou drapeau) : modifie le comportement
# └───────── la commande elle-mêmeUne commande suit presque toujours le même schéma : le nom de la commande, des options (précédées d'un tiret, comme -l) qui modifient son comportement, et des arguments qui indiquent sur quoi elle agit. Tu valides toujours avec la touche Entrée. Ce schéma se répète pour toutes les commandes : une fois qu'il est acquis, tu peux lire n'importe quelle commande.
Vrai ou faux ?
Le terminal est un outil dépassé, seuls les vieux systèmes l'utilisent encore.
Chapitre 3
Manipuler fichiers et dossiers
Créer, copier, déplacer, renommer, supprimer : les gestes de base sur les fichiers, avec une commande à manier avec prudence.
Une fois que tu sais te déplacer, tu peux agir sur les fichiers et les dossiers. Ces commandes remplacent tes clics dans l'explorateur de fichiers, en plus rapide. Voici la boîte à outils essentielle.
mkdir mon-dossier # crée un dossier ("make directory")
mkdir -p a/b/c # -p crée toute l'arborescence d'un coup
touch fichier.txt # crée un fichier vide (ou met à jour sa date)
cp source.txt copie.txt # copie un fichier
cp -r dossier/ sauvegarde/ # -r pour copier un dossier et son contenu
mv ancien.txt nouveau.txt # renomme (ou déplace) un fichier
mv fichier.txt ../ # déplace le fichier dans le dossier parentmkdir crée des dossiers, touch crée un fichier vide, cp copie, mv déplace ou renomme (c'est la même opération : donner un nouveau chemin). Retiens l'option -r (récursif) pour agir sur un dossier et tout ce qu'il contient, et -p pour créer plusieurs niveaux de dossiers d'un coup.
Supprimer : la commande dangereuse
rm fichier.txt # supprime un fichier (DÉFINITIVEMENT)
rm -r dossier/ # supprime un dossier et tout son contenu
# ⚠️ Il n'y a PAS de corbeille : la suppression est irréversiblerm ne pardonne pas : pas de corbeille
rm supprime définitivement, sans passer par une corbeille. Il n'y a pas d'annulation. Sois particulièrement prudent·e avec rm -r sur un dossier, et fuis absolument rm -rf / ou toute suppression à la racine : cette commande peut effacer un système entier. Vérifie toujours deux fois ton chemin avant de valider un rm.Vrai ou faux ?
Un fichier supprimé avec rm peut être récupéré depuis la corbeille.
Chapitre 4
Lire et chercher dans les fichiers
Afficher le contenu d'un fichier, en lire un extrait, ou chercher une aiguille dans une botte de foin : le terminal excelle à ça.
Le terminal permet de lire des fichiers sans les ouvrir dans un éditeur, ce qui est précieux pour jeter un œil rapide ou inspecter un gros fichier de logs. Plusieurs commandes selon le besoin.
cat fichier.txt # affiche tout le contenu d'un coup
less fichier.txt # affiche page par page (q pour quitter)
head fichier.txt # les 10 premières lignes
tail fichier.txt # les 10 dernières lignes
tail -f journal.log # -f suit le fichier en temps réel (logs)cat déverse tout le contenu, pratique pour un petit fichier. Pour un fichier long, less l'affiche page par page (tu quittes avec q). head et tail montrent le début ou la fin, et tail -f est un incontournable : il suit un fichier en temps réel, idéal pour observer les logs d'un serveur qui tourne.
grep : chercher du texte
grep "erreur" journal.log # affiche les lignes contenant "erreur"
grep -i "erreur" journal.log # -i : insensible à la casse (Erreur, ERREUR)
grep -r "TODO" . # -r : cherche dans tous les fichiers du dossier
grep -n "fonction" script.js # -n : affiche aussi le numéro de lignegrep est l'un des outils les plus puissants du terminal : il cherche un texte dans un ou plusieurs fichiers et affiche les lignes correspondantes. Avec -r (récursif), il fouille tout un projet ; avec -i, il ignore les majuscules ; avec -n, il indique le numéro de ligne. Chercher « où est utilisée cette fonction ? » dans tout un projet devient instantané.
Chaque commande a une aide intégrée
man grep ouvre le manuel complet d'une commande (q pour quitter), et grep --help affiche un résumé rapide des options. Savoir chercher l'aide vaut mieux que tout mémoriser.Vrai ou faux ?
La commande grep sert à chercher du texte dans des fichiers.
Chapitre 5
Tuyaux et redirections
La vraie magie du terminal : brancher les commandes les unes aux autres et rediriger leur sortie. C'est la philosophie Unix.
Voici l'idée qui fait toute la puissance du terminal, et la philosophie du système Unix : chaque commande fait une chose simple, mais on peut les combiner pour accomplir des tâches complexes. Deux mécanismes permettent ça : le tuyau (pipe) qui branche des commandes entre elles, et la redirection qui envoie le résultat vers un fichier.
Le tuyau : la sortie de l'un devient l'entrée de l'autre
# Le | envoie le résultat de gauche vers la commande de droite
ls -l | grep ".txt" # liste les fichiers, puis garde ceux en .txt
cat journal.log | grep "erreur" | wc -l
# affiche le contenu -> garde les lignes "erreur" -> les compte (wc -l)
history | grep "git" # cherche "git" dans l'historique des commandesLe symbole | (la barre verticale, le pipe) prend la sortie de la commande de gauche et la donne comme entrée à celle de droite. On peut enchaîner autant de tuyaux qu'on veut, chacun affinant le résultat. Dans l'exemple, on affiche un fichier, on filtre les lignes contenant « erreur », puis on les compte avec wc -l (word count, option -l pour les lignes). Trois petites commandes, une réponse précise : « combien d'erreurs dans ce log ? »
Rediriger vers un fichier
ls -l > liste.txt # > écrit le résultat dans un fichier (ÉCRASE)
echo "une ligne" >> notes.txt # >> AJOUTE à la fin (sans écraser)
grep "erreur" app.log > erreurs.txt # sauvegarde les erreurs trouvéesLa redirection > envoie le résultat d'une commande dans un fichier au lieu de l'afficher. Attention à la nuance cruciale : > écrase le fichier existant, tandis que >> ajoute à la fin sans effacer. Confondre les deux et écraser un fichier par erreur est un grand classique : retiens que le double chevron >> préserve, le simple > remplace.
La philosophie Unix en une phrase
Vrai ou faux ?
La redirection >> écrase entièrement le fichier de destination.
Chapitre 6
Permissions et exécution
Chaque fichier a des droits qui déterminent qui peut le lire, l'écrire ou l'exécuter. Comprendre ce système évite bien des blocages.
Sur les systèmes Unix (macOS, Linux), chaque fichier porte des permissions qui définissent qui a le droit de le lire, l'écrire (le modifier) ou l'exécuter (le lancer comme programme). Tu croiseras vite ce système, notamment quand un script refuse de se lancer avec un message « permission denied ».
ls -l script.sh
# -rwxr-xr-- 1 alice staff 128 script.sh
# │└┬┘└┬┘└┬┘
# │ │ │ └── autres : lecture seule (r--)
# │ │ └───── groupe : lecture + exécution (r-x)
# │ └──────── propriétaire : lecture + écriture + exécution (rwx)
# └────────── type (- fichier, d dossier)La sortie de ls -l montre les permissions sous forme de lettres : r (read, lire), w (write, écrire), x (execute, exécuter). Elles sont données pour trois catégories : le propriétaire du fichier, son groupe, et les autres. Ce trio permet un contrôle fin de qui peut faire quoi.
chmod : rendre un script exécutable
chmod +x script.sh # ajoute le droit d'exécution (le cas le plus courant)
./script.sh # on peut maintenant le lancer
# Notation numérique (fréquente) :
chmod 755 script.sh # rwx pour le proprio, r-x pour groupe et autres
chmod 644 fichier.txt # rw- pour le proprio, r-- pour les autresLa commande chmod (change mode) modifie les permissions. Le cas que tu rencontreras le plus souvent : chmod +x mon-script.sh pour rendre un script exécutable, sans quoi il refuse de se lancer. Tu verras aussi une notation numérique (755, 644) : chaque chiffre encode les droits d'une catégorie. Pas besoin de la maîtriser tout de suite ; retiens surtout chmod +x.
sudo : un pouvoir à manier avec respect
sudo exécute une commande avec les droits d'administrateur (superuser), utile pour installer un logiciel système. Mais avec ce pouvoir, tu peux aussi casser ton système : ne fais jamais un sudo sur une commande que tu ne comprends pas, surtout copiée depuis internet. Un sudo rm -rf mal placé est irréversible. Le pouvoir d'administrateur se manie avec prudence.Vrai ou faux ?
Pour rendre un script exécutable, on utilise chmod +x script.sh.
Chapitre 7
Écrire un script Bash
Regrouper plusieurs commandes dans un fichier pour les rejouer d'un coup : c'est le script. La porte d'entrée de l'automatisation.
Dès que tu répètes la même série de commandes, il est temps d'en faire un script : un fichier texte qui contient des commandes, exécutées les unes après les autres quand tu le lances. C'est le premier pas vers l'automatisation, et un script Bash de dix lignes peut t'épargner des heures de manipulations répétitives.
#!/bin/bash
# La première ligne (le "shebang") indique quel shell exécute le script
echo "Début de la sauvegarde..."
mkdir -p sauvegardes
cp -r mon-projet/ sauvegardes/
echo "Sauvegarde terminée !"La première ligne, #!/bin/bash, s'appelle le shebang : elle indique au système quel interpréteur doit exécuter le script. Les lignes commençant par # sont des commentaires, ignorés à l'exécution. Le reste, ce sont les commandes que tu connais déjà. Pour lancer le script : on le rend exécutable une fois (chmod +x sauvegarde.sh) puis on l'appelle avec ./sauvegarde.sh.
Variables, arguments et conditions
#!/bin/bash
nom="Alice" # une variable (pas d'espace autour du =)
echo "Bonjour $nom" # on lit une variable avec $
# $1 est le premier argument passé au script : ./salut.sh Bob
echo "Premier argument : $1"
# Une condition : le dossier existe-t-il ?
if [ -d "mon-projet" ]; then
echo "Le dossier existe"
else
echo "Dossier introuvable"
fiUn script peut stocker des valeurs dans des variables (attention : pas d'espace autour du =) et les relire avec un $ devant le nom. Les arguments passés au script sont accessibles via $1, $2, etc. On peut aussi tester des conditions avec if : ici [ -d "mon-projet" ] vérifie qu'un dossier existe. La syntaxe des conditions Bash est un peu particulière (les crochets, le then, le fi qui ferme), mais tu la reconnaîtras vite.
Répéter avec une boucle
#!/bin/bash
# Convertir : afficher chaque fichier .txt du dossier
for fichier in *.txt; do
echo "Traitement de $fichier"
doneLa boucle for répète des commandes pour chaque élément d'une liste, ici chaque fichier .txt du dossier (le * est un joker qui remplace n'importe quelle suite de caractères). Variables, conditions, boucles : tu retrouves les concepts de programmation vus dans les autres cours, avec une syntaxe propre à Bash. Un script combine tout ça pour automatiser des tâches réelles.
🧭 Ton script refuse de se lancer : « permission denied »
Tu as écrit un script <code>deploie.sh</code>, tu tapes <code>./deploie.sh</code>, et le terminal répond « permission denied ». Comment débloques-tu la situation ?
Le fichier existe bien (tu le vois avec ls), mais il refuse de s'exécuter. Quelle est ta première hypothèse ?
Pour aller plus loin
- Apprendre la ligne de commande, cours interactif (en français) · OpenClassrooms (nouvel onglet)
- Le guide de Bash (documentation, en français) · Bash Academy (en anglais) (nouvel onglet)
- explainshell : décortique n'importe quelle commande · explainshell (en anglais) (nouvel onglet)
- Enchaîne avec : Premiers pas avec Git et GitHub · Ce site (nouvel onglet)
Chapitre 8
Confort et bonnes pratiques
Quelques réflexes rendent le terminal bien plus agréable et rapide. De quoi passer de « je subis » à « je maîtrise ».
Un·e dev qui maîtrise son terminal ne tape presque rien : il s'appuie sur des raccourcis et des astuces qui accélèrent tout. Adopter ces réflexes dès le début te fait gagner un temps considérable et rend l'expérience bien plus confortable.
Les raccourcis à connaître
- Tab : complète automatiquement un nom de fichier ou de commande (déjà vu, le plus important).
- Flèches ↑ / ↓ : rappellent les commandes précédentes, pour les rejouer sans les retaper.
- Ctrl + C : interrompt une commande en cours (un serveur, un processus bloqué).
- Ctrl + L (ou
clear) : nettoie l'écran. history: affiche l'historique de tes commandes, souvent combiné àgrep.
Les alias : tes raccourcis personnels
# Un alias crée un raccourci pour une commande longue
alias gs="git status"
alias ll="ls -la"
# Pour les rendre permanents, on les ajoute au fichier de config
# du shell : ~/.bashrc (Bash) ou ~/.zshrc (zsh)Un alias est un raccourci que tu définis pour une commande que tu tapes souvent. alias gs="git status" te permet ensuite de taper juste gs. Pour qu'ils survivent à la fermeture du terminal, on les inscrit dans le fichier de configuration de ton shell : ~/.bashrc pour Bash, ~/.zshrc pour zsh. Ce fichier est lu à chaque ouverture de terminal et c'est là qu'on personnalise son environnement.
En cas de doute, demande de l'aide
man commande pour le manuel complet, commande --help pour un résumé, et une recherche web pour un cas précis. Savoir trouver l'information est une compétence plus utile que de tout mémoriser. Même les développeur·euses expérimenté·es consultent l'aide en permanence.Le terminal, une compétence qui débloque tout le reste
Vrai ou faux ?
Le raccourci Ctrl + C sert à copier du texte dans le terminal.
🛠️ Exercice optionnel
Organiser un projet et automatiser une tâche
Tu vas mettre en pratique l'essentiel du cours : créer une arborescence de projet, y déplacer des fichiers, chercher du contenu, puis écrire un petit script Bash qui automatise une sauvegarde. Tout se fait au terminal, sans souris.
Ta mission
- Arborescence : crée un dossier
mon-sitecontenant trois sous-dossierscss,jsetimages(en une seule commande si possible). - Fichiers : crée un
index.htmlà la racine et unstyle.cssdanscss. - Recherche : écris la commande qui cherche le mot « TODO » dans tous les fichiers du projet, en affichant les numéros de ligne.
- Comptage : écris une commande qui compte combien de fichiers
.htmlse trouvent dans le dossier (en combinantls, un tuyau etwc). - Script : écris un script
sauvegarde.shqui crée un dossierbackupet y copie tout le dossiermon-site, avec un message de début et de fin. - Exécution : rends le script exécutable et lance-le.
Tu bloques ? Des indices, à dévoiler quand tu en as besoin.
Indice 1
Indice masqué.
Indice 2
Indice masqué.
Indice 3
Indice masqué.
✅ QCM de fin de cours
Teste tes acquis
10 questions, plusieurs réponses parfois possibles. Coche tout ce qui te semble juste, puis valide pour voir ton score et les explications.
- 1
Quelle commande affiche le dossier dans lequel on se trouve actuellement ?
- 2
Que désigne le raccourci
~dans un chemin ? - 3
Que fait la commande
rm -r dossier/? - 4
À quoi sert la commande
grep? - 5
Que fait le tuyau (pipe)
|? - 6
Quelle est la différence entre
>et>>? - 7
Comment rendre un script Bash exécutable ?
- 8
À quoi sert la première ligne
#!/bin/bashd'un script ? - 9
Comment lit-on la valeur d'une variable
nomdans un script Bash ? - 10
Que fait Ctrl + C dans le terminal ?
Tu peux laisser des questions sans réponse, elles compteront comme fausses.
🎓 Attestation
Ton attestation de réussite
Termine le QCM avec au moins 80% de bonnes réponses pour débloquer ton attestation de réussite.
Tu veux ce cours pour ton équipe ?
Je peux adapter et animer ce cours pour tes formateur·ices ou tes apprenant·es, en présentiel ou en distanciel. Parlons-en pendant l'audit gratuit.
Réserver un audit gratuit →