Aide-mémoire des commandes Linux — plus de 200 commandes par tâche

Les commandes Linux par tâche, des fichiers et permissions au réseau, à systemd et au traitement de texte. Chaque entrée comporte options, exemples à copier et remarques pour macOS.

Aide-mémoire des commandes Linux · freetoolsforweb.com/tools/linux-commands-cheat-sheet · vérifié le 2026-10-18

Dernière vérification : 2026-10-18 selon les manuels de GNU coreutils 9.x, util-linux, procps-ng, iproute2, systemd et bash 5.2 ; notes macOS d’après les pages man de macOS 26.

215 entrées réparties en 15 sections

Afficher et modifier du texte

Lire des fichiers, parcourir des journaux, éditer dans le terminal et comparer des versions.

cat

Afficher ou concaténer des fichiers

Linux · macOS#
cat [-n] [-A] file...
-n
numéroter toutes les lignes
-A
afficher les tabulations en ^I et les fins de ligne en $ (GNU) ; révèle les fins de ligne CRLF
cat /etc/os-release

afficher un fichier

cat part1.txt part2.txt > whole.txt

concaténer

cat -A script.sh | head

repérer les tabulations cachées et les fins de ligne Windows ^M

macOS/BSD : Le cat de macOS n’a pas -A ; utilisez cat -vet pour le même affichage.

tac

Afficher un fichier en commençant par la dernière ligne

Linux#
tac file
tac access.log | head

les lignes de journal les plus récentes d’abord

macOS/BSD : Absent de macOS ; utilisez tail -r fichier.

less

Parcourir un long fichier ou une longue sortie page par page

Linux · macOS#
less [-N] [-S] [+F] file
Space / b
page suivante / précédente
/text
rechercher vers l’avant ; n suivant, N précédent
g / G
aller au début / à la fin
F
suivre le fichier comme tail -f ; Ctrl+C pour arrêter
q
quitter
-N
afficher les numéros de ligne
-S
ne pas renvoyer les longues lignes à la ligne (défilement horizontal)
less /var/log/syslog

lire un journal

journalctl -u nginx | less -S

lignes larges sans retour à la ligne

head

Afficher les premières lignes d’un fichier

Linux · macOS#
head [-n N] [-c N] file...
-n N
N premières lignes (10 par défaut)
-c N
N premiers octets
-n -N
tout sauf les N dernières lignes (GNU)
head -n 20 data.csv

en-tête et premières lignes

head -c 512 file.bin | xxd

jeter un œil au début d’un binaire

macOS/BSD : Le head de macOS n’accepte pas les nombres négatifs.

tail

Afficher la fin d’un fichier ou la suivre en direct

Linux · macOS#
tail [-n N] [-f|-F] file...
-n N
N dernières lignes (10 par défaut)
-n +N
commencer à la ligne N
-f
continuer d’afficher à mesure que le fichier grossit
-F
suivre par nom, résiste à la rotation des journaux
tail -n 50 app.log

50 dernières lignes

tail -F /var/log/nginx/access.log

surveiller un journal soumis à rotation

tail -n +2 data.csv

ignorer la ligne d’en-tête d’un CSV

nano

Modifier un fichier avec un éditeur simple

Linux#
nano file
Ctrl+O
enregistrer
Ctrl+X
quitter
Ctrl+W
rechercher
Ctrl+K / Ctrl+U
couper la ligne / coller
Alt+U
annuler
sudo nano /etc/hosts

modifier un fichier système

La barre de raccourcis en bas de l’écran indique les touches ; ^ signifie Ctrl et M- signifie Alt.

vim

Modifier un fichier avec vim (et savoir en sortir)

Linux · macOS#
vim file
i
mode insertion (saisir du texte)
Esc
retour au mode normal
:w / :q / :wq
enregistrer / quitter / enregistrer et quitter
:q!
quitter sans enregistrer
/text
rechercher ; n pour le suivant
dd / yy / p
supprimer la ligne / copier la ligne / coller
u / Ctrl+R
annuler / rétablir
vim +42 app.py

ouvrir à la ligne 42

diff

Comparer deux fichiers ou répertoires

Linux · macOS#
diff [-u] [-r] [-q] [-w] a b
-u
format unifié (celui de patch et git)
-r
comparer des répertoires récursivement
-q
indiquer seulement si les fichiers diffèrent
-w
ignorer tous les espaces
-y
côte à côte
diff -u old.conf new.conf

vue lisible des modifications

diff -rq dir1/ dir2/

quels fichiers diffèrent entre deux arborescences

diff <(sort a.txt) <(sort b.txt)

comparer après tri, via une substitution de processus

tee

Écrire la sortie dans un fichier et à l’écran en même temps

Linux · macOS#
tee [-a] file...
-a
ajouter à la fin au lieu d’écraser
make 2>&1 | tee build.log

suivre une compilation et en garder un journal

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

ajouter à un fichier appartenant à root (sudo echo >> échoue, car c’est le shell qui fait la redirection)

printf

Afficher du texte formaté de façon fiable

Linux · macOS#
printf 'format' args...
printf '%s\n' "$var"

afficher une variable sans risque, même si elle commence par -n

printf '%-12s %6.2f\n' disk 93.5

colonnes alignées

echo -e et echo -n se comportent différemment selon les shells ; printf se comporte partout de la même façon.

column

Aligner une sortie en tableau

Linux · macOS#
column -t [-s separators]
column -t -s, data.csv | less -S

lire un CSV simple sous forme de tableau

mount | column -t

aligner une sortie séparée par des espaces

xxd / hexdump

Afficher un fichier en hexadécimal

Linux · macOS#
xxd file | hexdump -C file
xxd image.png | head

hexadécimal et ASCII côte à côte

hexdump -C file.bin | head

dump hexadécimal canonique

xxd fait partie des paquets de vim ; hexdump est dans util-linux (bsdextrautils sur les Debian/Ubuntu récents).

strings

Extraire le texte lisible d’un fichier binaire

Linux · macOS#
strings [-n min] file
-n N
seulement les chaînes d’au moins N caractères (4 par défaut)
strings -n 8 firmware.bin | less

trouver des numéros de version, des URL, des chemins

Fait partie de binutils sous Linux.

Permissions et propriété

Lire et modifier qui peut lire, écrire et exécuter un fichier.

ls -l

Lire une chaîne de permissions comme -rwxr-x---

Linux · macOS#
ls -l file
ls -l deploy.sh

-rwxr-x--- 1 alice devs 812 Oct 18 09:12 deploy.sh

Le premier caractère est le type (- fichier, d répertoire, l lien symbolique). Viennent ensuite trois triplets : propriétaire, groupe, tous les autres. r=4, w=2, x=1, donc rwxr-x--- vaut 750.

chmod

Modifier les permissions en notation octale

Linux · macOS#
chmod [-R] mode file...
-R
appliquer à un répertoire et à tout son contenu
-v
signaler chaque modification
chmod 644 index.html

lecture/écriture pour le propriétaire, lecture pour tous : fichiers ordinaires

chmod 755 deploy.sh

tout pour le propriétaire, lecture/exécution pour les autres : scripts et répertoires

chmod 600 ~/.ssh/id_ed25519

clé privée lisible par vous seul ; ssh refuse les clés aux permissions plus larges

chmod u+x

Modifier les permissions avec des lettres (u/g/o +/-)

Linux · macOS#
chmod [ugoa][+-=][rwxX] file...
chmod +x script.sh

rendre un script exécutable

chmod go-w file

retirer l’écriture au groupe et aux autres

chmod -R u=rwX,go=rX site/

le X majuscule n’ajoute l’exécution qu’aux répertoires et aux fichiers qui l’avaient déjà

chmod -R 777

Pourquoi chmod -R 777 est la mauvaise solution

DangereuxLinux · macOS#
chmod -R 777 dir
find site/ -type d -exec chmod 755 {} +

la bonne solution, partie 1 : répertoires en 755

find site/ -type f -exec chmod 644 {} +

partie 2 : fichiers en 644

Attention : Donne à tous les utilisateurs et à tout service compromis de la machine un accès en écriture à toute l’arborescence, rend tous les fichiers exécutables et fait refuser à OpenSSH les clés situées dans un ~/.ssh en 777. Appliqué à /etc ou /usr, il peut casser sudo et le système. Corrigez plutôt la propriété avec chown, ou utilisez les deux commandes find.

chown

Modifier le propriétaire et le groupe de fichiers

DangereuxLinux · macOS#
chown [-R] user[:group] file...
-R
récursif
user:
avec deux-points final et sans groupe, définit aussi le groupe sur le groupe de connexion de l’utilisateur
sudo chown -R www-data:www-data /var/www/site

confier une racine web à l’utilisateur du serveur web

sudo chown "$USER": file.txt

récupérer la propriété d’un fichier créé par root

Attention : sudo chown -R sur /, /usr ou /etc efface les bits setuid et les propriétés dont dépendent sudo, passwd et les services ; la récupération passe généralement par une réinstallation. Vérifiez bien le chemin.

chgrp

Modifier seulement le groupe de fichiers

Linux · macOS#
chgrp [-R] group file...
chgrp -R developers /srv/shared

confier un dossier partagé au groupe d’une équipe

umask

Définir les permissions par défaut des nouveaux fichiers

Linux · macOS#
umask [mask]
umask

afficher le masque actuel, souvent 0022

umask 077

nouveaux fichiers en 600 et répertoires en 700 dans ce shell

Le masque retire des bits : les fichiers partent de 666 et les répertoires de 777, donc 022 donne 644 et 755.

sudo

Exécuter une commande en tant que root (ou autre utilisateur)

Linux · macOS#
sudo [-u user] [-i] command
-i
shell de connexion root
-u user
exécuter en tant que cet utilisateur au lieu de root
-l
lister ce que vous avez le droit d’exécuter
-k
oublier les identifiants en cache
sudo systemctl restart nginx

une commande d’administration

sudo !!

relancer la commande précédente avec sudo

sudo -u postgres psql

exécuter en tant qu’utilisateur de service

su

Changer d’utilisateur

Linux · macOS#
su [-] [user]
su - deploy

se connecter en tant que deploy avec son environnement

sudo su -

shell root quand root n’a pas de mot de passe (sudo -i fait de même)

setfacl / getfacl

Donner accès à un utilisateur supplémentaire avec les ACL

Linux#
setfacl -m u:user:perms file
-m
modifier (ajouter) une entrée
-x
supprimer une entrée
-b
supprimer toutes les entrées ACL
-R
récursif
-d
définir l’ACL par défaut héritée par les nouveaux fichiers
setfacl -m u:alice:rw report.xlsx

alice peut lire et écrire, sans changer le groupe

getfacl report.xlsx

afficher toutes les entrées

setfacl -R -m g:devs:rwX /srv/app

un groupe obtient l’accès à toute une arborescence

Un + à la fin de la chaîne de permissions de ls -l indique que le fichier a une ACL.

chattr / lsattr

Rendre un fichier immuable

Linux#
chattr +i|-i file
sudo chattr +i /etc/resolv.conf

personne, pas même root, ne peut le modifier ou le supprimer avant -i

lsattr /etc/resolv.conf

afficher les attributs ; i signifie immuable

Pris en charge sur ext4, XFS, Btrfs. Si « Operation not permitted » s’affiche même en root, vérifiez lsattr.

Processus et tâches

Trouver ce qui tourne, l’arrêter et lancer des choses en arrière-plan.

ps

Lister les processus en cours

Linux · macOS#
ps aux | ps -ef | ps -o fields -p PID
aux
tous les processus avec CPU, mémoire, utilisateur (style BSD)
-ef
tous les processus avec le PID parent (style System V)
-o
choisir les colonnes
--sort=-%mem
trier par mémoire, la plus élevée d’abord (procps)
ps aux | grep [n]ginx

l’astuce [n] exclut grep lui-même des résultats

ps aux --sort=-%mem | head

les plus gros consommateurs de mémoire

ps -o pid,ppid,etime,cmd -p 1234

depuis combien de temps un processus tourne

macOS/BSD : Le ps de macOS n’a pas --sort ; utilisez ps aux -m (par mémoire) ou ps aux -r (par CPU).

pstree

Afficher les processus sous forme d’arbre parent/enfant

Linux#
pstree [-p] [user|PID]
pstree -p

avec les PID

pstree -p 1234

ce qu’un processus a lancé

top

Surveiller l’utilisation du CPU et de la mémoire en direct

Linux · macOS#
top [-u user] [-p PID] [-b -n 1]
P / M
trier par CPU / mémoire (top de Linux)
1
afficher chaque cœur du CPU
k
tuer un processus par son PID
q
quitter
-b -n 1
un instantané en mode batch, pour les scripts
top -b -n 1 | head -20

instantané à coller dans un ticket

macOS/BSD : Le top de macOS est un autre programme : triez avec top -o cpu ou top -o mem.

htop

Visionneuse de processus interactive plus conviviale

Linux#
htop [-u user]
F3 or /
rechercher
F4
filtrer
F6
choisir la colonne de tri
F9
envoyer un signal (kill)
t
vue en arbre
htop -u www-data

uniquement les processus d’un utilisateur

À installer avec apt install htop / dnf install htop.

pgrep

Trouver des ID de processus par nom

Linux · macOS#
pgrep [-a] [-f] [-u user] pattern
-a
afficher la ligne de commande complète (procps sous Linux)
-f
chercher dans toute la ligne de commande, pas seulement le nom
-u user
uniquement les processus de cet utilisateur
-x
correspondance exacte du nom
pgrep -a nginx

PID et lignes de commande

pgrep -f 'python manage.py runserver'

trouver un script par ses arguments

macOS/BSD : Sous macOS, -a signifie « inclure les ancêtres » ; utilisez pgrep -lf pour voir les noms et les arguments.

pkill

Arrêter des processus par nom

Linux · macOS#
pkill [-signal] [-f] [-u user] pattern
pkill -f "node server.js"

arrêter une application Node

pkill -HUP nginx

envoyer un signal de rechargement

pgrep -af node

voir ce que -f ciblerait avant de tuer

Les motifs sont des expressions régulières recherchées n’importe où dans le nom ; pkill node touche aussi nodejs-helper. Vérifiez d’abord avec pgrep.

kill

Envoyer un signal à un processus (arrêter, tuer, recharger)

Linux · macOS#
kill [-signal] PID...
(none) / -15 / -TERM
demander au processus de se terminer proprement (par défaut)
-9 / -KILL
arrêt forcé ; ne peut pas être intercepté, aucun nettoyage
-1 / -HUP
beaucoup de démons rechargent leur configuration
-l
lister les noms des signaux
kill 1234

arrêt poli

kill -9 1234

dernier recours quand TERM est ignoré

kill %1

tuer la tâche 1 de ce shell

Essayez d’abord un simple kill et laissez quelques secondes : -9 saute le nettoyage, ce qui peut laisser des fichiers temporaires, des verrous et des données à moitié écrites.

killall

Tuer tous les processus portant un nom exact

Linux · macOS#
killall [-signal] name
killall firefox

tous les processus Firefox

Sous Linux, se trouve dans le paquet psmisc.

Ctrl+Z, bg, fg, jobs

Mettre une commande en pause et la poursuivre en arrière-plan

Linux · macOS#
Ctrl+Z; bg [%n]; fg [%n]; jobs
jobs

lister les tâches de ce shell avec leur numéro

bg %1

reprendre la tâche 1 en arrière-plan

fg %1

la ramener au premier plan

Ctrl+Z suspend le programme au premier plan (il s’arrête jusqu’à bg ou fg).

&

Lancer une commande en arrière-plan

Linux · macOS#
command &
./long-export.sh > export.log 2>&1 &

la lancer et récupérer l’invite

wait

dans un script, attendre la fin des tâches en arrière-plan

nohup

Garder une commande active après la déconnexion

Linux · macOS#
nohup command > log 2>&1 &
nohup ./server > server.log 2>&1 &

survit à la fermeture de la session SSH

Pour tout ce qui doit durer, un service systemd (voir Services et journaux) ou tmux est plus robuste.

disown

Détacher du shell une tâche déjà en cours

Linux · macOS#
disown [-h] [%n]
disown -h %1

vous avez oublié nohup : passez-la en arrière-plan avec bg, puis détachez-la avec disown

tmux

Garder une session de terminal active malgré les déconnexions

Linux#
tmux new -s name | tmux attach -t name
Ctrl+B d
se détacher (la session continue)
Ctrl+B c
nouvelle fenêtre
Ctrl+B % / Ctrl+B "
diviser gauche/droite / haut/bas
tmux ls
lister les sessions
tmux new -s deploy

démarrer une session nommée

tmux attach -t deploy

se reconnecter après une coupure SSH

À installer avec votre gestionnaire de paquets. GNU screen est l’alternative plus ancienne (Ctrl+A d pour se détacher, screen -r pour se rattacher).

nice / renice

Lancer une commande avec une priorité CPU plus basse (ou plus haute)

Linux · macOS#
nice -n N command | renice -n N -p PID
nice -n 19 tar -czf backup.tgz /data

sauvegarde qui ménage les autres processus

sudo renice -n -5 -p 1234

augmenter la priorité d’un processus en cours

La valeur nice va de -20 (priorité la plus haute) à 19 (la plus basse). Seul root peut descendre sous 0.

timeout

Tuer une commande si elle dure trop longtemps

Linux#
timeout [-s signal] duration command
timeout 30s curl -s https://example.com/health

abandonner au bout de 30 secondes

timeout -s KILL 5m ./job.sh

arrêt forcé au bout de cinq minutes

Se termine avec le code 124 si la limite de temps est atteinte.

watch

Relancer une commande toutes les quelques secondes

Linux#
watch [-n seconds] [-d] command
watch -n 2 df -h

regarder l’espace disque se remplir

watch -d 'ss -s'

-d met en évidence ce qui a changé

lsof

Voir quel processus a un fichier ou un port ouvert

Linux · macOS#
lsof [-i :port] [-p PID] [file]
sudo lsof -i :8080

ce qui écoute sur le port 8080

sudo lsof +L1

fichiers supprimés encore ouverts (disque plein mais du n’affiche rien)

lsof -p 1234

tous les fichiers ouverts par un processus

fuser

Trouver (ou tuer) ce qui utilise un point de montage ou un port

DangereuxLinux#
fuser [-v] [-m] [-k] target
sudo fuser -vm /mnt/usb

pourquoi umount affiche « target is busy »

sudo fuser -v 8080/tcp

processus sur un port TCP

Attention : fuser -k tue sans confirmation tous les processus qui utilisent la cible ; sur un point de montage, cela peut inclure votre propre shell.

time

Mesurer la durée d’une commande

Linux · macOS#
time command
time ./build.sh

real = temps réel écoulé, user + sys = temps CPU

strace

Tracer les appels système d’un programme

Linux#
strace [-f] [-e trace=...] command | strace -p PID
strace -f -e trace=openat ./app 2>&1 | grep -v ENOENT

quels fichiers ouvre-t-il réellement ?

sudo strace -p 1234

sur quoi un processus figé est-il bloqué ?

Infos système et ressources

Version de l’OS, noyau, CPU, mémoire, matériel, heure et charge.

uname

Afficher la version du noyau et l’architecture

Linux · macOS#
uname [-a|-r|-m]
-a
tout
-r
version du noyau
-m
architecture de la machine : x86_64, aarch64
uname -r

ex. 6.8.0-45-generic

uname -m

quel binaire télécharger : x86_64 ou aarch64

cat /etc/os-release

Trouver la distribution Linux et sa version

Linux#
cat /etc/os-release
cat /etc/os-release

NAME, VERSION_ID, ID pour toutes les distributions de l’ère systemd

lsb_release -a

alternative Debian/Ubuntu, si installée

macOS/BSD : macOS : sw_vers.

hostnamectl

Afficher ou définir le nom d’hôte

Linux#
hostnamectl [set-hostname name]
hostnamectl

nom d’hôte, OS, noyau, virtualisation

sudo hostnamectl set-hostname web01

renommer la machine

uptime

Afficher la durée de fonctionnement et la charge moyenne

Linux · macOS#
uptime
uptime

charge moyenne sur 1, 5 et 15 minutes

La charge est le nombre de processus en cours d’exécution ou en attente. Comparez-la au nombre de CPU (nproc) : une charge de 4 sur 4 cœurs signifie une machine pleinement occupée.

free

Vérifier l’utilisation de la mémoire et du swap

Linux#
free [-h]
free -h

regardez la colonne « available », pas « free »

macOS/BSD : macOS : vm_stat, ou top -l 1 | grep PhysMem.

Linux utilise la RAM libre comme cache disque : « free » paraît donc faible sur une machine en bonne santé. « available » correspond à ce que les programmes peuvent encore obtenir.

lscpu / nproc

Afficher le modèle de CPU et le nombre de cœurs

Linux#
lscpu | nproc
lscpu

modèle, sockets, cœurs, threads, flags

make -j"$(nproc)"

utiliser tous les cœurs disponibles

macOS/BSD : macOS : sysctl -n hw.ncpu et sysctl -n machdep.cpu.brand_string.

lspci / lsusb

Lister les périphériques PCI et USB

Linux#
lspci [-k] | lsusb
lspci -k | grep -A3 -i vga

carte graphique et pilote utilisé

lsusb

le périphérique USB est-il seulement détecté ?

dmidecode / lshw

Afficher les emplacements de RAM, le BIOS et les détails du matériel

Linux#
sudo dmidecode -t type | sudo lshw -short
sudo dmidecode -t memory | grep -i size

RAM installée par emplacement

sudo lshw -short

une ligne par périphérique

dmesg

Lire les messages du noyau (matériel, pilotes, arrêts par l’OOM killer)

Linux#
dmesg [-T] [-w] [--level=...]
-T
horodatages lisibles
-w
suivre les nouveaux messages
--level=err,warn
uniquement les problèmes
sudo dmesg -T | tail -30

ce qui vient de se passer (clé USB branchée, erreurs disque)

sudo dmesg -T | grep -i 'out of memory'

l’OOM killer a-t-il arrêté votre application ?

/proc

Lire les infos brutes sur le CPU, la mémoire et les processus dans /proc

Linux#
cat /proc/<file>
grep MemAvailable /proc/meminfo

mémoire disponible en ko

grep -c ^processor /proc/cpuinfo

nombre de CPU logiques

cat /proc/1234/status

état et mémoire d’un processus

vmstat / iostat

Savoir si le goulot d’étranglement est le CPU, la mémoire ou le disque

Linux#
vmstat interval count | iostat -xz interval
vmstat 1 5

r = file d’exécution, si/so = swap, wa = attente d’E/S

iostat -xz 1

utilisation par disque (%util) et latence (await)

iostat fait partie du paquet sysstat.

date

Afficher ou calculer des dates et des timestamps Unix

Linux · macOS#
date [+format] [-d 'description']
+%F
AAAA-MM-JJ
+%s
timestamp Unix (secondes)
-d 'text'
analyser une date : tomorrow, 2 days ago, @1700000000 (GNU)
-u
UTC
date '+%Y-%m-%d %H:%M:%S'

horodatage pour les journaux

date +%s

secondes depuis le 1970-01-01 UTC

date -d @1700000000

timestamp vers date (GNU)

date -d '2 days ago' +%F

date relative (GNU)

macOS/BSD : Le date de macOS n’a pas -d. Utilisez date -r 1700000000 pour un timestamp, date -v-2d pour « il y a 2 jours » et date -j -f '%Y-%m-%d' 2026-10-18 +%s pour analyser une date.

timedatectl

Définir le fuseau horaire et vérifier la synchronisation de l’horloge

Linux#
timedatectl [set-timezone Zone]
timedatectl

heure locale, UTC, fuseau horaire, NTP synchronisé ?

timedatectl list-timezones | grep America

trouver le nom du fuseau

sudo timedatectl set-timezone America/Toronto

le modifier

Disques et systèmes de fichiers

Espace libre, ce qui l’occupe, partitions, montage et formatage.

df

Vérifier l’espace disque libre

Linux · macOS#
df [-h] [-T] [-i] [path]
-h
tailles lisibles
-T
afficher le type de système de fichiers (GNU)
-i
utilisation des inodes au lieu des octets
df -h

tous les systèmes de fichiers montés

df -h .

le système de fichiers de ce répertoire

df -i

« No space left » alors qu’il reste des octets ? Vous manquez peut-être d’inodes

macOS/BSD : Sous macOS, -T filtre par type au lieu de l’afficher.

du

Trouver ce qui occupe l’espace disque

Linux · macOS#
du [-s] [-h] [-d depth] [path...]
-s
un total par argument
-h
tailles lisibles
-d N
limite de profondeur (forme longue GNU : --max-depth=N)
-x
rester sur un seul système de fichiers
du -sh /var/log

taille d’un dossier

du -h -d 1 | sort -h

sous-dossiers, les plus gros en dernier (fonctionne sous GNU et macOS)

sudo du -xh -d 1 / | sort -h | tail

les plus gros répertoires de premier niveau

macOS/BSD : Le du de macOS a -d mais pas --max-depth.

ncdu

Explorer l’utilisation du disque de façon interactive

Linux#
ncdu [-x] [path]
sudo ncdu -x /

naviguer avec les flèches, d pour supprimer

À installer avec apt install ncdu / dnf install ncdu.

lsblk

Lister les disques et les partitions

Linux#
lsblk [-f]
-f
type de système de fichiers, étiquette, UUID, point de montage
lsblk

disques, partitions, tailles, points de montage

lsblk -f

quelle partition est en ext4/xfs, et son UUID

macOS/BSD : macOS : diskutil list.

blkid

Obtenir l’UUID d’une partition

Linux#
sudo blkid [device]
sudo blkid /dev/sdb1

UUID et TYPE, pour /etc/fstab

findmnt

Voir ce qui est monté et où

Linux#
findmnt [target] | findmnt -T path
findmnt

arborescence des montages avec leurs options

findmnt -T /var/lib/docker

quel système de fichiers contient ce chemin

sudo findmnt --verify

vérifier /etc/fstab avant de redémarrer

mount

Monter un disque ou une partition

Linux#
mount [-t type] [-o options] device dir
sudo mount /dev/sdb1 /mnt/usb

monter une clé USB (le répertoire doit exister)

sudo mount -o remount,rw /

rendre accessible en écriture une racine en lecture seule

sudo mount -t nfs nas:/export /mnt/nas

monter un partage NFS

umount

Démonter un disque

Linux#
umount dir|device
sudo umount /mnt/usb

vous pouvez débrancher sans risque ensuite

sudo umount -l /mnt/nas

différé : détacher maintenant, nettoyer quand ce n’est plus utilisé

« target is busy » signifie qu’un processus l’utilise (souvent votre propre shell placé dans ce répertoire) : trouvez-le avec fuser -vm ou lsof.

/etc/fstab

Monter un disque automatiquement au démarrage

Linux#
UUID=<uuid> <mountpoint> <type> <options> <dump> <pass>
UUID=3f6c...  /data  ext4  defaults,nofail  0  2

une ligne par système de fichiers ; nofail permet de poursuivre le démarrage si le disque est absent

sudo mount -a

monter tout le contenu de fstab maintenant : testez avant de redémarrer

Une faute de frappe dans fstab peut faire démarrer la machine en mode d’urgence. Lancez toujours sudo mount -a (ou findmnt --verify) après modification.

fdisk / parted

Afficher ou modifier les tables de partitions

DangereuxLinux#
sudo fdisk -l | sudo fdisk /dev/sdX | sudo parted /dev/sdX print
sudo fdisk -l

tous les disques et leurs partitions

sudo parted /dev/sdb print

type de table de partitions (gpt/msdos) et organisation

Attention : Écrire une table de partitions (w dans fdisk, mklabel dans parted) rend inaccessibles les données existantes du disque. Vérifiez d’abord le nom du périphérique avec lsblk ; /dev/sda et /dev/sdb s’intervertissent facilement.

mkfs

Formater une partition

DangereuxLinux#
sudo mkfs.<type> device
sudo mkfs.ext4 -L data /dev/sdb1

ext4 avec une étiquette

sudo mkfs.vfat -F 32 /dev/sdc1

FAT32 pour une clé USB lisible par d’autres appareils

Attention : Efface immédiatement le système de fichiers de la cible, sans confirmation si le périphérique n’est pas monté. Vérifiez le périphérique avec lsblk -f ; formater /dev/sda au lieu de /dev/sda1, ou le mauvais disque, le détruit.

fsck

Vérifier et réparer un système de fichiers

DangereuxLinux#
sudo fsck [-f] device
sudo fsck -f /dev/sdb1

forcer une vérification complète d’une partition démontée

Attention : Ne lancez jamais fsck sur un système de fichiers monté en lecture-écriture : vous risquez de le corrompre. Démontez-le d’abord ou, pour le système de fichiers racine, démarrez sur un support de secours.

dd

Écrire une ISO sur une clé USB ou copier un disque brut

DangereuxLinux · macOS#
dd if=input of=output bs=size [status=progress] [conv=fsync]
if= / of=
fichier ou périphérique d’entrée / de sortie
bs=4M
taille de bloc ; plus grand est plus rapide
status=progress
afficher les octets copiés (GNU)
conv=fsync
vider les tampons vers le périphérique avant de quitter
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress conv=fsync

créer une clé USB amorçable (remplacez sdX par le disque entier, pas une partition)

dd if=/dev/zero of=test.img bs=1M count=100

créer un fichier de 100 Mo

Attention : dd écrase la cible of= sans demander. Inverser if= et of=, ou choisir le mauvais /dev/sdX, efface ce disque. Vérifiez avec lsblk juste avant de lancer la commande.

macOS/BSD : macOS : ciblez /dev/rdiskN (d’après diskutil list) après diskutil unmountDisk, utilisez bs=4m et appuyez sur Ctrl+T pour voir la progression.

sync

Écrire sur le disque les données en attente

Linux · macOS#
sync
sync && sudo umount /mnt/usb

avant de retirer une clé USB

swapon / mkswap

Vérifier ou ajouter de l’espace d’échange (swap)

Linux#
swapon --show | mkswap file && swapon file
swapon --show

swap actuel

sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile

ajouter un fichier d’échange de 2 Go (ajoutez-le à /etc/fstab pour le conserver)

Sous Btrfs, un fichier d’échange demande des étapes supplémentaires (btrfs filesystem mkswapfile avec les btrfs-progs récents).

shred

Écraser un fichier avant de le supprimer

DangereuxLinux#
shred [-u] [-n passes] file
shred -u -n 3 secrets.txt

écraser trois fois, puis supprimer

Attention : Irréversible. Notez aussi que ce n’est pas fiable sur les SSD, les systèmes de fichiers journalisés ou copy-on-write (Btrfs, ZFS) ni avec des instantanés ; pour une vraie protection, utilisez le chiffrement complet du disque.

Réseau

Adresses IP, routes, ports ouverts, requêtes HTTP, DNS, SSH et transfert de fichiers.

ip addr

Afficher les adresses IP de cette machine

Linux#
ip [-br] addr [show dev IFACE]
ip -br a

une ligne par interface : nom, état, adresses

ip a show eth0

une interface en détail

hostname -I

uniquement les adresses IP

macOS/BSD : macOS : ifconfig, ou ipconfig getifaddr en0.

ip remplace l’ancien ifconfig (net-tools), que beaucoup de distributions n’installent plus.

ip route

Afficher la table de routage et la passerelle par défaut

Linux#
ip route [get ADDRESS] | ip route add NET via GW
ip r

routes ; « default via » est la passerelle

ip route get 1.1.1.1

quelle interface et quelle passerelle une destination utilise

sudo ip route add 10.20.0.0/16 via 192.168.1.1

ajouter une route (perdue au redémarrage)

ip link

Activer ou désactiver une interface réseau

DangereuxLinux#
ip link [set IFACE up|down]
ip link

interfaces et adresses MAC

sudo ip link set eth0 down && sudo ip link set eth0 up

redémarrer une interface

Attention : Désactiver l’interface par laquelle vous êtes connecté en SSH coupe votre session.

ss

Lister les ports en écoute et les connexions ouvertes

Linux#
ss [-t] [-u] [-l] [-p] [-n]
-t / -u
TCP / UDP
-l
sockets en écoute uniquement
-p
afficher le processus (sudo pour voir ceux des autres utilisateurs)
-n
ports numériques, sans DNS
-s
totaux récapitulatifs
sudo ss -tulpn

tous les ports en écoute et leur programme

ss -tn state established '( dport = :443 )'

connexions établies vers le port 443

ss -s

totaux des connexions

macOS/BSD : macOS : lsof -iTCP -sTCP:LISTEN -n -P, ou netstat -an.

ss remplace netstat ; netstat -tulpn fonctionne encore là où net-tools est installé.

curl

Faire une requête HTTP ou télécharger un fichier

Linux · macOS#
curl [options] URL
-I
en-têtes uniquement (requête HEAD)
-L
suivre les redirections
-o file / -O
enregistrer dans un fichier / enregistrer sous le nom distant
-s / -S
silencieux / mais afficher quand même les erreurs
-f
échouer (code 22) sur un HTTP 4xx/5xx au lieu d’afficher la page d’erreur
-v
verbeux : en-têtes de requête et de réponse, TLS
curl -I https://example.com

ligne de statut et en-têtes

curl -LO https://example.com/file.tar.gz

télécharger en suivant les redirections

curl -s -o /dev/null -w '%{http_code}\n' https://example.com

uniquement le code de statut

curl -fsSL https://example.com/install.sh -o install.sh

télécharger un script pour le lire avant de l’exécuter

curl -d

Envoyer une requête POST avec du JSON

Linux · macOS#
curl -H 'Content-Type: application/json' -d 'json' URL
-d data
corps de la requête ; implique POST
--data-binary @file
envoyer un fichier tel quel
-H header
ajouter un en-tête
-X METHOD
PUT, PATCH, DELETE…
-u user:pass
authentification basique
curl -H 'Content-Type: application/json' -d '{"name":"Ada"}' https://api.example.com/users

POST de JSON

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me

guillemets doubles pour que $TOKEN soit développé

curl -X DELETE https://api.example.com/users/42

autres méthodes

wget

Télécharger des fichiers (avec reprise)

Linux#
wget [options] URL
-c
reprendre un téléchargement partiel
-O file
enregistrer sous (-O- pour la sortie standard)
-q
silencieux
-r -np
récursif, sans jamais remonter au répertoire parent
wget -c https://example.com/big.iso

reprendre après une coupure de connexion

wget -qO- https://example.com/data.json | jq .

envoyer directement dans une autre commande

macOS/BSD : Absent de macOS par défaut ; utilisez curl -LO (curl -C - -LO pour reprendre).

dig

Interroger les enregistrements DNS

Linux · macOS#
dig [@server] name [type] [+short]
dig +short example.com

uniquement les enregistrements A

dig MX example.com

serveurs de messagerie

dig @1.1.1.1 example.com

interroger un résolveur précis (contourne le cache local)

dig -x 8.8.8.8

résolution inverse

dig +trace example.com

suivre la délégation depuis la racine

Nom du paquet : dnsutils (Debian/Ubuntu) ou bind-utils (Fedora/RHEL).

host / nslookup

Résolution DNS rapide

Linux · macOS#
host name | nslookup name [server]
host example.com

A, AAAA et MX en une réponse courte

nslookup example.com 8.8.8.8

la même commande existe sous Windows

resolvectl

Voir les serveurs DNS utilisés et vider le cache DNS

Linux#
resolvectl [status|query|flush-caches]
resolvectl status

serveurs DNS par interface

sudo resolvectl flush-caches

vider le cache de systemd-resolved

macOS/BSD : macOS : sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder.

Uniquement sur les systèmes utilisant systemd-resolved (Ubuntu, Fedora par défaut).

ping

Tester si un hôte est joignable

Linux · macOS#
ping [-c count] [-i interval] host
-c N
s’arrêter après N paquets
-i sec
intervalle entre les paquets
-4 / -6
forcer IPv4 / IPv6
ping -c 4 example.com

quatre paquets, puis un récapitulatif

Sous Linux et macOS, ping tourne jusqu’à Ctrl+C sauf avec -c (Windows s’arrête après 4). L’absence de réponse ne signifie pas toujours que l’hôte est hors ligne : beaucoup bloquent l’ICMP.

traceroute / tracepath

Voir l’itinéraire des paquets vers un hôte

Linux · macOS#
traceroute [-n] host | tracepath host
traceroute -n example.com

sauts sans résolution DNS

tracepath example.com

pas besoin de root, indique aussi le MTU

macOS/BSD : macOS a traceroute mais pas tracepath.

traceroute doit parfois être installé sous Linux ; tracepath (iputils) est généralement présent.

mtr

Trouver où se produisent les pertes de paquets

Linux#
mtr [-r] [-w] [-c count] host
mtr -rw -c 100 example.com

rapport après 100 sondes par saut

Combine ping et traceroute. Une perte sur un seul saut intermédiaire vient généralement d’un routeur qui dépriorise l’ICMP ; une perte qui se prolonge jusqu’au bout est réelle.

ssh

Se connecter à une machine distante

Linux · macOS#
ssh [-p port] [-i key] [-J jump] user@host [command]
ssh alice@203.0.113.10

se connecter

ssh -p 2222 alice@host

port non standard

ssh alice@host 'df -h'

exécuter une commande et revenir

ssh -J bastion.example.com alice@10.0.0.5

passer par un hôte bastion

ssh -L / -R / -D

Rediriger un port via SSH (tunnel)

Linux · macOS#
ssh -L local:host:remote user@server
-L 5432:localhost:5432
le port local 5432 atteint le port 5432 du serveur
-R 8080:localhost:3000
le port 8080 du serveur atteint votre port local 3000
-D 1080
proxy SOCKS sur le port local 1080
-N
pas de commande distante, juste le tunnel
ssh -N -L 5432:localhost:5432 alice@db-host

connecter votre client de base de données local à un Postgres distant

ssh -N -D 1080 alice@host

naviguer en passant par le serveur

ssh-keygen

Créer une clé SSH et l’installer sur un serveur

Linux · macOS#
ssh-keygen -t ed25519 [-C comment] | ssh-copy-id user@host
ssh-keygen -t ed25519 -C "you@example.com"

nouvelle paire de clés dans ~/.ssh

ssh-copy-id alice@host

ajouter votre clé publique au fichier authorized_keys du serveur

ssh-keygen -R host

supprimer une ancienne clé d’hôte après la réinstallation d’un serveur (« REMOTE HOST IDENTIFICATION HAS CHANGED »)

~/.ssh/config

Enregistrer des paramètres de connexion SSH sous un alias court

Linux · macOS#
Host alias / HostName / User / Port / IdentityFile
Host web
  HostName 203.0.113.10
  User deploy
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

ensuite, simplement : ssh web (scp et rsync l’utilisent aussi)

scp

Copier des fichiers vers ou depuis un serveur via SSH

Linux · macOS#
scp [-r] [-P port] source... dest
-r
copier des répertoires
-P port
port (P majuscule ; ssh utilise -p minuscule)
-i key
fichier d’identité
scp report.pdf alice@host:/tmp/

envoyer

scp alice@host:/var/log/app.log .

récupérer

scp -r -P 2222 site/ alice@host:~/

envoyer un dossier sur un autre port

Depuis OpenSSH 9.0, scp utilise le protocole SFTP en arrière-plan. Pour les copies volumineuses ou répétées, rsync est plus rapide car il n’envoie que les modifications.

rsync

Synchroniser des dossiers en local ou via SSH

Linux · macOS#
rsync [-avz] [--progress] [-n] source dest
-a
archive : récursif, conserve permissions, dates, liens
-v
verbeux
-z
compresser pendant le transfert
-P
progression et reprise des fichiers partiels
-n
simulation : montrer ce qui se passerait
--exclude 'pattern'
ignorer des fichiers
-e 'ssh -p 2222'
options SSH personnalisées
rsync -avzP site/ deploy@host:/srv/site/

la barre oblique finale de site/ copie son contenu, pas le dossier lui-même

rsync -av --exclude 'node_modules' ./ /backup/app/

sauvegarde locale sans le superflu

macOS/BSD : Les macOS récents fournissent openrsync au lieu de rsync ; les options courantes fonctionnent, certaines plus rares non.

src/ signifie « le contenu de src » ; src sans barre oblique signifie « le dossier src ». Une erreur ici imbrique les dossiers (dest/src/…).

rsync --delete

Faire de la destination un miroir exact

DangereuxLinux · macOS#
rsync -av --delete source/ dest/
rsync -avn --delete site/ /srv/site/

simulation d’abord : les lignes commençant par « deleting » montrent ce qui serait supprimé

rsync -av --delete site/ /srv/site/

puis l’exécution réelle

Attention : Supprime dans dest tout ce qui n’est pas dans la source. Inverser source et destination, ou un chemin source vide ou erroné, efface la destination. Lancez toujours d’abord avec -n.

nc

Tester si un port TCP est ouvert

Linux · macOS#
nc -zv host port | nc -l port
nc -zv db.internal 5432

« succeeded » ou « Connection refused »/délai dépassé

nc -l 9000

écouter sur un port pour tester un pare-feu depuis l’autre côté

Les options diffèrent selon les variantes de netcat : la version traditionnelle exige nc -l -p 9000.

ufw

Gérer le pare-feu sous Ubuntu

DangereuxLinux#
sudo ufw [status|allow|deny|delete|enable]
sudo ufw status verbose

règles et politique par défaut

sudo ufw allow 22/tcp

autoriser SSH (avant enable)

sudo ufw allow from 10.0.0.0/8 to any port 5432

un port, un réseau

Attention : sudo ufw enable sur un serveur distant sans avoir d’abord autorisé SSH (ufw allow OpenSSH ou 22/tcp) vous bloque l’accès.

firewall-cmd

Gérer le pare-feu sous Fedora/RHEL

Linux#
sudo firewall-cmd [--permanent] --add-service|--add-port ...
sudo firewall-cmd --list-all

zone active et règles

sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload

ouvrir HTTPS de façon permanente

sudo firewall-cmd --permanent --add-port=8080/tcp

ouvrir un port

Sans --permanent, une règle ne dure que jusqu’au prochain rechargement ou redémarrage.

nmcli

Gérer le Wi-Fi et les connexions (NetworkManager)

Linux#
nmcli [device|connection] ...
nmcli device status

interfaces et état de connexion

nmcli device wifi list

réseaux à proximité

nmcli device wifi connect 'MyWiFi' password 'secret'

se connecter à un réseau

Paquets : apt, dnf, pacman, zypper

La même tâche avec les quatre principaux gestionnaires de paquets : Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman), openSUSE (zypper). Préfixez avec sudo tout ce qui modifie le système.

Tâcheapt (Debian, Ubuntu)dnf (Fedora, RHEL)pacman (Arch)zypper (openSUSE)
Actualiser la liste des paquets #
dnf actualise automatiquement les métadonnées périmées. Sous Arch, ne lancez jamais pacman -Sy suivi de -S paquet : les mises à jour partielles ne sont pas prises en charge ; utilisez -Syu.
apt update
dnf makecache
pacman -Sy
zypper refresh
Tout mettre à jour #
openSUSE Tumbleweed utilise zypper dup. apt full-upgrade supprime aussi des paquets si nécessaire pour terminer la mise à jour.
apt update && apt upgrade
dnf upgrade
pacman -Syu
zypper update
Installer un paquet #
apt install nginx
dnf install nginx
pacman -S nginx
zypper install nginx
Installer un fichier de paquet téléchargé #
Le ./ indique à apt qu’il s’agit d’un fichier et non d’un nom de paquet : les dépendances sont donc résolues (ce que dpkg -i ne fait pas).
apt install ./app.deb
dnf install ./app.rpm
pacman -U app.pkg.tar.zst
zypper install ./app.rpm
Supprimer un paquet #
apt remove nginx
dnf remove nginx
pacman -R nginx
zypper remove nginx
Supprimer avec les fichiers de configuration / dépendances inutilisées #
apt purge nginx && apt autoremove
dnf remove nginx && dnf autoremove
pacman -Rns nginx
zypper remove --clean-deps nginx
Afficher les détails d’un paquet #
apt show nginx
dnf info nginx
pacman -Si nginx (installed: -Qi)
zypper info nginx
Lister les paquets installés #
apt list --installed
dnf list --installed
pacman -Q
zypper search --installed-only
Lister les mises à jour disponibles #
apt list --upgradable
dnf check-update
checkupdates (pacman-contrib)
zypper list-updates
Quel paquet possède un fichier #
Pour les fichiers pas encore installés : dnf provides /chemin, apt-file search chemin (nécessite apt-file), pacman -F chemin.
dpkg -S /usr/bin/curl
rpm -qf /usr/bin/curl
pacman -Qo /usr/bin/curl
rpm -qf /usr/bin/curl
Lister les fichiers installés par un paquet #
dpkg -L nginx
rpm -ql nginx
pacman -Ql nginx
rpm -ql nginx
Bloquer un paquet à sa version actuelle #
Sous DNF 4, versionlock nécessite le paquet du plugin versionlock.
apt-mark hold nginx
dnf versionlock add nginx
IgnorePkg = nginx in /etc/pacman.conf
zypper addlock nginx
Vider le cache des paquets #
apt clean
dnf clean all
pacman -Sc
zypper clean

Utilisateurs et groupes

Qui vous êtes, qui est connecté, et gestion des comptes.

whoami / id

Afficher votre nom d’utilisateur, UID et groupes

Linux · macOS#
whoami | id [user]
id

uid, gid et tous vos groupes

id alice

un autre utilisateur

who / w / last

Voir qui est connecté et les connexions récentes

Linux · macOS#
who | w | last [-n N]
w

qui est connecté et ce qu’il exécute

last -n 10

connexions et redémarrages récents

sudo lastb -n 10

tentatives de connexion échouées récentes (Linux)

useradd

Créer un compte utilisateur

Linux#
sudo useradd [-m] [-s shell] [-G groups] user
-m
créer le répertoire personnel (pas par défaut sur toutes les distributions)
-s /bin/bash
shell de connexion
-G group1,group2
groupes supplémentaires
sudo useradd -m -s /bin/bash alice && sudo passwd alice

créer et définir un mot de passe

Sous Debian/Ubuntu, adduser alice est la surcouche interactive plus conviviale qui crée le répertoire personnel et le mot de passe.

usermod -aG

Ajouter un utilisateur à un groupe

DangereuxLinux#
sudo usermod -aG group user
sudo usermod -aG docker alice

permettre à alice d’utiliser docker

sudo usermod -aG sudo alice

administrateur sous Debian/Ubuntu (le groupe s’appelle wheel sous Fedora/RHEL/Arch)

Attention : Sans -a, usermod -G remplace tous les groupes supplémentaires de l’utilisateur, ce qui peut lui retirer l’accès à sudo. Les changements de groupe prennent effet à la prochaine connexion (ou lancez newgrp docker).

userdel

Supprimer un compte utilisateur

DangereuxLinux#
sudo userdel [-r] user
sudo userdel -r olduser

supprime aussi le répertoire personnel et la boîte mail locale

Attention : -r supprime définitivement le répertoire personnel et ses fichiers. Sauvegardez-le d’abord, ou verrouillez plutôt le compte (passwd -l).

passwd

Changer un mot de passe ou verrouiller un compte

Linux#
passwd [user] | passwd -l|-u user
passwd

changer le vôtre

sudo passwd alice

réinitialiser celui d’un autre

sudo passwd -l alice

verrouiller la connexion par mot de passe (les clés SSH peuvent encore fonctionner)

groupadd / gpasswd

Créer un groupe ou en retirer un utilisateur

Linux#
sudo groupadd name | sudo gpasswd -d user group
sudo groupadd developers

nouveau groupe

sudo gpasswd -d alice developers

en retirer alice

groups / getent

Lister les membres d’un groupe ou les groupes d’un utilisateur

Linux#
groups [user] | getent group name
groups alice

les groupes d’alice

getent group sudo

membres de sudo (fonctionne aussi avec LDAP)

getent passwd alice

entrée du compte : UID, répertoire personnel, shell

visudo

Donner les droits sudo à un utilisateur en toute sécurité

Linux · macOS#
sudo visudo [-f /etc/sudoers.d/file]
sudo visudo -f /etc/sudoers.d/deploy

un fichier distinct par règle

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

une commande sans mot de passe

visudo vérifie la syntaxe avant d’enregistrer. Modifier /etc/sudoers avec un éditeur ordinaire et faire une faute de frappe peut priver tout le monde de sudo.

chage

Vérifier ou définir l’expiration du mot de passe

Linux#
sudo chage [-l] [-M days] user
sudo chage -l alice

dates du dernier changement et d’expiration

sudo chage -M 90 alice

expiration tous les 90 jours

Archives et compression

tar, gzip, xz, zip et sommes de contrôle.

tar -c

Créer une archive .tar.gz

Linux · macOS#
tar -czf archive.tar.gz files...
-c
créer
-z / -j / -J
compression gzip / bzip2 / xz
-f file
nom du fichier d’archive (juste après f)
-v
lister les fichiers au fur et à mesure
--exclude='pattern'
exclure des fichiers
tar -czf site-2026-10-18.tar.gz site/

archive d’un dossier compressée en gzip

tar -cJf logs.tar.xz --exclude='*.tmp' logs/

archive xz plus petite, sans les fichiers temporaires

tar -x

Extraire un .tar.gz, .tar.xz ou .tar.bz2

Linux · macOS#
tar -xf archive [-C dir]
-x
extraire
-C dir
extraire dans rép (qui doit exister)
--strip-components=1
supprimer le dossier de premier niveau
tar -xf archive.tar.gz

GNU tar et le tar de macOS détectent eux-mêmes la compression

tar -xzf app.tar.gz -C /opt/app --strip-components=1

dans un dossier, sans le répertoire englobant

tar -t

Lister le contenu d’une archive ou en extraire un fichier

Linux · macOS#
tar -tf archive | tar -xf archive path/in/archive
tar -tf backup.tar.gz | less

voir le contenu sans extraire

tar -xf backup.tar.gz etc/nginx/nginx.conf

extraire un seul fichier (chemin tel qu’affiché par -t)

tar --zstd

Compression rapide avec zstd

Linux · macOS#
tar --zstd -cf archive.tar.zst files...
tar --zstd -cf data.tar.zst data/

bien plus rapide que xz, avec un taux comparable à gzip -9 ou meilleur

zstd -d file.zst

décompresser un seul fichier

Nécessite GNU tar 1.31+ (ou un bsdtar récent) et le programme zstd.

gzip / gunzip

Compresser ou décompresser un seul fichier

Linux · macOS#
gzip [-k] [-d] [-9] file
-k
conserver l’original
-d
décompresser (comme gunzip)
-9
compression maximale
gzip -k access.log

crée access.log.gz et conserve l’original

zcat access.log.gz | grep 404

lire sans décompresser sur le disque

zgrep 500 access.log.*.gz

chercher directement dans les journaux archivés

Sans -k, gzip remplace le fichier par sa version .gz.

xz / bzip2

Compression plus forte pour des fichiers seuls

Linux#
xz [-T0] [-9] [-d] file | bzip2 [-d] file
xz -T0 -k big.sql

tous les cœurs du CPU, original conservé

unxz big.sql.xz

décompresser

zip

Créer un fichier .zip

Linux · macOS#
zip -r archive.zip files... [-x pattern]
zip -r site.zip site/

zipper un dossier

zip -r site.zip site/ -x '*.git*' '*/node_modules/*'

exclure des chemins

zip -e chiffre avec l’ancien schéma ZipCrypto, qui est faible. Utilisez 7z ou gpg pour une vraie confidentialité.

unzip

Extraire un fichier .zip

Linux · macOS#
unzip [-l] [-o] archive.zip [-d dir]
unzip files.zip -d files/

dans un dossier

unzip -l files.zip

lister le contenu uniquement

unzip -o files.zip

écraser sans demander

7z

Manipuler les archives .7z (et la plupart des autres)

Linux#
7z a|x|l archive [files]
7z x archive.7z

extraire avec les chemins complets

7z a -p backup.7z docs/

archive chiffrée en AES-256 (demande un mot de passe)

7z l archive.rar

lister le contenu de nombreux formats

Paquet : p7zip-full / 7zip sous Debian/Ubuntu, p7zip ou 7zip sous Fedora/Arch.

sha256sum

Vérifier un téléchargement avec une somme de contrôle

Linux#
sha256sum file | sha256sum -c SUMSFILE
sha256sum ubuntu.iso

comparer avec le hash de la page de téléchargement

sha256sum -c SHA256SUMS --ignore-missing

vérifier tous les fichiers listés que vous avez réellement

macOS/BSD : macOS : shasum -a 256 fichier (et shasum -a 256 -c SUMSFILE).

split

Découper un gros fichier en morceaux et les rassembler

Linux · macOS#
split -b size file prefix
split -b 100M backup.tar.gz backup.part.

backup.part.aa, .ab, …

cat backup.part.* > backup.tar.gz

les rassembler

Traitement de texte

Découper, filtrer, trier, compter, transformer et remanier du texte et du JSON.

sed s///

Rechercher et remplacer du texte

Linux · macOS#
sed 's/old/new/[g]' file
g
remplacer toutes les correspondances de la ligne, pas seulement la première
-E
regex étendue (groupes sans barres obliques inversées)
I
correspondance insensible à la casse (GNU)
sed 's/http:/https:/g' links.txt

afficher le résultat ; le fichier reste inchangé

sed 's|/usr/local|/opt|g' paths.txt

n’importe quel délimiteur, pratique pour les chemins

sed -E 's/([0-9]+)px/\1rem/g' style.css

réutiliser un groupe capturé

sed -i

Modifier un fichier sur place

Linux · macOS#
sed -i[SUFFIX] 's/old/new/g' file
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

GNU sed

sed -i.bak 's/foo/bar/g' config.ini

conserve config.ini.bak ; fonctionne sous GNU et macOS

macOS/BSD : Le sed de macOS exige un argument après -i : sed -i '' 's/foo/bar/g' file. GNU sed lit '' comme le script : la seule forme qui fonctionne sur les deux est -i.bak.

sed -n / d

Afficher ou supprimer des lignes précises

Linux · macOS#
sed -n 'Np' | sed '/regex/d'
sed -n '100,120p' big.log

lignes 100 à 120

sed '/^\s*#/d; /^$/d' app.conf

retirer les commentaires et les lignes vides (\s de GNU)

sed -n '/BEGIN CERT/,/END CERT/p' bundle.pem

tout ce qui se trouve entre deux marqueurs

awk

Afficher des colonnes précises

Linux · macOS#
awk [-F sep] '{print $N}' file
-F sep
séparateur de champs (par défaut : suites d’espaces/tabulations)
$1 … $NF
champs ; $NF est le dernier, $0 la ligne entière
NR
numéro de ligne
awk '{print $1}' access.log

première colonne (IP du client)

awk -F: '{print $1, $7}' /etc/passwd

utilisateur et shell

awk -F, 'NR>1 {print $2}' data.csv

deuxième colonne d’un CSV, sans l’en-tête (CSV simple uniquement : pas de virgules entre guillemets)

awk (filter & sum)

Filtrer des lignes et totaliser une colonne

Linux · macOS#
awk 'condition {action} END {action}' file
awk '$9 >= 500' access.log

lignes dont le champ 9 (statut) est 5xx

awk '{s += $2} END {print s}' sales.txt

somme de la colonne 2

awk '{c[$1]++} END {for (k in c) print c[k], k}' access.log | sort -rn | head

nombre d’occurrences par valeur, top 10

cut

Découper des champs selon un délimiteur d’un seul caractère

Linux · macOS#
cut -d DELIM -f LIST | cut -c RANGE
cut -d, -f1,3 data.csv

colonnes 1 et 3

cut -d: -f1 /etc/passwd

tous les noms d’utilisateur

cut -c1-10 file

10 premiers caractères de chaque ligne

cut considère chaque délimiteur comme une séparation de champ : deux espaces donnent un champ vide. Pour une sortie alignée par des espaces, utilisez awk.

sort

Trier des lignes

Linux · macOS#
sort [-n] [-r] [-h] [-k N,N] [-t sep] [-u] file
-n
numérique
-r
inverse
-h
tailles lisibles : 2K < 1M < 3G
-k 2,2
trier uniquement sur le champ 2
-t ,
séparateur de champs
-u
supprimer les doublons
-V
ordre des versions : 1.9 < 1.10
du -sh * | sort -h

dossiers par taille

sort -t, -k3,3nr data.csv

CSV par colonne 3, numérique, décroissant

sort -u emails.txt > unique.txt

trié et dédoublonné

uniq

Compter ou supprimer les lignes en double

Linux · macOS#
sort file | uniq [-c] [-d] [-u]
-c
préfixer chaque ligne par son nombre d’occurrences
-d
uniquement les lignes répétées
-u
uniquement les lignes uniques
sort ips.txt | uniq -c | sort -rn | head

les 10 lignes les plus fréquentes

uniq ne fusionne que les doublons adjacents : triez d’abord.

wc

Compter les lignes, les mots ou les octets

Linux · macOS#
wc [-l] [-w] [-c] [-m] file...
wc -l access.log

nombre de lignes

ls | wc -l

nombre d’entrées dans ce dossier

grep -c '' file

nombre de lignes incluant une dernière ligne sans retour à la ligne

tr

Convertir ou supprimer des caractères

Linux · macOS#
tr [-d] [-s] 'set1' ['set2']
tr 'a-z' 'A-Z' < in.txt

majuscules

tr -d '\r' < windows.txt > unix.txt

supprimer les fins de ligne CRLF de Windows

tr -s ' ' < file

réduire les espaces répétées

tr '\n' ',' < list.txt

joindre les lignes avec des virgules

tr ne lit que l’entrée standard : redirigez le fichier avec <.

xargs

Transformer des lignes d’entrée en arguments de commande

Linux · macOS#
command | xargs [-0] [-n N] [-P N] [-I {}] cmd
-0
entrée séparée par des NUL (à combiner avec find -print0) ; sans problème avec les espaces
-n N
au plus N arguments par commande
-P N
exécuter N commandes en parallèle
-I {}
remplacer {} par chaque ligne d’entrée
-r
ne pas exécuter la commande si l’entrée est vide (GNU)
find . -name '*.log' -print0 | xargs -0 rm -f

supprimer sans risque les fichiers trouvés

cat urls.txt | xargs -n 1 -P 4 curl -sO

télécharger 4 à la fois

ls *.png | xargs -I {} cp {} /backup/{}

une commande par élément

macOS/BSD : GNU xargs exécute la commande une fois même si l’entrée est vide, sauf avec -r ; le xargs de macOS ignore par défaut une entrée vide et accepte -r pour la compatibilité.

jq

Lire et filtrer du JSON

Linux · macOS#
jq [-r] 'filter' file
.
affichage indenté
-r
chaînes brutes, sans guillemets
-c
compact, un résultat par ligne
.[]
parcourir un tableau
select(cond)
garder les éléments correspondants
jq . response.json

affichage indenté

jq -r '.items[].name' data.json

un nom par ligne

jq -r '.[] | select(.active) | .email' users.json

filtrer, puis extraire un champ

curl -s https://api.github.com/repos/jqlang/jq | jq '.stargazers_count'

directement depuis une API

À installer avec apt/dnf install jq. Fourni avec les macOS récents.

paste

Joindre des lignes ou fusionner des fichiers côte à côte

Linux · macOS#
paste [-s] [-d delim] file...
paste -sd, ids.txt

toutes les lignes jointes par des virgules

paste names.txt emails.txt

deux fichiers en deux colonnes

comm

Lignes communes (ou propres) à deux listes

Linux · macOS#
comm [-1] [-2] [-3] sorted1 sorted2
comm -12 <(sort a.txt) <(sort b.txt)

dans les deux

comm -23 <(sort a.txt) <(sort b.txt)

uniquement dans a.txt

seq

Générer une suite de nombres

Linux · macOS#
seq [first [step]] last
seq 1 5

de 1 à 5, un par ligne

seq -w 1 10

complétés par des zéros : 01 … 10

for i in $(seq 1 3); do echo "run $i"; done

compteur de boucle

base64

Encoder ou décoder en Base64

Linux · macOS#
base64 [-d] [-w 0] [file]
printf '%s' 'user:pass' | base64

encoder (printf évite un retour à la ligne final)

echo dXNlcjpwYXNz | base64 -d

décoder

base64 -w 0 image.png > image.b64

sans retour à la ligne (GNU coupe à 76 caractères)

macOS/BSD : Le base64 de macOS ne coupe pas les lignes par défaut et n’a pas -w. Utilisez -d pour décoder (les anciens macOS utilisaient -D).

iconv

Convertir l’encodage d’un texte (ex. en UTF-8)

Linux · macOS#
iconv -f FROM -t TO file
iconv -f WINDOWS-1252 -t UTF-8 old.csv > new.csv

corriger les caractères illisibles des exports Excel

iconv -l

lister les encodages pris en charge

shuf

Mélanger des lignes ou en tirer au hasard

Linux#
shuf [-n N] file
shuf -n 1 names.txt

une ligne au hasard

shuf -i 1-100 -n 5

cinq nombres au hasard entre 1 et 100

Services et journaux

Services systemd : démarrer, arrêter, activer au démarrage et lire leurs journaux avec journalctl.

systemctl status

Vérifier si un service tourne

Linux#
systemctl status|is-active|is-enabled unit
systemctl status nginx

état, PID, mémoire et dernières lignes du journal

systemctl is-active --quiet nginx && echo up

pour les scripts

systemctl start

Démarrer, arrêter, redémarrer ou recharger un service

Linux#
sudo systemctl start|stop|restart|reload unit
sudo systemctl restart nginx

redémarrage complet

sudo systemctl reload nginx

relire la configuration sans couper les connexions (si le service le permet)

Testez la configuration avant de redémarrer quand c’est possible, ex. sudo nginx -t, pour qu’une faute de frappe ne mette pas le site hors ligne.

systemctl enable

Lancer un service au démarrage (ou l’en empêcher)

Linux#
sudo systemctl enable|disable [--now] unit
sudo systemctl enable --now docker

activer au démarrage et lancer maintenant

sudo systemctl disable --now cups

arrêter maintenant et au démarrage

sudo systemctl mask bluetooth

empêcher totalement son lancement (unmask pour annuler)

systemctl list-units

Lister les services actifs et en échec

Linux#
systemctl list-units [--type=service] [--state=…] | systemctl --failed
systemctl --failed

ce qui a planté

systemctl list-units --type=service --state=running

ce qui tourne

systemctl list-unit-files --state=enabled

ce qui se lance au démarrage

systemctl edit

Modifier l’unité d’un service (et recharger systemd)

Linux#
sudo systemctl edit unit | sudo systemctl daemon-reload
sudo systemctl edit nginx

surcharge drop-in qui survit aux mises à jour des paquets

systemctl cat nginx

l’unité et toutes ses surcharges

sudo systemctl daemon-reload

nécessaire après avoir modifié des fichiers d’unité à la main

.service file

Faire tourner votre propre application comme service

Linux#
/etc/systemd/system/<name>.service
[Unit]
Description=My app
After=network.target

[Service]
User=app
WorkingDirectory=/srv/app
ExecStart=/srv/app/bin/server
Restart=on-failure

[Install]
WantedBy=multi-user.target

ensuite : sudo systemctl daemon-reload && sudo systemctl enable --now myapp

journalctl

Lire les journaux des services et du système

Linux#
journalctl [-u unit] [-f] [-n N] [--since …] [-p level] [-b]
-u unit
un seul service
-f
suivre
-n N
N dernières lignes
--since '1 hour ago'
aussi : today, yesterday, 2026-10-18 09:00
-p err
priorité err et plus grave
-b / -b -1
démarrage actuel / démarrage précédent
-e
aller à la fin
journalctl -u nginx -f

suivre un service

journalctl -u myapp --since '10 min ago'

fenêtre récente

journalctl -b -1 -p err

erreurs du démarrage précédant le plantage

journalctl --vacuum

Réduire le journal systemd

Linux#
journalctl --disk-usage | sudo journalctl --vacuum-size=SIZE | --vacuum-time=TIME
journalctl --disk-usage

place occupée par les journaux

sudo journalctl --vacuum-size=500M

garder au plus 500 Mo de journaux archivés

sudo journalctl --vacuum-time=14d

supprimer les journaux archivés de plus de deux semaines

Pour une limite permanente, définissez SystemMaxUse= dans /etc/systemd/journald.conf.

/var/log

Trouver les fichiers journaux classiques

Linux#
sudo tail -f /var/log/<file>
sudo tail -f /var/log/syslog

journal général sous Debian/Ubuntu (/var/log/messages sous Fedora/RHEL)

sudo tail -f /var/log/auth.log

connexions et sudo sous Debian/Ubuntu (/var/log/secure sous RHEL)

Certaines distributions (Fedora, Arch) ne conservent les journaux que dans le journal systemd, sauf si rsyslog est installé.

shutdown / reboot

Redémarrer ou éteindre

Linux#
sudo shutdown -r|-h [now|+min|hh:mm] [message] | sudo reboot
sudo reboot

redémarrer maintenant

sudo shutdown -r +10 'Kernel update'

redémarrer dans 10 minutes en prévenant les utilisateurs connectés

sudo shutdown -c

annuler un arrêt programmé

sudo shutdown -h now

éteindre

Planification : cron, at, timers

Exécuter des commandes selon un planning ou une seule fois plus tard.

cron syntax

Écrire une ligne de planning cron

Linux · macOS#
minute hour day-of-month month day-of-week command
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

tous les jours à 02:30, en conservant la sortie

*/15 * * * * /usr/local/bin/check.sh

toutes les 15 minutes

0 9 * * 1-5 /usr/local/bin/report.sh

09:00 du lundi au vendredi

@reboot /usr/local/bin/startup.sh

une fois au démarrage

Cron s’exécute avec un PATH minimal et sans profil de shell : utilisez des chemins absolus. Un % dans la commande doit être échappé en \%.

crontab -r

Supprimer votre crontab (attention)

DangereuxLinux · macOS#
crontab -r
crontab -l > ~/crontab.bak && crontab -r

sauvegarder avant de supprimer

crontab ~/crontab.bak

restaurer depuis un fichier

Attention : Supprime toutes vos tâches cron sans confirmation, et la touche r est juste à côté du e sur le clavier. Certaines implémentations de cron proposent -i pour demander d’abord (crontab -ri).

/etc/cron.d

Tâches cron du système

Linux#
/etc/crontab, /etc/cron.d/*, /etc/cron.{hourly,daily,weekly,monthly}/
0 3 * * * root /usr/local/bin/cleanup.sh

ligne dans /etc/cron.d/cleanup : notez le champ utilisateur en plus

ls /etc/cron.daily/

scripts exécutés une fois par jour par run-parts

Sous Debian et Ubuntu, les fichiers de /etc/cron.d dont le nom contient un point sont ignorés : nommez-le backup, pas backup.cron.

at

Exécuter une commande une seule fois plus tard

Linux#
at TIME | atq | atrm N
echo 'systemctl restart myapp' | sudo at 02:00

cette nuit à 2 h

echo './report.sh' | at now + 30 minutes

dans une demi-heure

atq

tâches en attente

atrm 3

annuler la tâche 3

Nécessite le paquet at et le service atd en cours d’exécution.

systemd timers

Planifier avec les timers systemd au lieu de cron

Linux#
systemctl list-timers | <name>.timer with OnCalendar=
systemctl list-timers

tous les timers et leur prochain déclenchement

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

backup.timer à côté de backup.service ; Persistent rattrape les exécutions manquées pendant un arrêt

systemd-analyze calendar 'Mon..Fri 09:00'

vérifier ce que signifie une expression OnCalendar

sleep

Attendre avant la commande suivante

Linux · macOS#
sleep N[s|m|h|d]
sleep 5 && curl -s localhost:8080/health

laisser à un service le temps de démarrer

sleep 2m

les suffixes fonctionnent sous GNU et les macOS actuels

Bases du shell (bash)

Pipes, redirections, globbing, variables, historique et les raccourcis qui font gagner le plus de temps. macOS utilise zsh par défaut : presque tout fonctionne aussi, sauf shopt, help et les fonctionnalités de bash 4 (macOS fournit bash 3.2).

|

Envoyer la sortie d’une commande dans une autre

Linux · macOS#
command1 | command2
ps aux | grep nginx

filtrer une liste

history | grep 'docker run'

retrouver une commande déjà lancée

set -o pipefail

dans les scripts : un pipeline échoue si n’importe quelle partie échoue, pas seulement la dernière

> and >>

Enregistrer la sortie dans un fichier (écraser ou ajouter)

Linux · macOS#
command > file | command >> file
ls -l > listing.txt

écraser (crée le fichier)

echo 'done' >> progress.log

ajouter à la fin

set -o noclobber

faire refuser à > l’écrasement des fichiers existants (>| force)

Le shell vide le fichier avant l’exécution de la commande : sort file > file vous laisse donc un fichier vide. Écrivez dans un nouveau nom, puis utilisez mv.

2> and 2>&1

Rediriger les erreurs, ou les erreurs et la sortie ensemble

Linux · macOS#
command 2> err.log | command > all.log 2>&1 | command &> all.log
find / -name x 2>/dev/null

jeter les messages d’erreur

./build.sh > build.log 2>&1

sortie et erreurs dans un même fichier (l’ordre compte : > d’abord, puis 2>&1)

./build.sh &> build.log

raccourci bash pour la même chose

<, <<EOF, <<<

Fournir une entrée depuis un fichier, un bloc de texte ou une chaîne

Linux · macOS#
command < file | command <<'EOF' … EOF | command <<< "string"
mysql mydb < dump.sql

fichier en entrée

cat > config.yml <<'EOF'
port: 8080
host: $HOST stays literal
EOF

mettre 'EOF' entre guillemets empêche le développement des $variables

grep -c a <<< "banana"

here-string

&& || ;

Enchaîner des commandes, de façon conditionnelle

Linux · macOS#
a && b | a || b | a ; b
make && sudo make install

installer seulement si la compilation a réussi

cd /srv/app || exit 1

arrêter un script si cd échoue

(cd frontend && npm run build)

parenthèses : un sous-shell, donc votre répertoire ne change pas

$( ) $(( )) <( )

Utiliser la sortie d’une commande ou faire un calcul

Linux · macOS#
$(command) | $((expression)) | <(command)
echo "Today is $(date +%A)"

substitution de commande

echo $(( 1024 * 4 ))

calcul en nombres entiers

diff <(ls dir1) <(ls dir2)

substitution de processus : la sortie comme fichier temporaire

Les accents graves `commande` sont l’ancienne forme de $(commande) ; $( ) s’imbrique et se lit mieux.

* ? [ ] { }

Désigner de nombreux fichiers avec des jokers

Linux · macOS#
* any string | ? one char | [abc] one of | {a,b} each word
ls *.jpg

tous les JPG de ce dossier

rm photo-??.png

photo-01.png … photo-99.png

cp config.{yml,yml.bak}

expansion des accolades : cp config.yml config.yml.bak

shopt -s globstar; ls **/*.md

** correspond à n’importe quelle profondeur (bash 4+)

Les globs ne correspondent pas aux fichiers cachés par défaut (shopt -s dotglob change cela). Si rien ne correspond, bash transmet le motif tel quel, sauf si shopt -s nullglob est activé.

' ' vs " "

Mettre correctement les chaînes et les variables entre guillemets

Linux · macOS#
'literal' | "expands $var and $(cmd)" | \ escapes one character
echo 'Cost: $5'

guillemets simples : rien n’est développé

echo "Home is $HOME"

guillemets doubles : les variables sont développées, les espaces conservées

cp "$file" "$dest/"

mettez toujours entre guillemets les variables contenant des chemins : les espaces cassent celles qui n’y sont pas

VAR=value

Définir et utiliser des variables shell

Linux · macOS#
name=value (no spaces around =) | "$name" | "${name}"
name="Ada"; echo "Hi $name"

définir et utiliser

echo "${PORT:-8080}"

valeur par défaut si non définie ou vide

file=report.tar.gz; echo "${file%%.*}" "${file##*/}"

retirer l’extension / retirer le répertoire

echo "${#name}"

longueur de la chaîne

export

Définir des variables d’environnement

Linux · macOS#
export NAME=value | NAME=value command | unset NAME
export NODE_ENV=production

visible par tous les programmes lancés depuis ce shell

DEBUG=1 ./app

uniquement pour cette commande

printenv | sort

les lister

unset DEBUG

supprimer

Perdues à la fermeture du shell. Placez les export dans ~/.bashrc (shells interactifs) ou ~/.profile (shells de connexion) pour les conserver.

$PATH

Ajouter un dossier à votre PATH

Linux · macOS#
export PATH="dir:$PATH"
echo "$PATH" | tr : '\n'

une entrée par ligne

export PATH="$HOME/.local/bin:$PATH"

placer votre propre dossier bin en tête (à ajouter dans ~/.bashrc)

hash -r

oublier les emplacements de commandes mis en cache après avoir déplacé des binaires

alias / source

Créer des raccourcis et recharger la configuration du shell

Linux · macOS#
alias name='command' | source file
alias ll='ls -alF'

à ajouter dans ~/.bashrc pour le conserver

source ~/.bashrc

appliquer les changements sans ouvrir de nouveau terminal (comme . ~/.bashrc)

\ls

lancer le vrai ls, en contournant un alias

$?

Vérifier si la dernière commande a réussi

Linux · macOS#
echo $? (0 = success)
grep -q root /etc/passwd; echo $?

0 trouvé, 1 non trouvé, 2 erreur

set -euo pipefail

en tête de script : arrêt en cas d’erreur, de variable non définie ou de pipe en échec

history, !!

Réutiliser des commandes précédentes

Linux · macOS#
history | !! | !$ | !N | !prefix | ^old^new
sudo !!

relancer la dernière commande avec sudo

cd !$

utiliser le dernier argument de la commande précédente

!42

relancer la ligne 42 de l’historique

^foo^bar

relancer la dernière commande en remplaçant foo par bar

Avec HISTCONTROL=ignorespace (par défaut sous Ubuntu, via ignoreboth), une commande tapée avec une espace au début n’est pas enregistrée : pratique pour les commandes contenant des secrets.

Ctrl+R, Ctrl+A …

Raccourcis clavier du terminal (bash/readline)

Linux · macOS#
Emacs-style readline keys (the default)
Ctrl+R
rechercher en arrière dans l’historique ; appuyez de nouveau pour des correspondances plus anciennes
Ctrl+A / Ctrl+E
début / fin de ligne
Ctrl+U / Ctrl+K
couper jusqu’au début / jusqu’à la fin de la ligne
Ctrl+W
couper le mot précédent
Ctrl+Y
coller ce que vous avez coupé
Alt+B / Alt+F
reculer / avancer d’un mot
Alt+.
insérer le dernier argument de la commande précédente
Ctrl+L
effacer l’écran
Ctrl+C
annuler la commande en cours
Ctrl+D
fin de saisie ; quitte le shell sur une ligne vide
Tab Tab
afficher les complétions
bind -P | less

lister tous les raccourcis clavier

man / --help

Obtenir de l’aide sur n’importe quelle commande

Linux · macOS#
man [section] cmd | cmd --help | help builtin | apropos word
man rsync

manuel complet ; / pour rechercher, q pour quitter

man 5 crontab

section 5 : le format du fichier, pas la commande

help cd

les commandes internes de bash n’ont pas de page man à elles

apropos partition

quelles commandes mentionnent un mot

#!/usr/bin/env bash

Écrire et exécuter un script shell

Linux · macOS#
#!/usr/bin/env bash, chmod +x, ./script.sh
#!/usr/bin/env bash
set -euo pipefail
name="${1:-world}"
if [[ -f "$name.txt" ]]; then
  echo "found $name.txt"
fi
for f in *.log; do
  echo "$f"
done

arguments, un test, une boucle

chmod +x script.sh && ./script.sh Ada

rendre exécutable et lancer

bash -x script.sh

tracer chaque ligne pendant l’exécution

$1 … $9 sont les arguments, "$@" les contient tous, $# indique leur nombre. [[ ]] est propre à bash ; utilisez [ ] dans les scripts sh POSIX.

clear / reset

Effacer ou réparer un terminal brouillé

Linux · macOS#
clear | reset
reset

après un cat sur un fichier binaire qui a laissé le terminal afficher n’importe quoi

Une référence statique qui s’exécute dans votre navigateur ; vos recherches ne sont envoyées nulle part. Parcourir tous les outils gratuits.

Un problème, ou quelque chose à améliorer ? Nous lisons chaque message et corrigeons vite.

Cet aide-mémoire des commandes Linux regroupe plus de 200 commandes selon la tâche à accomplir : se déplacer et gérer des fichiers, permissions, processus, espace disque, réseau, paquets, utilisateurs, archives, recherche, traitement de texte, services et journaux systemd, cron, et les bases de bash qui relient le tout. Chaque entrée donne la syntaxe, les options que vous utiliserez vraiment avec une explication d’une ligne, des exemples à copier et, quand c’est important, un avertissement. Cherchez par tâche (« espace disque libre », « port 8080 ») ou par nom de commande, et créez un lien direct vers n’importe quelle entrée.

Les options suivent les manuels de GNU coreutils, util-linux, procps-ng, iproute2, systemd et bash, c’est-à-dire ce que livrent Ubuntu, Debian, Fedora, RHEL, Arch et openSUSE. Quand macOS se comporte différemment, une note bleue l’explique, car sed -i, date -d, stat -c et xargs sont les endroits classiques où un script écrit sur l’un casse sur l’autre. C’est une référence pour les 90 % d’usages courants, pas un remplacement des pages de manuel : pour les options rarement utilisées, man <command> reste la référence.

Mode d’emploi

  1. Tapez une tâche ou une commande dans la zone de recherche (appuyez sur / pour y accéder). Tous les mots doivent correspondre : « tar extraire » restreint donc aux entrées tar.
  2. Utilisez les pastilles de section pour aller à un thème comme Réseau ou Paquets, ou cochez « Dangereuses uniquement » pour voir toutes les commandes susceptibles de détruire des données ou de vous bloquer l’accès.
  3. Cliquez sur Copier à côté d’un exemple, puis remplacez les noms de fichiers et d’hôtes d’exemple par les vôtres.
  4. Cliquez sur le # à côté d’une entrée pour obtenir un lien direct vers elle, par exemple /tools/linux-commands-cheat-sheet#rsync.
  5. Utilisez Imprimer / Enregistrer en PDF pour une copie compacte sur deux colonnes, sans la navigation du site.

Questions fréquentes

Quelles sont les commandes Linux de base à apprendre en premier ?

Commencez par la navigation et les fichiers : pwd, ls, cd, mkdir, cp, mv, rm, cat et less. Puis man (aide), sudo, grep et find pour chercher, chmod et chown pour les permissions, ps, top et kill pour les processus, df et du pour l’espace disque, et ssh et scp pour les machines distantes. Apprenez tôt les pipes (|) et les redirections (> et >>), car ils permettent de combiner tout le reste.

Comment vérifier l’espace disque sous Linux ?

Lancez df -h pour voir l’espace libre de chaque système de fichiers monté, en unités lisibles. Pour savoir ce qui occupe l’espace, lancez du -h -d 1 | sort -h dans un répertoire : il liste les sous-dossiers, les plus gros en dernier. Si df indique que le disque est plein mais que du ne trouve rien, un fichier supprimé est probablement encore ouvert par un processus ; sudo lsof +L1 les liste.

Comment trouver quel processus utilise un port ?

Lancez sudo ss -tulpn pour lister tous les ports TCP et UDP en écoute avec le programme qui les détient, ou sudo lsof -i :8080 pour un seul port. Le sudo compte : sans lui, vous ne voyez que les noms de vos propres processus. ss a remplacé netstat, qui fonctionne encore sur les systèmes où le paquet net-tools est installé.

Quelle est la différence entre kill et kill -9 ?

kill PID envoie SIGTERM, qui demande au processus de se terminer et le laisse faire le ménage : vider les fichiers, libérer les verrous, fermer les connexions. kill -9 PID envoie SIGKILL, que le noyau applique immédiatement et que le processus ne peut ni intercepter ni ignorer : aucun nettoyage n’a lieu. Utilisez d’abord kill seul, attendez quelques secondes, et réservez -9 aux processus qui l’ignorent.

Pourquoi sed -i ne fonctionne-t-il pas sur Mac ?

macOS est livré avec le sed de BSD, où -i exige un argument d’extension de sauvegarde. Sur macOS, écrivez sed -i '' 's/old/new/g' file ; avec le sed GNU de Linux, la même commande échoue, car il lit '' comme le script. La forme qui fonctionne sur les deux est sed -i.bak 's/old/new/g' file, qui conserve une copie de sauvegarde que vous pouvez supprimer ensuite.

Ces commandes sont-elles les mêmes sur toutes les distributions Linux ?

Presque toutes : les outils de base proviennent partout des mêmes projets GNU et util-linux. Ce qui diffère, c’est le gestionnaire de paquets (apt sur Debian et Ubuntu, dnf sur Fedora et RHEL, pacman sur Arch, zypper sur openSUSE, présentés côte à côte dans le tableau Paquets), certains chemins de fichiers journaux, le groupe d’administration (sudo ou wheel) et l’interface du pare-feu (ufw ou firewalld). Alpine et les systèmes basés sur BusyBox utilisent des versions réduites des outils, avec moins d’options.

Les commandes qui peuvent détruire un système, et le réflexe qui l’évite

Une courte liste de commandes cause presque tous les dégâts : rm -rf avec un chemin erroné ou vide, dd ou mkfs pointés sur le mauvais disque, chmod -R 777 ou chown -R sur un répertoire système, rsync --delete ou des copies miroir à la robocopy avec source et destination inversées, crontab -r au lieu de crontab -e, usermod -G sans -a, et find avec -delete au mauvais endroit. Chacune est marquée Dangereuse dans l’aide-mémoire, avec la façon précise dont elle tourne mal.

Le réflexe qui évite l’essentiel consiste à lancer d’abord la version inoffensive. Avant rm -rf, lancez ls sur le même chemin. Avant find … -delete, lancez le même find avec -print. Avant rsync --delete, ajoutez -n pour un essai à blanc. Avant dd ou mkfs, lancez lsblk et lisez deux fois le nom du périphérique. Dans les scripts, écrivez ${DIR:?} au lieu de $DIR pour qu’une variable vide interrompe le script au lieu de transformer un chemin en /.

Deux réglages du shell aident aussi : set -euo pipefail en tête de script arrête l’exécution à la première erreur au lieu de continuer dans un état incohérent, et set -o noclobber fait refuser à > l’écrasement d’un fichier existant.

GNU ou macOS (BSD) : quand la même commande se comporte différemment

macOS est un Unix, mais ses outils en ligne de commande viennent de FreeBSD plutôt que de GNU, et les différences apparaissent précisément quand vous copiez une commande d’un tutoriel Linux :

• sed -i exige un argument sur macOS (sed -i '' …) ; -i.bak fonctionne sur les deux.

• date n’a pas d’option -d sur macOS ; utilisez date -r <epoch> pour convertir un horodatage et date -v-2d pour les dates relatives.

• stat utilise -f avec d’autres lettres de format au lieu du -c de GNU.

• xargs sur macOS ignore par défaut une entrée vide, alors que xargs de GNU lance la commande une fois, sauf avec -r.

• du accepte -d 1 sur les deux, mais seul GNU accepte --max-depth ; ps n’a pas de --sort sur macOS (utilisez ps aux -m ou -r).

• head -n -5, tac, free, ip, ss, timeout et watch sont absents de macOS par défaut.

Si vous avez besoin du comportement GNU sur un Mac, les paquets Homebrew coreutils, gnu-sed et findutils installent les versions GNU avec un préfixe g (gsed, gdate, gstat, gxargs).

Lire les permissions et choisir le bon chmod

ls -l affiche les permissions sous forme de dix caractères, comme -rwxr-x---. Le premier est le type (- fichier, d répertoire, l lien) ; les neuf suivants forment trois groupes lecture, écriture et exécution pour le propriétaire, le groupe et tous les autres. En chiffres, r vaut 4, w vaut 2 et x vaut 1, additionnés par groupe : rwxr-x--- donne donc 750.

Modes typiques : 644 pour les fichiers ordinaires, 755 pour les répertoires et les scripts, 600 pour les clés privées et les fichiers contenant des secrets, 700 pour un répertoire privé comme ~/.ssh. Sur un répertoire, x signifie « peut y entrer », c’est pourquoi les répertoires en ont besoin et pas les fichiers ordinaires. Le calculateur chmod convertit entre les formes symbolique et octale si vous voulez vérifier un mode avant de l’appliquer.

Outils gratuits similaires

  • CMD vs PowerShell vs Bash — La même tâche dans l’invite de commandes, PowerShell et bash, côte à côte : fichiers, grep, variables d’environnement, processus, réseau, services et scripts.
  • Calculateur chmod — Cochez lecture, écriture et exécution pour obtenir le mode octal et la commande chmod, ou décodez 755, 644 et rwxr-xr-x.
  • Générateur d’expressions cron — Créez une planification cron avec des menus ou collez-en une, lisez-la en langage clair et voyez les 10 prochaines exécutions dans votre fuseau et en UTC. Gratuit, dans le navigateur.
  • Calculateur de sous-réseau — Réseau, broadcast, plage d’hôtes et masque pour n’importe quel CIDR ; découpez des réseaux en VLSM, développez des adresses IPv6 et trouvez les plages qui se chevauchent.
  • Aide-mémoire Git — Les commandes Git classées selon ce que vous voulez faire : annuler le dernier commit, renommer une branche, supprimer une branche distante. switch/restore modernes avec leurs équivalents classiques et badges de danger.