Informatique
Linux - Commandes utiles

Table des matières

Introduction

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.


Opérations usuelles

Copie répertoire

cp -r /my_directory <target>

cp -aR source/. destination
# a = preserve file attrib + symlinks
# . = copie aussi fichiers / dossiers cachés

Contenu fichier

cat, more, less

Quelles 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é

Logs

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

Contenu arborescence

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

Permissions

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

Historique

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

Comptage

<commande> | wc -l

Paramètre l pour le nombre de lignes.


Recherche fichiers

Find

Un outil destiné à trouver des fichiers à partir de leurs attributs.
Les options :

Valeur avec + pour >, - pour <, et rien pour valeur exacte.

Autres options :

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

Grep

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 !


Disque et fichiers

Info fichiers

stat <fichier> # infos dont le type (fichier, répertoire, symlink), les dates, ...

Stats espace disque

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

Ménage disque

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

Archives

Création

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

Décompression

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

Serveur

Transferts

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]

Daemon

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

Enchaînement de commandes

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

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) !


Processus

Liste

ps aux
ps -afu my_user

Les paramètres de ps :

La liste des process par user peut être utile pour lister les cron toujours en cours !
Pour éditer la crontab :

crontab -e

Performances

htop # TUI de visualisation des processus et des resources utilisées, avec tri, filtre, etc
iotop # idem pour les I/O !

VI

VI, VIM, NeoVim ?

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 :

VI
L'ancètre, apparu en 1976 (!!)
VIM
Clone apparu en 1991. Apporte principalement la coloration syntaxique et l'indentation automatique !
Pour plus de détails sur les différences, voir Différences entre vi et vim — Documentation Fedora-Fr
NeoVim
Tout récent (le site officiel a un tld en .io même ! :o) ), ce clone est apparu en 2014.
La documentation du logiciel détaille les différences avec VIM : Vim_diff - Neovim docs

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 !

Commandes

Comparer 2 fichiers avec vimdiff

Trè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.


Resources

index — Debian Manpages
Les pages man accessibles en ligne
tldr pages
Un équivalent de man mais qui donne des exemples d'usage synthétiques plutôt que de la documentation détaillée
projets:ecole:scripting:initiation_au_shell [Wiki ubuntu-fr]
Excellent guide d'apprentissage chez Ubuntu FR !
C'est quoi un Shell ?
Un autre guide sur le site du toujours excellent Stéphane Robert : de quoi apprendre toutes les bases !
phyver/GameShell: a game to learn (or teach) how to use standard commands in a Unix shell
Un jeu pour apprendre à utiliser les commandes de base d'un shell Unix... à exécuter directement dans le terminal !

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 !