Création le 26/10/2025
Dernière mise à jour le 05/07/2026
En utilisant occasionnellement la ligne de commande sur des serveurs, j'ai eu besoin d'un "pense-bête" pour retrouver rapidement les commandes utiles. J'ai fini par décider de le partager sur mon site, si jamais ça peut être utile à d'autres !
Cette liste est très adaptée à mes usages, et sans doute pas aux votres... Peut être vous servira-t-il de base !
Souvent, ce genre de besoin est remplit par des "cheat sheets"... mais je n'en ai jamais trouvé de
suffisemment adaptée à mes besoins...
Le site de référence des cheat sheets en regroupe plusieurs pour la CLI Linux : 20 Commandline Cheat Sheets - Cheatography.com: Cheat Sheets For Every Occasion.
cat, more, lessQuelles différences ?
| Outil | Scrolling | Recherche |
|---|---|---|
| cat | ❌ (sortie directement dans la console) | ❌ |
| more | 2 sens : entrée pour ligne suivante, espace pour page suivante, b pour page précédente | ❌ |
| less | 2 sens : idem more + flèches du clavier | idem VI |
A noter que less est utilisé pour toutes les pages man !
Article intéressant au sujet de ces 3 commandes : Viewing Files in Linux Using cat, more, and less | Baeldung on Linux
Il existe bat, qui apporte beaucoup d'améliorations dont la coloration syntaxique !
Voir le site officiel : sharkdp/bat: A cat(1) clone with wings.
Ou cet article sur le site de Stéphane Robert : bat, un cat survitaminé
Les commandes head et tail pour voir contenu en début ou fin de fichier. Par défaut, les 2 commandes affichent 10 lignes, pour changer ce nombre utiliser -n <nb_lignes> ou simplement - <nb_lignes> (ancienne syntaxe).
Le paramètre f permet de rafraichir en continu, pratique pour suivre un log par exemple !
tail -2000f wildfly/standalone/log/server.log
tail -2000f wildfly/standalone/log/server.log | grep "fr.mycompany.product."
<commande> | head
<commande> | tail
<commande> | tail -n 100
watch <commande> # rafraichit l'affichage de la commande toutes les 2 secondes
# -d pour surligner les différences entre chaque rafraichissement
# -n <secondes> indique une période de rafraichissement personnalisée (le défaut est de 2s)
tail -f <fichier> | grep "chaine" | tee -a output.log # la sortie est affichée dans stdout et également envoyée dans output.log en append (paramètre a)
<commande> 2>&1 # renvoie stderr et stdout
echo "Hello world" > fichier.txt # écrase
echo "Ligne 2" >> fichier.txt # ajoute à la fin
commande > output.log 2>&1 # redirige stdout ET stderr vers output.log
Un billet sur le blog de Korben listant ces redirection avec pas mal de détails : Shells Unix - 5 redirections que vous copiez sans comprendre - Korben
ls -lh
# ls -l = ll (long listing)
# h = human readable : tailles en Ko, Mo, Go
ls -d my_dirs_*
# d = affiche uniquement les répertoires (et pas leur contenu)
<commande> | wc -l
Paramètre l pour le nombre de lignes.
Avec la commande tree on peut afficher le contenu d'une arborescence
tree -adugph ~/Documents/logs | less
# a = all
# d = uniquement répertoire
# l = suit les symlinks
# f = affiche le chemin complet
# L = nb max niveaux, exemple -L 2
# u = affiche user
# g = affiche group
# p = affiche type et permissions
# s = affiche la taille en octets
# h = affiche la taille "human readable"
# --du = taille cumulée
# c = trie par date dernière modif
# r = ordre inverse
cp -r /my_directory <target>
cp -ar source/. destination
# a = preserve file attrib + symlinks
# . = copie aussi fichiers / dossiers cachés
Les paramètres -r et -R sont équivalents, cf page man
Création lien symbolique :
ln -s target_directory symlink_name
# s = lien symbolique plutôt que physique
# target_directory = relatif à l'emplacement de symlink
ln -sr subdir/target_directory subdir/symlink_name
ln -s target_directory subdir/symlink_name
# r = target_directory relatif au répertoire courant (et non à l'emplacement du symlink)
chmod +wx <fichier> # ajout à tous drois d'écriture et exécution
# options possibles :
# u = user (propriétaire)
# g = group
# o = others
# + / - / = (égal : écrase)
# r / w / x
chmod g+x <fichier> # droit d'exécution au groupe
chown -R www-data . # pour le dossier courant et récursivement change le groupe
chown -R www-data:www-data . # pour le dossier courant et récursivement change groupe et propriétaire
usermod -a -G www-data pierre # ajoute le groupe www-data à l'utilisateur pierre
Sur le shell le raccourci Ctrl+R permet de rechercher dans l'historique des commandes. Indispensable !
Et d'autres commandes utiles :
history # historique des commandes
cd - # bascule sur le répertoire précédent
cd $OLDPWD # idem mais avec var d'env
Les variables d'environnement PWD et OLDPWD sont automatiquement remplies par le shell.
Une page sur le sujet : PWD vs OLDPWD – Bash environment variables – techPiezo
Avec le shell Fish, la commande cdh permet de parcourir l'historique des répertoires visités, cf le chapitre dédié dans la page personnalisation du shell
Un outil destiné à trouver des fichiers à partir de leurs attributs.
Les options :
mtime : modification en jouratime : access en jourmmin : modification en minutesamin : access en minutesValeur avec + pour >, - pour <, et rien pour valeur exacte.
Autres options :
maxdepth : attention doit être précisé avant type !type : f pour fichiernamels : donne le même résultat que la commande ls (donc info de taille, date, droits, etc)find /my_directory -mtime
find /my_directory -name <name>
# Fichiers modifiés pendant les dernières 180min
# le -exec pour afficher les noms de fichiers contenant la chaine <string>
find /my_directory -mmin -180 -type f -exec grep -l '<string>' {} +
# Fichiers modifiés il y a au moins 183 jours ou plus
# le -exec pour déplacer chaque fichier trouvé dans un répertoire _archive
find . -maxdepth 1 -type f -mtime +183 -exec mv {} _archive/ \;
Pour aller plus loin, le toujours excellent Stéphane Robert a une page parfaite sur l'outil : Maîtriser Find : Recherche Linux efficace
Cet outil-ci est destiné à trouver des fichiers à partir de leur contenu.
grep "<chaine>" <sources_sep_space>
grep -l <chaine> <file>
grep -rn <file> -e "<pattern>"
# l = liste fichiers
# r = recursive
# i = not case sensitive
# n = affiche le no de ligne
# C n = affiche n lignes avant et après l'occurrence
# c = compte le nb d'occurrences, liste chaque fichier
# Déplacer les fichiers trouvés :
grep -lir <chaine>" <source> | xargs mv -t <dest>
zgrep : recherche dans les fichiers normaux mais aussi les archives gzip !
Les paramètres sont les mêmes.
stat <fichier> # infos dont le type (fichier, répertoire, symlink), les dates, ...
Espace disponible et occupé sur les différents points de montage :
df -h
df -h /my_directory
Espace occupé dans les différents sous-répertoires, avec total :
du -sch *
du -sch dir1/ dir2/ dir3/
du -sch * --exclude=/my_directory
Espace par sous répertoire éclaté, trié par ordre croissant :
du -Sm | sort -n
Stats sur les iNodes :
df -i
Suppression de répertoire (paramètre r=récursif, f=force) :
rm -rf /my_directory
L'utilitaire TUI ncdu est très pratique pour visualiser l'espace occupé dans une hiérarchie de répertoires.
Tâches de nettoyage à effectuer régulièrement :
# 1️⃣ vérifier le volume de logs !
du -sh /var/log
# 2️⃣ Docker
docker system df # regarder en particulier build cache
docker system prune # ⚠️attention va supprimer aussi les container arrêtés !
docker builder prune --all # juste le build cache
docker image prune -a
docker volume prune
docker images
docker rmi <id_ou_tag>
# 3️⃣ apt
sudo apt autoremove
sudo apt autoclean
# on peut avoir par exemple sa partition /boot qui déborde suite à une maj de noyau
Création d'une archive gzip pour un fichier :
Par défaut la commande gzip va supprimer le fichier source en fin de traitement
gzip fichier_source.log
gzip -9 <fichier>
# 1..9 : niveau de compression, 9 pour le max, défaut 6
# r = recursive
# v = verbose
# k = conserve le fichier source
cat data3673693003010299638.data.xml | gzip -9 > /tmp/grosxml.gz
mysqldump database_name | gzip -c > database_name.sql.gz
Création d'une archive tar compressée :
tar -czvf <dest>.tar.gz <source>
# c = create
# z = ajoute la compression gzip
# v = verbose
# f = utilise le fichier donné en paramètre
unzip file.zip -d my_directory
gzip -d file.gz
# d = extrait (identique à gunzip)
gunzip file.gz
gunzip *.gz
# k = conserver archive
# r = recursive
# l = liste les fichiers
# lv = list verbose
find . -name "*.gz" -exec gunzip {} \;
Extraction d'un .tar.gz :
tar -xvf <archive>
# x = extrait une archive
L'utilitaire SCP permet de transférer des fichiers à une machine sur laquelle on a un accès SSH.
# ⬆️ Sens montant
scp /file/to/send username@remote:/where/to/put/remotely
scp -P 10022 <file> myuser@mymachine.fr:/tmp
# -P : n° port si différent du 22 par défaut
# -r : récursif (permet de transférer des répertoires)
# -c : compression
# ⬇️ Sens descendant
scp username@remote:/file/to/receive /where/to/put/locally
scp username@remote_1:/file/to/get username@remote_2:/where/to/put
Si ses configurations de connexion SSH sont sauvegardées dans ~/.ssh/config, on peut se connecter avec le nom de la configuration plutôt que l'url complète : scp /file/to/send my_config:/where/to/put/remotely
On peut aussi se connecter avec son gestionnaire de fichier avec une URL fish:// si la machine accepte ce protocole.
Cf chapitre consacré à Dolphin dans la page Gnome.
Une excellente référence sur SCP est présente sur le site de Stéphane Robert : SCP : transfert de fichiers sécurisé
De son côté rsync est un utilitaire de... synchronisation, comme son nom l'indique !
rsync -e "ssh -p 10022" -avnz <source> <dest>
# -e : remote shell program to use (permet de spécifier un port ssh différent)
# a = all
# v = verbose
# n = dry run
# z = compress
# i = itemize-changes (liste chg sur les fichiers)
# c = comp sur taille plutôt que date
# --exclude /chemin/du/dossier/ (avec / relatif à source)
Une excellente documentation de rsync est disponible sur ubuntu-fr : rsync [Wiki ubuntu-fr]
sudo systemctl disable mariadb # arrête le démarrage automatique au boot de la machine
sudo systemctl stop mariadb apache2
sudo systemctl start mariadb apache2
sudo systemctl status mariadb apache2
Particulièrement utile dans un DockerFile ou pour une CI !
commande & # lance en arrière plan
commande1 && commande2 && commande3 # chaîne plusieurs commandes, arrêt si erreur
commande1 || commande2 || commande 3 # chaîne plusieurs commande, arrêt si succès
commande1 ; commande2 ; commande3 # chaine quelque soit le code de retour
echo $? # code retour dernière commande (BASH)
echo $status # idem dans Fish
ps aux
ps -afu my_user
Les paramètres de ps :
aux : tous les processus de tous les utilisateurs (attention pas de tiret !)-a : tous les processus (sauf certains non rattachés à un terminal)-u my_user : les processus de my_user-f : "full format listing"La liste des process par user peut être utile pour lister les cron toujours en cours !
Pour éditer la crontab :
crontab -e
htop # TUI de visualisation des processus et des resources utilisées, avec tri, filtre, etc
htop -F borg # directement positionné sur un processus précis
iotop # idem pour les I/O !
docker logs -f <nom_container>
docker exec -ti <nom_container> bash
# t = allocate tty
# i = interactive
docker compose build # construit uniquement les images
docker compose pull # maj des images
docker compose up # build + run images
docker compose up -d # d = detached
docker compose start # démarrage des containers existants uniquement
docker compose ps # état des services
docker compose stop # arrêt SANS suppr containers
docker compose down # arrêt AVEC suppr containers
docker compose rm # suppr container arrêtés
Bien faire attention entre les 2 commandes d'arrêt !
stop = simple arrêt de service
down = détruit tout (containers, réseaux, volumes associés) !
time my_script.sh
L'utilitaire hyperfine permet de lancer plusieurs fois une commande et d'obtenir des statistiques sur les temps d'exécution.
Formé à VI pendant les études, je l'ai utilisé pendant des années (décennies ?). Mais en fait, j'ai fini par me poser la question d'utiliser d'autres éditeurs dont j'entendais les noms de plus en plus.
Pour faire simple :
Sur mon poste de travail j'utilise majoritairement des éditeurs ou IDE graphiques, et sur tous les serveurs que j'utilise VIM est présent à contrario de NeoVIM : c'est donc lui que j'utilise maintenant !
Une bonne référence sur VIM est présente sur le site de Stéphane Robert : Vim pour l'administration (certif)
:set mouse=r:set number, et désactiver avec :set nonumber:help 42:Ni!:help barvimdiffTrès pratique en particulier sur un serveur ! L'usage est ultra simple :
vimdiff fichier1.txt fichier2.txt
Avec fichier1 affiché à gauche et fichier2 à droite. Les commandes VIM classiques sont alors utilisables.
Un oubli, une erreur, une suggestion ? Rendez-vous sur le dépôt GitHub !