Quelques commandes que j’utilise tous les jours pour comprendre ce qui se passe sur un serveur Linux : qui ouvre quoi (lsof), qui a lancé quoi (pstree), qui s’est connecté (last), comment trier et filtrer une sortie (sort, grep) et comment piloter les services (systemctl, journalctl). Les commandes et options ont été vérifiées sous Debian 13.
lsof : lister les fichiers ouverts
lsof signifie « LiSt Open Files ». Il indique quels fichiers sont ouverts, et par quels processus. Sous Linux, presque tout est un fichier : fichiers ordinaires, répertoires, périphériques, tubes (pipes), sockets réseau et sockets Unix. lsof permet donc de répondre à des questions très variées.
Lancez-le en root pour voir les fichiers de tous les utilisateurs. Les options -n (pas de résolution DNS) et -P (numéros de port au lieu des noms) accélèrent nettement l’affichage.
apt install lsof
Par fichier, répertoire ou périphérique
lsof | less
Liste tous les fichiers ouverts. La liste est longue, d’où le less.
lsof /var/log/apache2/access.log
Processus qui utilisent ce fichier.
lsof +D /var/log
Fichiers ouverts dans ce répertoire et ses sous-répertoires. Pratique quand un umount répond « target is busy ».
lsof /dev/sda1
Fichiers ouverts sur ce périphérique (ou sur le système de fichiers qu’il porte).
lsof /dev/tty1
Processus attachés au terminal tty1.
Par utilisateur ou par commande
lsof -u root
Fichiers ouverts par les processus de l’utilisateur root.
lsof -u ^root
Fichiers ouverts par tous les processus qui n’appartiennent pas à root.
lsof -c nginx
Fichiers ouverts par les processus dont le nom commence par nginx.
lsof -t -u ansible
L’option -t n’affiche que les PID, ce qui permet de les passer à une autre commande. Par exemple, pour arrêter tous les processus de l’utilisateur ansible :
kill $(lsof -t -u ansible)
Commencez par un kill simple (signal TERM), qui laisse aux programmes le temps de se fermer proprement. Ne passez à kill -9 que pour les processus qui refusent de s’arrêter.
Combiner les critères : OU ou ET
Par défaut, les critères de sélection se combinent en OU : la commande suivante liste les fichiers de root et ceux de toutes les commandes bash, quel que soit leur propriétaire.
lsof -u root -c bash
L’option -a les combine en ET : ici, uniquement les processus bash appartenant à root.
lsof -a -u root -c bash
Fichiers supprimés mais encore ouverts
Si l’on supprime un fichier qu’un processus garde ouvert (un gros fichier de log, typiquement), l’espace disque n’est pas libéré tant que le processus ne l’a pas fermé. df indique alors un disque plein alors que du ne trouve rien. Pour retrouver ces fichiers et le processus qui les tient :
lsof +L1
+L1 sélectionne les fichiers ouverts dont le nombre de liens est inférieur à 1, c’est-à-dire supprimés. Redémarrer le service concerné (ou lui faire rouvrir ses logs) libère l’espace.
Réseau
lsof -i -n -P
Tous les fichiers réseau (sockets TCP et UDP).
lsof -i 4 lsof -i 6
Uniquement IPv4, ou uniquement IPv6.
lsof -i TCP:80 -n -P
Processus qui utilisent le port TCP 80, en écoute ou connectés.
lsof -i TCP:1-1024 -n -P
Processus sur les ports TCP 1 à 1024 (les ports « privilégiés »).
lsof -i TCP -s TCP:LISTEN -n -P
Uniquement les sockets TCP en écoute.
lsof -i@10.0.10.19 -n -P
Connexions avec l’adresse IP 10.0.10.19.
lsof -U
Sockets Unix (communication locale entre processus).
Pour une vue réseau rapide, ss -tulpn (paquet iproute2) donne aussi les ports en écoute et les processus associés.
pstree : l’arbre des processus
pstree affiche les processus sous forme d’arbre, ce qui montre immédiatement qui a lancé quoi. Il fait partie du paquet psmisc, qui n’est pas toujours installé par défaut :
apt install psmisc
pstree -p
Arbre complet avec les PID.
pstree -a
Affiche aussi les arguments de chaque commande.
pstree -u
Signale les changements d’utilisateur (un processus root qui lance un processus www-data, par exemple).
pstree -p -s 1234
Remonte la lignée du processus 1234 jusqu’à systemd : utile pour savoir d’où vient un processus inconnu.
pstree www-data
Uniquement les processus d’un utilisateur.
last : l’historique des connexions
last liste les dernières ouvertures de session et les redémarrages.
last last -n 10 last amgv last reboot
Respectivement : tout l’historique, les 10 dernières entrées, les sessions d’un utilisateur, et les redémarrages.
last -F last -x last -s "2026-09-01 00:00:00" -t "2026-09-30 23:59:59"
Dates complètes, arrêts du système inclus, et filtre sur une période.
À savoir sous Debian 13 : last est désormais fourni par le paquet wtmpdb, qui enregistre les sessions dans une base SQLite au lieu de l’ancien fichier /var/log/wtmp. Les options courantes restent les mêmes, mais lastb (tentatives de connexion échouées) n’existe plus. Pour ces échecs, consultez le journal :
journalctl -u ssh --since today | grep -i "failed"
sort : trier une sortie
sort fichier.txt sort -r fichier.txt sort -u fichier.txt
Tri alphabétique, tri inverse, tri en supprimant les doublons.
sort -n nombres.txt
Tri numérique (sinon 10 arrive avant 9).
du -sh /var/* | sort -h
Tri de tailles « humaines » (K, M, G) : trouve les plus gros répertoires.
sort -t: -k3 -n /etc/passwd
Tri sur un champ : -t: définit le séparateur, -k3 le 3e champ (ici l’UID).
cut -d' ' -f1 /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
Combinaison classique : les 10 adresses IP les plus fréquentes dans un journal d’accès. uniq -c compte les lignes identiques consécutives, d’où le premier sort.
grep : chercher dans des fichiers
grep "error" /var/log/apache2/error.log grep -i "error" /var/log/apache2/error.log
Recherche simple, puis insensible à la casse. grep fonctionne aussi en sortie d’une autre commande, par exemple journalctl -b | grep -i error pour les journaux système.
grep -n "Listen" /etc/apache2/ports.conf grep -c "/bin/bash" /etc/passwd
Affiche les numéros de ligne, ou seulement le nombre de lignes trouvées (ici, les comptes dont le shell est bash).
grep -rn "PermitRootLogin" /etc/ssh/ grep -rl "192.168.31.5" /etc/
Recherche récursive dans un répertoire, avec numéros de ligne, ou en listant seulement les fichiers concernés.
grep -rn --include="*.conf" "ServerName" /etc/apache2/
Recherche limitée à certains types de fichiers.
grep -w "root" /etc/passwd
Mot entier uniquement (root, mais pas chroot).
journalctl -k | grep -A3 -B2 "Out of memory"
Affiche 3 lignes après et 2 lignes avant chaque résultat (-C3 pour 3 lignes de part et d’autre).
grep -Ev '^\s*(#|$)' /etc/ssh/sshd_config
Affiche un fichier de configuration sans les commentaires ni les lignes vides. -v inverse la sélection, -E active les expressions régulières étendues.
ps aux | grep "[n]ginx"
Astuce : les crochets empêchent grep de se trouver lui-même dans la liste des processus.
systemctl et journalctl : gérer les services
État et contrôle
systemctl status nginx systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl reload nginx
reload relit la configuration sans couper le service, quand celui-ci le permet ; restart l’arrête puis le relance.
systemctl enable --now nginx systemctl disable --now nginx
Active (ou désactive) le démarrage automatique et démarre (ou arrête) le service dans la même commande.
systemctl is-active nginx systemctl is-enabled nginx
Réponses courtes (active, enabled…), utiles dans un script.
Inventaire
systemctl --failed systemctl list-units --type=service --state=running systemctl list-unit-files --state=enabled systemctl list-timers
Services en échec, services en cours d’exécution, services activés au démarrage, et tâches planifiées par des timers systemd.
Configuration des unités
systemctl cat nginx
Affiche le fichier d’unité et ses éventuelles surcharges.
SYSTEMD_EDITOR=vi systemctl edit nginx
Crée une surcharge (override.conf) sans toucher au fichier fourni par le paquet, qui serait écrasé à la prochaine mise à jour. La variable SYSTEMD_EDITOR choisit l’éditeur.
systemctl daemon-reload
À lancer après avoir modifié ou créé un fichier d’unité à la main.
systemctl mask nginx systemctl unmask nginx
mask empêche totalement le démarrage du service, même manuel ou comme dépendance d’un autre service.
Journaux
journalctl -u nginx journalctl -u nginx -f journalctl -u nginx --since "1 hour ago" journalctl -b -p err journalctl --disk-usage
Journaux d’un service, en suivi continu (comme tail -f), sur la dernière heure, erreurs depuis le dernier démarrage, et place occupée par les journaux.
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.