Linux : les 50 commandes indispensables
ls, grep, find, chmod, systemctl et 45 autres — les commandes que tout développeur tape chaque jour, avec des exemples concrets et les variantes par distribution.
Le terminal intimide au départ. Puis vous tapez votre centième ls -la et vous réalisez que vous ne voulez plus jamais revenir à l'explorateur de fichiers graphique.
Ce guide couvre les commandes valables sur toutes les distributions majeures — Ubuntu, Debian, Fedora, CentOS Stream, Arch Linux, openSUSE. Là où le comportement diffère selon la distro, c'est signalé. Les exemples sont testés, pas copiés d'une man page.
1. Navigation
ls — lister les fichiers
ls # Lister le dossier courant
ls -l # Format long (permissions, taille, date)
ls -la # Inclure les fichiers cachés (dotfiles)
ls -lh # Tailles lisibles (KB, MB, GB)
ls -lt # Trier par date de modification (plus récent en premier)
ls -R # Récursif — tous les sous-dossierscd — changer de répertoire
cd /var/log # Chemin absolu
cd ../ # Remonter d'un niveau
cd ~ # Dossier personnel
cd - # Répertoire précédent (comme Back/Forward)pwd — où suis-je ?
pwd
# /home/william/projets/mon-apptree — arborescence visuelle
tree # Arborescence complète
tree -L 2 # Limiter à 2 niveaux de profondeur
tree -I "node_modules" # Ignorer un dossierNon installé par défaut sur certaines distros :
# Debian / Ubuntu
sudo apt install tree
# Fedora / RHEL / CentOS
sudo dnf install tree
# Arch Linux
sudo pacman -S tree2. Fichiers et répertoires
cp — copier
cp fichier.txt copie.txt # Copier un fichier
cp -r dossier/ destination/ # Copier un dossier (-r récursif)
cp -p fichier.txt copie.txt # Préserver les permissions et datesmv — déplacer ou renommer
mv ancien.txt nouveau.txt # Renommer
mv fichier.txt /tmp/ # Déplacer
mv dossier/ /var/www/ # Déplacer un dossierrm — supprimer
rm fichier.txt # Supprimer un fichier
rm -r dossier/ # Supprimer un dossier récursivement
rm -i fichier.txt # Demander confirmation (-i pour interactif)Pas de corbeille en ligne de commande. rm est définitif.
mkdir — créer un répertoire
mkdir mon-dossier
mkdir -p projets/app/src # Créer toute l'arborescence d'un couptouch — créer un fichier vide ou mettre à jour la date
touch index.js
touch fichier1.txt fichier2.txt fichier3.txt # Plusieurs à la foisln — créer des liens
ln -s /chemin/source lien-symbolique # Lien symbolique (soft link)
ln fichier.txt lien-dur # Lien dur (hard link)Les liens symboliques sont l'équivalent des raccourcis Windows, en plus puissant. ls -la affiche lien -> /chemin/source.
rsync — synchroniser des dossiers
rsync -avz source/ destination/ # Local
rsync -avz -e ssh ./dist/ user@serveur:/var/www/ # Vers serveur distant
rsync -avz --delete source/ destination/ # Miroir exact (supprime les fichiers en trop)rsync est plus efficace que scp pour des transferts répétés : il ne retransfère que ce qui a changé.
3. Lire et manipuler le contenu
cat — afficher un fichier
cat fichier.txt
cat -n fichier.txt # Avec numéros de ligne
cat fichier1.txt fichier2.txt > fusion.txt # Concaténerless — lire un long fichier
less /var/log/syslogDans less : espace pour avancer, b pour reculer, /mot pour chercher, q pour quitter. Indispensable pour les logs.
head et tail — début et fin de fichier
head -20 fichier.txt # 20 premières lignes
tail -50 fichier.txt # 50 dernières lignes
tail -f /var/log/syslog # Suivre en temps réel (-f pour follow)
tail -f /var/log/nginx/access.log # Logs serveur en directtail -f est ce que vous taperez le plus pour déboguer une application en production.
wc — compter
wc -l fichier.txt # Nombre de lignes
wc -w fichier.txt # Nombre de mots
wc -c fichier.txt # Taille en octetssort et uniq
sort fichier.txt # Tri alphabétique
sort -n nombres.txt # Tri numérique
sort -r fichier.txt # Ordre inverse
sort fichier.txt | uniq # Supprimer les doublons
sort fichier.txt | uniq -c # Compter les occurrencescut — extraire des colonnes
cut -d: -f1 /etc/passwd # Extraire le 1er champ (délimiteur :)
cut -d, -f2,4 data.csv # Colonnes 2 et 4 d'un CSVdiff — comparer deux fichiers
diff fichier1.txt fichier2.txt
diff -u fichier1.txt fichier2.txt # Format unifié (format patch)4. Recherche
grep — chercher dans le contenu
grep "erreur" fichier.log # Chercher un motif
grep -i "erreur" fichier.log # Sans distinction majuscules/minuscules
grep -r "TODO" src/ # Récursif dans un dossier
grep -n "PORT" .env # Afficher le numéro de ligne
grep -v "DEBUG" app.log # Inverser — lignes qui ne matchent PAS
grep -c "200" access.log # Compter les correspondances
grep -E "error|warning" app.log # Regex étendue (plusieurs motifs)Combinaison puissante : grep après tail -f pour filtrer les logs en temps réel.
tail -f /var/log/nginx/error.log | grep --line-buffered "404"find — chercher par attributs
find /var/log -name "*.log" # Par nom
find . -name "*.js" -not -path "*/node_modules/*" # Exclure un dossier
find . -type f -newer package.json # Fichiers modifiés après package.json
find . -size +10M # Fichiers > 10 MB
find /tmp -mtime +7 -delete # Supprimer fichiers > 7 jours
find . -type f -exec chmod 644 {} \; # Exécuter une commande sur chaque résultatlocate — chercher rapidement (index)
locate nginx.conf
sudo updatedb # Mettre à jour l'index (automatique la nuit)locate est plus rapide que find mais utilise un index qui peut être désynchronisé. À installer si absent :
sudo apt install plocate # Debian / Ubuntu
sudo dnf install mlocate # Fedora
sudo pacman -S mlocate # Archwhich et whereis
which python3 # Chemin de l'exécutable utilisé
whereis nginx # Binaire + man page + sources5. Permissions
chmod — modifier les permissions
Linux représente les permissions avec trois groupes : propriétaire (u), groupe (g), autres (o).
chmod 644 fichier.txt # rw-r--r-- (fichier standard)
chmod 755 script.sh # rwxr-xr-x (exécutable)
chmod 600 ~/.ssh/id_ed25519 # rw------- (clé privée SSH — obligatoire)
chmod +x deploy.sh # Ajouter l'exécution
chmod -R 755 /var/www/ # RécursifMémo des valeurs octales : 4 = lecture, 2 = écriture, 1 = exécution. On additionne : 7 = rwx, 6 = rw-, 4 = r--.
chown — changer le propriétaire
chown william fichier.txt # Changer le propriétaire
chown william:www-data fichier.txt # Propriétaire et groupe
chown -R www-data:www-data /var/www/ # Récursifsudo et su
sudo commande # Exécuter en tant que root
sudo -i # Shell root (session complète)
su - william # Basculer vers l'utilisateur williamid — voir ses permissions
id # uid, gid, groupes
id william # Pour un autre utilisateur
groups # Liste des groupes de l'utilisateur courant6. Processus
ps — voir les processus
ps aux # Tous les processus (format BSD)
ps aux | grep nginx # Filtrer par nom
ps -ef # Format UNIX (toutes distros)top et htop
top # Moniteur système temps réel (toutes distros)
htop # Version améliorée avec interface coloréeDans top : k pour kill, r pour renice, q pour quitter. htop s'installe séparément mais est disponible sur toutes les distros.
kill et pkill
kill 1234 # Envoyer SIGTERM (arrêt propre) au PID 1234
kill -9 1234 # SIGKILL (arrêt forcé, non ignorable)
pkill nginx # Kill par nom de processus
pkill -f "node server" # Kill par ligne de commande complète
killall nginx # Tuer tous les processus nommés nginxPréférez toujours SIGTERM avant SIGKILL. SIGTERM laisse le processus fermer proprement ses connexions.
nohup — détacher un processus
nohup ./script.sh &
nohup node server.js > server.log 2>&1 &Le processus continue après déconnexion SSH. La sortie va dans nohup.out par défaut.
jobs, bg, fg
Ctrl+Z # Suspendre le processus en cours
jobs # Voir les jobs en arrière-plan
bg %1 # Relancer le job 1 en arrière-plan
fg %1 # Ramener le job 1 au premier plan7. Services avec systemctl
systemctl gère les services sur toutes les distros modernes utilisant systemd — Ubuntu 16+, Debian 8+, Fedora, RHEL/CentOS 7+, Arch, openSUSE.
# État d'un service
systemctl status nginx
# Démarrer / arrêter / redémarrer
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx # Recharger la config sans couper les connexions
# Activer / désactiver au démarrage
systemctl enable nginx
systemctl disable nginx
systemctl enable --now nginx # Activer ET démarrer immédiatement
# Lister tous les services
systemctl list-units --type=service
systemctl list-units --type=service --state=failedjournalctl — lire les logs systemd
journalctl -u nginx # Logs d'un service
journalctl -u nginx -f # En temps réel
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx --since "2026-06-17 10:00" --until "2026-06-17 11:00"
journalctl -p err # Seulement les erreurs
journalctl --disk-usage # Taille des logs
journalctl --vacuum-time=7d # Purger les logs > 7 jours8. Réseau
ping
ping google.com
ping -c 4 8.8.8.8 # Envoyer seulement 4 paquets
ping -i 0.2 serveur # Intervalle 200ms (test de charge léger)curl — HTTP en ligne de commande
curl https://api.exemple.com/users
curl -I https://exemple.com # Headers seulement
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"test"}' https://api.exemple.com/users
curl -o fichier.zip https://exemple.com/archive.zip # Télécharger
curl -s https://api.exemple.com | jq . # Parser le JSONwget
wget https://exemple.com/archive.tar.gz
wget -c https://exemple.com/large-file.iso # Reprendre un téléchargement interrompu
wget -r -l 2 https://exemple.com # Télécharger récursivementss — voir les connexions réseau
ss -tuln # Ports en écoute (TCP + UDP)
ss -tulnp # Avec le processus associé
ss -s # Résumé des connexionsss remplace netstat sur les systèmes modernes. Plus rapide, disponible par défaut.
ip — configuration réseau
ip addr # Interfaces et adresses IP (remplace ifconfig)
ip addr show eth0 # Interface spécifique
ip route # Table de routage
ip link set eth0 up # Activer une interfacessh et scp
ssh user@serveur.com
ssh -p 2222 user@serveur.com # Port non standard
scp fichier.txt user@serveur:/tmp/ # Copier vers serveur
scp user@serveur:/var/log/app.log . # Copier depuis serveurPour la configuration SSH complète — clés, ~/.ssh/config, agent forwarding — l'administration SSH distante couvre tout ça.
9. Disque et espace
df — espace disque des partitions
df -h # Tailles lisibles
df -h /var # Pour une partition spécifique
df -i # Inodes (utile si "no space left" mais espace dispo)du — espace utilisé par un dossier
du -sh /var/log # Taille totale d'un dossier
du -sh /var/log/* # Taille de chaque sous-dossier
du -sh * | sort -rh | head # Top 10 des plus gros dossierslsblk — lister les périphériques de stockage
lsblk
lsblk -f # Avec les filesystems et UUIDsmount
mount # Voir les partitions montées
sudo mount /dev/sdb1 /mnt/disque # Monter une partition
sudo umount /mnt/disque # Démonter10. Système, archives et packages
uname et free
uname -a # Informations kernel complet
uname -r # Version du kernel uniquement
free -h # RAM utilisée / disponible
uptime # Temps de fonctionnement + charge système
lscpu # Infos CPUtar — archiver et compresser
# Créer une archive compressée
tar -czf archive.tar.gz dossier/
# Extraire
tar -xzf archive.tar.gz
tar -xzf archive.tar.gz -C /destination/
# Voir le contenu sans extraire
tar -tzf archive.tar.gzMémo flags : c = créer, x = extraire, z = gzip, j = bzip2, J = xz, f = fichier, v = verbeux.
history — historique des commandes
history # Toutes les commandes précédentes
history | grep ssh # Filtrer
!42 # Relancer la commande numéro 42
!! # Relancer la dernière commande
Ctrl+R # Recherche inversée interactive dans l'historiqueGestionnaires de packages — par distribution
# Debian / Ubuntu / Mint / Pop!_OS
sudo apt update && sudo apt upgrade
sudo apt install paquet
sudo apt remove paquet
sudo apt search mot-clé
dpkg -l | grep nginx # Vérifier si installé
# Fedora / CentOS Stream / RHEL / Rocky / AlmaLinux
sudo dnf update
sudo dnf install paquet
sudo dnf remove paquet
sudo dnf search mot-clé
# Arch Linux / Manjaro / EndeavourOS
sudo pacman -Syu # Mise à jour système complète
sudo pacman -S paquet # Installer
sudo pacman -R paquet # Supprimer
sudo pacman -Ss mot-clé # Chercher
yay -S paquet # AUR (helper communautaire)
# openSUSE
sudo zypper refresh
sudo zypper install paquet
sudo zypper remove paquetTips et astuces
Redirections et pipes
commande > fichier.txt # Rediriger la sortie (écrase)
commande >> fichier.txt # Rediriger en ajoutant à la fin
commande 2> erreurs.txt # Rediriger les erreurs
commande > tout.txt 2>&1 # Sortie + erreurs dans le même fichier
commande 2> /dev/null # Ignorer les erreurs
commande1 | commande2 # Pipe — sortie de 1 → entrée de 2
cat access.log | grep 500 | wc -l # Enchaîner 3 commandesVariables d'environnement
echo $HOME
echo $PATH
export MA_VAR="valeur" # Disponible dans les sous-processus
printenv # Toutes les variables d'environnement
env VAR=val commande # Variable pour une seule commandeRaccourcis clavier indispensables
| Raccourci | Action |
|---|---|
Ctrl+C | Interrompre le processus en cours |
Ctrl+Z | Suspendre (mettre en arrière-plan) |
Ctrl+D | Fermer le shell / signaler fin d'entrée |
Ctrl+L | Effacer l'écran (comme clear) |
Ctrl+R | Recherche dans l'historique |
Ctrl+A | Aller au début de la ligne |
Ctrl+E | Aller à la fin de la ligne |
Tab | Autocomplétion |
Tab Tab | Lister les complétions possibles |
Alias pratiques à ajouter dans ~/.bashrc ou ~/.zshrc
alias ll='ls -la'
alias gs='git status'
alias ..='cd ..'
alias ...='cd ../..'
alias myip='curl -s ifconfig.me'
alias ports='ss -tuln'
alias logs='sudo journalctl -f'
alias update='sudo apt update && sudo apt upgrade' # Adapter à votre distroxargs — passer une liste en arguments
find . -name "*.log" | xargs rm # Supprimer tous les .log trouvés
find . -name "*.js" | xargs grep "TODO" # Chercher dans tous les .js
cat urls.txt | xargs -I{} curl -I {} # Tester une liste d'URLsCombiner find et grep efficacement
# Trouver tous les fichiers TypeScript contenant "useEffect"
find src/ -name "*.tsx" -exec grep -l "useEffect" {} \;
# Compter les TODOs par fichier
grep -rn "TODO" src/ | cut -d: -f1 | sort | uniq -c | sort -rnscreen et tmux — sessions persistantes
# screen — disponible partout
screen -S ma-session # Créer une session nommée
Ctrl+A D # Détacher sans fermer
screen -r ma-session # Rattacher
# tmux — plus moderne
tmux new -s ma-session
Ctrl+B D # Détacher
tmux attach -t ma-session # RattacherIndispensable quand vous lancez une commande longue via SSH — la déconnexion ne tue pas le processus.
Ces cinquante commandes couvrent 90% des situations du quotidien. La maîtrise vient avec la répétition, pas avec la mémorisation. Gardez ce guide en favori, revenez-y quand vous bloquez.
Pour aller plus loin côté sécurité, configurer UFW pour filtrer le trafic entrant est le complément naturel — et il utilise systemctl et journalctl que vous venez d'apprendre.
Pour des recherches avancées avec grep, sed ou awk, les expressions régulières permettent de construire des patterns puissants — filtrage de logs, extraction de données, validation de formats.