Commandes Linux de base : le guide pratique des développeurs, avec 10 exercices corrigés
L’essentiel en une minute
Les commandes Linux de base servent à se déplacer, manipuler des fichiers, lire des journaux, régler des permissions, surveiller des processus, installer des paquets et parler au réseau. Ce guide les présente dans l’ordre où un développeur en a besoin : rôle, deux ou trois options utiles, un exemple.
Le terminal n’est pas réservé aux administrateurs. Dans l’enquête Stack Overflow 2026, 51,3 % des 14 099 répondants à la question sur les langages, sur plus de 30 000 participants, disent avoir beaucoup travaillé en Bash ou dans un autre shell dans l’année (Stack Overflow Developer Survey 2026, consulté le 30 octobre 2026).
Points clés
- Une trentaine de commandes couvrent le quotidien,
ls,cd,grep,tail -f,chmod,kill,apt,sshettaren tête.- Les permissions peuvent s’écrire en octal : lecture 4, écriture 2, exécution 1, d’où 755 pour un script et 644 pour un fichier.
- Depuis Ubuntu 26.04 LTS,
sudoet la plupart des utilitaires de base sont des réécritures en Rust, tous les utilitaires sur 26.10 : mêmes commandes, compatibilité encore incomplète.- Trois gestes demandent une vraie prudence :
rm -rf,sudoet l’exécution d’un script téléchargé aveccurl ... | bash.- Les 10 exercices corrigés reprennent les cas courants : chercher une erreur, compter, archiver, rendre un script exécutable.
Avant de commencer : obtenir un terminal Linux
Sous Windows, le plus simple est WSL 2. Selon Microsoft, wsl --install, lancé dans PowerShell en administrateur, installe Ubuntu par défaut, sur Windows 10 version 2004 (build 19041) ou plus récent et Windows 11 (Microsoft Learn, page mise à jour le 2 juin 2026). Notre tutoriel Docker pour débutants détaille WSL 2 avec Docker Desktop.
Ce choix est courant. Dans l’enquête Stack Overflow 2025, 27,7 % des répondants citent Ubuntu parmi les systèmes sur lesquels ils travaillent et 16,8 % WSL, plusieurs réponses étant possibles (Stack Overflow Developer Survey 2025, 31 569 répondants à cette question).

Ubuntu 26.10 est sortie le 15 octobre 2026, suivie 9 mois, jusqu’en juillet 2027 (notes de version). Pour une machine durable, Ubuntu 26.04 LTS a une maintenance de sécurité standard jusqu’en mai 2031 (ubuntu.com, consulté le 30 octobre 2026).

Un changement récent compte : depuis Ubuntu 26.04 LTS, sudo est sudo-rs, une réécriture en Rust, et les utilitaires de base viennent de rust-coreutils (projet uutils). Ubuntu les dit pas encore entièrement compatibles : cp, mv et rm restent, dans 26.04, ceux de GNU, et chaque outil GNU reste accessible avec le préfixe gnu, comme gnuls (résumé pour les utilisateurs LTS). Sur 26.10, ces trois outils ont migré à leur tour et les utilitaires par défaut tournent entièrement sur uutils (notes de version d’Ubuntu 26.10).
cat /etc/os-release affiche votre distribution et sa version.
1. Se déplacer et gérer les fichiers
Huit commandes suffisent pour naviguer et organiser un projet. Les options ci-dessous suivent le manuel de GNU coreutils (version 9.12) et la page de manuel de find.
| Commande | Rôle | Options utiles | Exemple |
|---|---|---|---|
pwd |
Affiche le dossier courant | -P : chemin réel, liens résolus |
pwd |
ls |
Liste le contenu d’un dossier | -l détails, -a fichiers cachés, -h tailles lisibles |
ls -lah |
cd |
Change de dossier | cd ~ maison, cd .. parent, cd - dossier précédent |
cd ~/projets/api |
mkdir |
Crée un dossier | -p crée les parents manquants |
mkdir -p src/utils |
cp |
Copie | -r dossiers, -i demande avant d’écraser, -a conserve droits et dates |
cp -r src/ sauvegarde/ |
mv |
Déplace ou renomme | -i demande avant d’écraser, -n n’écrase jamais |
mv brouillon.md article.md |
rm |
Supprime | -r dossiers, -i confirmation, -I une confirmation avant plus de trois fichiers ou en récursif |
rm -ri build/ |
find |
Cherche des fichiers | -name, -type f ou d, -mtime -7 |
find . -name "*.log" -mtime -7 |
Deux précisions évitent des erreurs. rm ne passe pas par une corbeille. Et find . -name "*.tmp" -delete supprime ce qu’il trouve : lancez d’abord la commande sans -delete pour voir la liste.
Les jokers complètent ces commandes : * remplace toute suite de caractères, ? un seul. ls *.py liste les fichiers Python, et la touche Tab complète les noms.
2. Lire un fichier
Quatre commandes lisent un fichier sans éditeur, du petit fichier de configuration au journal qui grossit en direct.
cat fichieraffiche tout le contenu d’un coup. Option utile :-nnumérote les lignes. À réserver aux fichiers courts.less fichierpagine un long fichier./motifcherche,npasse à l’occurrence suivante,Gva à la fin,qquitte.head -n 20 fichieraffiche les 20 premières lignes (10 par défaut).tail -n 50 fichieraffiche les 50 dernières. Avec-f,tailcontinue de lire à mesure que le fichier grossit ;-Fsuit aussi un fichier renommé par une rotation de journaux, selon le manuel GNU.
tail -f /var/log/syslog # suivre un journal en direct, Ctrl+C pour sortir
journalctl -f # équivalent sans fichier syslog (sudo si besoin)
tail -n 100 app.log | grep ERROR # les erreurs parmi les 100 dernières lignes
Lancez tail -f dans un terminal, reproduisez le problème dans un autre : l’erreur s’affiche au moment où elle s’écrit.
3. Permissions : chmod, chown et sudo
Chaque fichier a un propriétaire, un groupe et trois jeux de droits. ls -l les affiche sous la forme -rwxr-xr-- : le type (- fichier, d dossier), puis trois blocs pour le propriétaire, le groupe et les autres. r signifie lecture, w écriture, x exécution (ou entrée dans un dossier).
Le mode numérique. Le manuel GNU attribue 4 à la lecture, 2 à l’écriture et 1 à l’exécution. On additionne par bloc : 7 = rwx, 6 = rw-, 5 = r-x, 4 = r–.
| Mode | Droits | Usage typique |
|---|---|---|
| 755 | rwxr-xr-x | Script ou dossier lisible par tous, modifiable par vous seul |
| 644 | rw-r–r– | Fichier ordinaire, code source, page web |
| 600 | rw——- | Clé SSH privée, fichier .env |
| 700 | rwx—— | Dossier ~/.ssh |
Le mode symbolique modifie sans tout réécrire : u (propriétaire), g (groupe), o (autres), a (tous), suivis de +, - ou =.
chmod +x deploy.sh # rendre un script exécutable
chmod 600 ~/.ssh/id_ed25519
chmod -R g+w partage/ # -R : récursif
sudo chown -R www-data:www-data /var/www/site # propriétaire:groupe
sudo exécute une commande avec les droits d’administrateur ; sudo -u autre_compte commande agit sous une autre identité. Sur Ubuntu 26.04, l’original reste installé sous le nom sudo.ws, selon les notes de version.
Face à « Permission denied », vérifiez le propriétaire avec ls -l avant d’ajouter sudo.
4. Processus : ps, top, kill et jobs
Un processus est un programme en cours d’exécution, repéré par son PID.
ps auxliste tous les processus du système, en syntaxe BSD selon la page de manuel de ps.ps -efen est l’équivalent standard ;ps aux | grep nodefiltre.topaffiche les processus en temps réel, triés par usage du processeur.Mtrie par mémoire,qquitte.htopfait la même chose en plus lisible ; s’il manque,sudo apt install htop.kill PIDenvoie par défaut le signal TERM, qui demande au programme de s’arrêter proprement, d’après la page de manuel de kill.kill -9 PIDenvoie KILL, que le programme ne peut pas intercepter : dernier recours, sans nettoyage.- Les jobs du shell. Ajoutez
&pour lancer en arrière-plan,Ctrl+Zsuspend la commande en cours,jobsliste les tâches,bgetfgles relancent en arrière ou en premier plan,kill %1arrête la tâche numéro 1.
python3 serveur.py & # lance en arrière-plan
jobs # affiche par exemple : [1]+ Running python3 serveur.py &
kill %1 # arrête la tâche 1
Sur un serveur, les services passent par systemd (systemctl status nginx), le niveau suivant, que notre guide pour automatiser ses déploiements aborde avec la CI/CD.
5. Installer des logiciels : apt et dnf
Chaque famille de distributions a son gestionnaire de paquets, aux commandes proches : apt sur Ubuntu et Debian, dnf sur Fedora et Red Hat.
| Action | Ubuntu, Debian (apt) |
Fedora (dnf) |
|---|---|---|
| Mettre à jour la liste des paquets | sudo apt update |
sudo dnf makecache |
| Mettre à jour les logiciels installés | sudo apt upgrade |
sudo dnf upgrade |
| Chercher un paquet | apt search jq |
dnf search jq |
| Installer | sudo apt install jq |
sudo dnf install jq |
| Désinstaller | sudo apt remove jq |
sudo dnf remove jq |
| Retirer les dépendances inutiles | sudo apt autoremove |
sudo dnf autoremove |
Ne confondez pas update et upgrade. La page de manuel d’apt est nette : update télécharge les informations sur les paquets depuis les sources configurées, upgrade installe les mises à jour disponibles. On enchaîne donc les deux : sudo apt update && sudo apt upgrade.
La documentation d’Ubuntu Server réserve apt à l’usage interactif et recommande apt-get dans les scripts, donc dans vos Dockerfiles et pipelines. Côté Fedora, la page de changement de Fedora 41 prévoit que la commande dnf pointe vers DNF5.
6. Réseau : ip, ss, ping, curl, ssh et scp
Six commandes répondent aux questions réseau courantes : mon adresse, le programme qui écoute sur un port, la réponse d’un serveur ou d’une API.
ip a(pourip address) affiche les interfaces et leurs adresses IP ;ip r(pourip route) la table de routage, d’après la page de manuel d’ip.ss -tlnpliste les sockets TCP (-t) en écoute (-l), sans résolution de noms (-n), avec le processus associé (-p, qui demande souventsudo). Sa page de manuel le rapproche denetstat.ping -c 4 example.comenvoie quatre paquets puis s’arrête (-c). Sans-c,pingtourne jusqu’àCtrl+C.curlparle HTTP.-Ine récupère que les en-têtes,-Lsuit les redirections,-o fichierenregistre la réponse, d’après la page de manuel de curl.ssh utilisateur@serveurouvre une session distante.-p 2222choisit le port,-i ~/.ssh/clela clé.scpcopie des fichiers par SSH.-rcopie un dossier ; attention, le port s’écrit-Pen majuscule, car-psert déjà à conserver les dates, selon la page de manuel de scp.
curl -I https://neurautech.com # code HTTP et en-têtes
curl -s http://localhost:3000/api/users # tester une API en local
scp -r dist/ [email protected]:/var/www/app/ # crée /var/www/app/dist/
Le deuxième exemple sert à tester une API en développement, comme dans notre tutoriel pour créer une API REST avec Node.js et Express. Pour louer un serveur à administrer en SSH, voyez notre comparatif d’hébergement cloud pour développeurs.
7. Traiter du texte : grep, sed, awk, tubes et redirections
Ici, de petites commandes se combinent. Le tube | envoie la sortie d’une commande vers la suivante, les redirections vers un fichier.
| Symbole | Effet | Exemple |
|---|---|---|
> |
Écrit dans un fichier, en l’écrasant | ls > liste.txt |
>> |
Ajoute à la fin du fichier | echo "fin" >> journal.txt |
2> |
Redirige les erreurs | find / -name "*.conf" 2> /dev/null |
2>&1 |
Envoie les erreurs avec la sortie normale | npm run build > build.log 2>&1 |
grep cherche un motif dans du texte. Options utiles, d’après la page de manuel de grep : -i ignore la casse, -r parcourt un dossier, -n affiche les numéros de ligne, -v inverse la sélection, -c compte.
sed transforme un flux de texte ligne à ligne. La commande à connaître est la substitution : sed 's/ancien/nouveau/g' fichier affiche le résultat sans toucher au fichier. Avec -i, la modification est écrite dans le fichier lui-même ; -i.bak garde en plus une copie fichier.bak.
awk découpe chaque ligne en champs, $1 pour le premier, $2 pour le second. -F change le séparateur, par défaut les espaces et tabulations.
grep -rn "TODO" src/ # tous les TODO, avec fichier et ligne
sed -i 's/localhost/db.interne/g' config.ini
awk -F: '{print $1}' /etc/passwd # les noms de comptes
awk '{print $1}' app.log | sort | uniq -c # compter les niveaux de journal
Dans le dernier exemple, awk extrait la première colonne, sort trie, uniq -c compte les lignes identiques consécutives. wc -l compte les lignes.
8. Archives et disque
tar regroupe des fichiers en une archive, éventuellement compressée (-z). D’après sa page de manuel, -c crée, -x extrait, -t liste ; -z ajoute gzip, et -f, placé en dernier dans le groupe d’options, précède le nom de l’archive.
tar -czf projet.tar.gz projet/ # créer
tar -tzf projet.tar.gz # lister sans extraire
tar -xzf projet.tar.gz -C /tmp # extraire dans /tmp
gzip fichier remplace un fichier par fichier.gz ; -k garde l’original, gunzip décompresse. zip -r archive.zip dossier/ et unzip servent aux échanges avec Windows (sudo apt install zip unzip s’ils manquent).
df -h affiche l’espace libre de chaque système de fichiers, en unités lisibles ; -T ajoute le type. du -sh dossier donne la taille totale d’un dossier (-s résume, -h rend lisible). Pour trouver ce qui remplit un disque :
sudo du -h --max-depth=1 /var | sort -h # taille de chaque sous-dossier, du plus petit au plus gros
Le manuel GNU précise que du --max-depth=0 équivaut à du -s.
9. Variables d’environnement et PATH
Une variable d’environnement est une valeur que le shell transmet aux programmes qu’il lance. On la lit avec echo $NOM, on la définit avec export.
echo $HOME # votre dossier personnel
export NODE_ENV=production # visible par les programmes lancés ensuite
printenv | grep NODE # vérifier
PATH liste les dossiers, séparés par :, où le shell cherche les commandes, dans l’ordre. command -v python3 (ou which python3) indique celle qui a été trouvée.
Pour ajouter un dossier, placez cette ligne à la fin de ~/.bashrc, puis rechargez avec source ~/.bashrc :
export PATH="$HOME/.local/bin:$PATH"
Un export tapé dans un terminal disparaît à sa fermeture ; ~/.bashrc le rend permanent. Gardez les secrets hors de ce fichier, dans un .env en mode 600 exclu de Git. Notre guide pour apprendre Python montre comment un environnement virtuel modifie le PATH.
Cinq réflexes de sécurité
Le terminal exécute ce qu’on lui demande, sans corbeille. Cinq réflexes évitent l’essentiel des accidents.
- Relire un
rm -rfavant Entrée.rmrefuse par défaut de supprimer/récursivement (--preserve-root), dans GNU coreutils comme dans uutils, selon leurs manuels (GNU, uutils), mais rien ne protège le reste. Dans un script,rm -rf "$DOSSIER"/*avec une variable vide devientrm -rf /*, que cette protection ne bloque pas : écrivez"${DOSSIER:?}"/*, qui s’arrête si la variable est vide. - Utiliser
sudocommande par commande, sans session root permanente. - Ne pas exécuter un script inconnu avec
curl ... | bash. Le tutoriel d’Ubuntu pour débutants met en garde contre ces commandes copiées d’Internet. Téléchargez le script (curl -fsSLo install.sh URL), lisez-le, puis lancez-le. - Éviter
chmod 777, qui donne l’écriture à tous les comptes de la machine. - S’entraîner dans un dossier jetable, par exemple
mkdir -p /tmp/essai && cd /tmp/essai.
Un script piégé est une porte d’entrée classique, comme le rappelle notre panorama des cyberattaques les plus fréquentes.
Aide-mémoire des commandes Linux de base
Ce tableau résume les commandes Linux de base vues plus haut. Pour un PDF, imprimez la page depuis le navigateur (Ctrl+P, « Enregistrer au format PDF »).
| Besoin | Commande |
|---|---|
| Lister, avec fichiers cachés | ls -lah |
| Changer de dossier | cd chemin, cd .., cd - |
| Créer une arborescence | mkdir -p a/b/c |
| Copier un dossier | cp -r source/ destination/ |
| Supprimer avec confirmation | rm -ri dossier/ |
| Trouver des fichiers | find . -name "*.py" |
| Lire un long fichier | less fichier |
| Suivre un journal | tail -f app.log |
| Rendre exécutable | chmod +x script.sh |
| Changer le propriétaire | sudo chown -R user:groupe dossier/ |
| Voir les processus | ps aux, top, htop |
| Arrêter un processus | kill PID, en dernier recours kill -9 PID |
| Installer sur Ubuntu | sudo apt update && sudo apt install paquet |
| Adresse IP, ports ouverts | ip a, ss -tlnp |
| Tester une URL | curl -I URL |
| Se connecter à un serveur | ssh user@serveur |
| Chercher dans des fichiers | grep -rn "motif" dossier/ |
| Remplacer du texte | sed -i 's/a/b/g' fichier |
| Extraire une colonne | awk '{print $1}' fichier |
| Archiver, extraire | tar -czf a.tar.gz dossier/, tar -xzf a.tar.gz |
| Espace disque | df -h, du -sh dossier |
| Voir ou définir une variable | echo $PATH, export NOM=valeur |
10 exercices corrigés
Créez ce petit projet dans un dossier jetable, cherchez seul, puis comparez. Le bloc de préparation et les exercices 1 à 9 ont été exécutés dans Git Bash, le 9 en partie ; le 10 ne l’a pas été (voir la note de méthode).
mkdir -p /tmp/essai/projet/{src,logs} && cd /tmp/essai
printf 'INFO demarrage\nERROR disque plein\nINFO ok\nerror timeout\n' > projet/logs/app.log
echo 'print("hi")' > projet/src/main.py
Exercice 1 : créer une arborescence en une commande
Énoncé. Créez site/css, site/js et site/img en une seule commande.
Correction. mkdir -p site/{css,js,img}. Bash développe les accolades en trois chemins ; -p crée site.
Exercice 2 : lister par date
Énoncé. Listez le dossier courant, fichiers cachés compris, du plus récent au plus ancien.
Correction. ls -lat : -t trie par date de modification, -a inclut les fichiers cachés.
Exercice 3 : retrouver les fichiers récents
Énoncé. Trouvez les fichiers .log modifiés au cours des 7 derniers jours sous projet/.
Correction. find projet -type f -name "*.log" -mtime -7.
Exercice 4 : chercher une erreur, sans tenir compte de la casse
Énoncé. Affichez les lignes de app.log qui contiennent « error », en majuscules ou en minuscules, puis comptez-les.
Correction. grep -i error projet/logs/app.log affiche ERROR disque plein et error timeout ; grep -ic error projet/logs/app.log répond 2.
Exercice 5 : compter par niveau
Énoncé. Comptez combien de lignes commencent par chaque mot.
Correction. awk '{print $1}' projet/logs/app.log | sort | uniq -c donne 1 ERROR, 2 INFO, 1 error : uniq distingue la casse. L’ordre des lignes dépend de la langue du système : LC_ALL=C sort place les majuscules en premier.
Exercice 6 : extraire puis compléter un fichier
Énoncé. Écrivez les erreurs dans erreurs.txt, puis ajoutez la ligne « fin » sans effacer le reste.
Correction. grep -i error projet/logs/app.log > erreurs.txt, puis echo "fin" >> erreurs.txt. Avec >, le fichier ne contiendrait plus que « fin ».
Exercice 7 : remplacer un mot dans un fichier
Énoncé. Remplacez « plein » par « saturé » directement dans erreurs.txt.
Correction. sed -i 's/plein/saturé/' erreurs.txt. Sans -i, sed afficherait le résultat sans modifier le fichier.
Exercice 8 : archiver et vérifier
Énoncé. Créez projet.tar.gz à partir de projet/, puis listez son contenu sans l’extraire.
Correction. tar -czf projet.tar.gz projet/, puis tar -tzf projet.tar.gz, qui liste projet/logs/app.log, projet/src/main.py et les dossiers.
Exercice 9 : rendre un script exécutable
Énoncé. Créez hello.sh qui affiche « bonjour » et lancez-le avec ./hello.sh.
Correction. printf '#!/bin/bash\necho bonjour\n' > hello.sh (la première ligne indique l’interpréteur), chmod +x hello.sh, puis ./hello.sh. chmod 755 hello.sh fixe directement rwxr-xr-x.
Exercice 10 : trouver qui occupe un port
Énoncé. Votre serveur de développement refuse de démarrer : le port 3000 est déjà pris. Trouvez le processus et arrêtez-le proprement.
Correction. sudo ss -tlnp 'sport = :3000' affiche le programme et son PID, puis kill PID. Utilisez kill -9 PID seulement si le processus ne s’arrête pas.
Ce que nous n’avons pas pu vérifier
Plusieurs points restent hors de notre vérification :
- Les commandes non exécutées. Réseau (
ip,ss,ping,ssh,scp), processus (ps,top,htop,killsur un PID), paquets (apt,dnf),sudo,chown,tail -f,journalctlet l’exercice 10 : leurs options viennent des pages de manuel. - Les droits effectifs de
chmod. Git Bash s’exécute sur un disque Windows :chmod 640y a laissé les droits affichés àrw-r--r--. L’effet réel dechmoddans l’exercice 9 n’a donc pas été observé. - La compatibilité exacte de uutils avec GNU, option par option, sur Ubuntu 26.04 et 26.10.
- Les chiffres de Stack Overflow, déclaratifs. La question sur le système d’exploitation ne figure pas dans l’édition 2026, d’où l’usage de 2025.
Questions fréquentes
Quelles sont les commandes Linux de base à connaître en premier ?
pwd, ls, cd, mkdir, cp, mv et rm pour les fichiers, less et tail -f pour lire, puis grep et le tube |. Ajoutez chmod, sudo et apt pour administrer une machine. Le manuel de GNU coreutils documente la plupart de ces outils.
Les commandes Ubuntu sont-elles différentes des autres distributions ?
Presque toutes sont identiques, sauf le gestionnaire de paquets : apt sur Ubuntu et Debian, dnf sur Fedora. Depuis la 26.04, Ubuntu utilise aussi des réécritures en Rust des utilitaires de base et de sudo, selon ses notes de version.
Peut-on apprendre les commandes Linux sous Windows ?
Oui. WSL 2 installe une vraie distribution Linux, Ubuntu par défaut, avec wsl --install, d’après la documentation de Microsoft. Git Bash fournit les outils GNU courants, mais les permissions n’y fonctionnent pas comme sous Linux.
Comment obtenir l’aide d’une commande ?
man commande ouvre le manuel, commande --help un résumé des options ; dans man, /motif cherche et q quitte. Les pages sont aussi en ligne sur man7.org pour les outils les plus courants.
À propos de l’auteur
Abdelilah Ourti est ingénieur IA et architecte logiciel. Il conçoit et déploie des applications web et des systèmes d’IA, et publie sur NeurauTech des guides et des comparatifs destinés aux développeurs francophones. Ses autres articles sont réunis sur sa page auteur.
Méthode. Guide fondé sur des sources publiques consultées le 30 octobre 2026 : manuel de GNU coreutils 9.12, pages de manuel de man7.org et de Debian, documentation et notes de version d’Ubuntu, documentation d’uutils, de Fedora et de Microsoft, enquêtes Stack Overflow 2025 et 2026. Aucun lien n’est affilié.
Ce qui a été exécuté. Ont été exécutés dans Git Bash sous Windows (GNU coreutils 8.32, grep 3.0, sed 4.9, awk 5.3, tar 1.35), pour vérifier syntaxe et sortie : le bloc de préparation, les exercices 1 à 9 (le 9 en partie, chmod n’ayant pas d’effet visible sur un disque Windows), ainsi que cp -r, mv, head, tail -n, wc, gzip -k, export, jobs, kill %1, du, df et curl -I. Les autres commandes réseau et de processus, les commandes de paquets, sudo, chown, tail -f et l’exercice 10 n’ont pas été exécutés, et aucune commande n’a été lancée sur Ubuntu ou Fedora.
Une erreur ou une option qui a changé ? Écrivez à [email protected] : l’article sera corrigé et la date de mise à jour modifiée.
Dernière mise à jour : 30 octobre 2026.
Image : Gabriel Heinzer (Unsplash License).
