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.
cp -r /my_directory <target>
cp -aR source/. destination
# a = preserve file attrib + symlinks
# . = copie aussi fichiers / dossiers cachés
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
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
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
<commande> | wc -l
Paramètre l pour le nombre de lignes.
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 = 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 !
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
Création lien symbolique (paramètre -s pour lien symbolique plutôt que physique) :
ln -s my_directory_target my_link_name
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.
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)
scp username@remote:/file/to/receive /where/to/put/locally
scp username@remote_1:/file/to/get username@remote_2:/where/to/put
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
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) !
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
iotop # idem pour les I/O !
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 !
:set number, et désactiver avec :set nonumber:set mouse=rvimdiffTrè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.
Création le 26/10/2025
Dernière mise à jour le 23/02/2026
Un oubli, une erreur, une suggestion ? Rendez-vous sur le dépôt GitHub !