Util-Linux
Abstract
Pour voire les différents services leurs états et les logs rendez-vous sur systemd
Audit Rapide : Qui, Quoi, Où ?
Introduction aux commandes universelles pour comprendre le contexte d'exécution de la machine, sa version et son état actuel.
| Objectif | Commande | Détails |
|---|---|---|
| Version OS | cat /etc/*release |
Affiche la distribution et sa version (ex: Debian 12, Ubuntu 22.04). |
| Noyau (Kernel) | uname -a |
Affiche la version du noyau Linux et l'architecture (x86_64, aarch64...). |
| Qui suis-je ? | whoami / id |
Vérifie avec quel utilisateur vous êtes connecté et vos groupes. |
| Qui est là ? | w |
Liste les utilisateurs connectés actuellement et leur charge. |
| Depuis quand ? | uptime |
Temps de fonctionnement et charge système (load average). |
| Processus | ps aux |
Liste complète de tout ce qui tourne (PID, User, Commande). |
| Monitoring | top / htop |
Vue dynamique CPU/RAM (pour quitter : q). |
| Ressources | free -h / df -h |
État de la RAM (free) et des Disques (df). |
Note
Astuce : Sur les systèmes modernes (systemd), la commande hostnamectl donne un résumé parfait de l'OS, du noyau et de l'architecture en une seule fois.
Gestion des Commmandes
Exemple
Vous avez lancé :
Puis, sans le vouloir, vous avez interrompu le job avec Ctrl+Z.
Le shell a affiché :
Le processus est donc stoppé (recev SIGSTOP) et il n’est plus en cours d’exécution.
Ensuite vous avez tapé :
Ce qui a simplement re‑mis le job en arrière‑plan, mais sans interface terminale pour afficher les messages ou demander un mot de passe (si nécessaire).
1. Reprendre un job en cours
| Action | Commande | Résultat |
|---|---|---|
| Replacer le job en avant‑plan (et voir les messages) | fg %1 ou simplement fg |
Le processus reprend où il s’était arrêté, vous retrouvez le prompt interactif et vous pouvez saisir votre mot de passe sudo si besoin. |
| Laisser le job en arrière‑plan (sans interaction) | bg %1 (déjà fait) |
Le job continue, mais tous les messages sont envoyés vers le terminal sans que vous puissiez répondre. |
| Annuler (tuer) le job | kill %1 ou kill -9 %1 |
Le processus est arrêté définitivement. Vous devrez le relancer. |
Exemple
# Reprendre en avant‑plan et entrer le mot de passe sudo
fg %1 # (ou simplement fg si c’est le seul job)
# Vous verrez alors le prompt sudo demander le mot de passe.
Astuce : si votre job ne nécessite aucune interaction (ex.
-ypourapt install), il peut rester en arrière‑plan sans problème. Mais le premierapt updatedemande généralement de confirmer le téléchargement de paquets ou d’attendre la mise à jour de la liste, ce qui ne s’affiche pas correctement en background.
2. Redémarrer la mise à jour proprement
Si vous avez déjà tué le job ou si vous préférez repartir à zéro :
# Option 1 – En avant‑plan (recommandé pour voir les erreurs éventuelles)
sudo apt update && sudo apt install fastfetch -y
# Option 2 – En arrière‑plan, sans interaction (utile pour les scripts automatisés)
nohup sudo apt update && sudo apt install fastfetch -y >~/apt.log 2>&1 &
nohupempêche le processus d’être tué si vous fermez le terminal.- La sortie est redirigée vers
~/apt.logoù vous pouvez vérifier plus tard ce qui s’est passé.
3. Vérifier que tout fonctionne
Après l’installation, vous pouvez vérifier rapidement :
ou, pour vous assurer qu’apt ne tourne plus en arrière‑plan :
4. Récapitulatif des commandes utiles
| Situation | Commande |
|---|---|
| Lister les jobs en cours | jobs |
| Mettre un job arrêté en background | bg %<num> |
| Faire revenir un job en avant‑plan | fg %<num> |
| Tuer un job | kill %<num> (ou kill -9 %<num> en dernier recours) |
| Lancer une commande en arrière‑plan dès le départ | command & |
| Lancer une commande indépendante du terminal | nohup command >logfile 2>&1 & |
Voir les processus apt |
ps -C apt -o pid,cmd |
| Vérifier l’état du disque | lsblk, df -h, sudo fdisk -l |
En bref
bgredémarre le job en arrière‑plan, mais vous ne voyez plus les messages ni ne pouvez entrer un mot de passe.fgramène le job au premier plan, vous permettant de répondre àsudoet de suivre la progression.- Si le job était déjà arrêté, vous pouvez simplement le tuer (
kill %1) puis le relancer proprement.
Identifier un processus (Utilisateur et Origine)
Lorsqu'un processus s'exécute en arrière-plan, il est utile d'identifier qui l'exécute (l'utilisateur) et qui l'a déclenché (le processus parent : un terminal, un service systemd, une tâche cron, etc.).
1. Trouver l'utilisateur et le PID
Pour chercher un processus spécifique et afficher son propriétaire (User), son PID, son parent (PPID) et sa commande complète :
# Filtrer spécifiquement (par exemple sur python3) pour formater l'affichage
ps -o user,pid,ppid,cmd -C python3 | grep "nom_du_processus"
# Ou chercher sur l'ensemble des processus
ps aux | grep "nom_du_processus"
Une méthode plus directe pour obtenir le processus et toute sa ligne de commande (-f) :
Une fois que vous avez récupéré le PID, vous pouvez cibler précisément ce processus pour voir à qui il appartient :
2. Déterminer l'origine (L'arborescence)
Pour comprendre d'où vient un processus, regardez son processus parent (PPID). L'outil pstree retrace toute la généalogie depuis la racine du système :
Ce résumé visuel permet de vérifier très vite la nature du flux déclencheur. Exemples de parents fréquents :
- systemd : S'il s'agit d'un service système (systemctl status <nom_service>).
- crond : S'il s'agit d'une tâche planifiée.
- sshd / bash : Si le processus a été lancé depuis une session utilisateur.
3. Trouver un processus planifié (cron)
Si votre processus parent est remonté comme crond, l'exécution est gérée par cron. Il faut inspecter les différents endroits où cron lit ses règles.
Les crontabs utilisateurs
Chaque utilisateur du système peut avoir son propre cron, listés et stockés dans /var/spool/cron/crontabs/ (ou /var/spool/cron/).
# Voir les logs cron courants
crontab -l
# Voir les cron d'un autre utilisateur
sudo crontab -l -u <user>
# Lister tous les crons utilisateurs existants
sudo ls /var/spool/cron/crontabs/
Les crontabs système
Les paquets des distributions, logiciels déployés ou les gestionnaires de configuration (comme Puppet ou Ansible) évitent de modifier les crons utilisateurs. Ils déposent ou écrivent plutôt dans les configurations centrales du système :
# Configuration centrale
cat /etc/crontab
# Répertoires dédiés aux crons tiers
ls -la /etc/cron.d/
cat /etc/cron.d/*
Détecter un processus conteneurisé
Il arrive qu'un processus semble tourner sur la machine (visible via ps), mais que ses fichiers soient introuvables. C'est souvent le signe qu'il tourne dans un conteneur (Docker, LXC, etc.).
Méthodologie d'identification (Cas pratique)
Prenons l'exemple d'un processus Tomcat qui semble utiliser /opt/tomcat/, mais ce dossier n'existe pas sur l'hôte.
1. Vérifier l'existence du dossier
Si le processus tourne mais que ses fichiers n'existent pas, c'est la première alerte : namespace isolé.2. Le "Juge de Paix" : cgroup
C'est LA commande décisive. Regardez le fichier cgroup du processus.
docker-2a054..., c'est confirmé : le processus est dans le conteneur Docker ID 2a054....
3. Identifier le conteneur
Avec l'ID récupéré (ex: 2a054a740f36), retrouvez le nom et l'image :
docker inspect 2a054a740f36 --format '{{.Name}} {{.Config.Image}}'
# → /guacamole flcontainers/guacamole
4. Accéder aux fichiers du conteneur (depuis l'hôte)
Vous n'êtes pas obligé de faire un docker exec. Le filesystem du conteneur est accessible via /proc :
# /proc/<PID>/root/ est la racine du conteneur vue depuis l'hôte
sudo ls -la /proc/10988/root/opt/tomcat/
5. Comprendre les utilisateurs (User Mapping)
Si ps affiche thomasso (UID 1001) mais que le conteneur tourne sous tomcat (UID 1001), c'est normal.
Linux stocke l'UID (1001).
- Dans le conteneur : /etc/passwd dit 1001 = tomcat.
- Sur l'hôte : /etc/passwd dit 1001 = thomasso.
ps utilisant le fichier de l'hôte, il affiche "thomasso".
Résumé des commandes
| Étape | Commande | Ce qu'elle révèle |
|---|---|---|
| 1. Suspicion | ls /dossier/incconnu |
Le dossier n'existe pas → namespace isolé ? |
| 2. Confirmation | cat /proc/<PID>/cgroup |
docker-<ID> → C'est un conteneur ! |
| 3. Identification | docker inspect <ID> |
Nom et Image du conteneur. |
| 4. Exploration | ls /proc/<PID>/root/ |
Accès direct aux fichiers du conteneur. |
| 5. Mapping | cat /proc/<PID>/status |
Affiche les UID réels et effectifs. |
Tip
PID Parent : Vérifiez le parent (ps -o ppid= -p <PID>). Si le parent est containerd-shim ou un superviseur (comme supervisord) lui-même enfant du moteur de conteneur, c'est une autre piste.
Logs Noyau (dmesg)
La commande dmesg (display message) permet d'afficher le tampon circulaire du noyau (kernel ring buffer). C'est l'outil indispensable pour diagnostiquer des problèmes matériels (disque, réseau, USB) ou des erreurs au démarrage.
Commandes essentielles
| Commande | Action |
|---|---|
dmesg |
Affiche tous les messages. |
dmesg -T |
Affiche avec des dates lisibles. |
dmesg -w |
Mode suivi en direct (follow). |
dmesg -l err,warn |
Filtre par niveau d'importance (erreurs et warnings seulement). |
sudo dmesg -C |
Vide le tampon. |
Exemples pratiques
Diagnostic matériel et USB
Pour voir ce qui se passe quand vous branchez un périphérique :
Chasse aux erreurs (OOM Killer, Disques)
Si un processus a été tué par manque de RAM ou si un disque répond mal :
Automatisation SSH (sshpass)
Pour automatiser les scripts utilisant par ex une variable sshpass sans saisie interactive, vous pouvez définir la variable d'environnement SSHPASS de manière permanente dans votre configuration utilisateur.
Procédure de configuration
-
Ouvrir le fichier de configuration :
-
Définir la variable : Ajoutez la ligne suivante à la fin du fichier (en remplaçant par votre mot de passe réel) :
-
Appliquer les modifications : Pour rendre la variable disponible immédiatement sans redémarrer le terminal :
Warning
Sécurité : Stocker un mot de passe en clair dans .bashrc est dangereux. On préfère toujours l'utilisation de clés SSH (ssh-copy-id) pour une gestion sécurisée et sans mot de passe.
Analyse Espace Disque (du & df)
Tu peux retrouver plus d'onformation sur la gestiond des disque dans Stockage
Vue d'ensemble partitions (df)
Pour voir rapidement l'espace libre sur les disques montés :
(Option-h pour "human readable" : affiche en Go/Mo au lieu de blocs)
Analyse détaillée par dossier (du)
La commande du (Disk Usage) permet de savoir quel dossier consomme de la place.
Top des dossiers les plus volumineux
Pour trouver rapidement ce qui sature votre disque (les "gros consommateurs") :
# Lister la taille des sous-dossiers immédiats, triés par taille décroissante
du -h --max-depth=1 | sort -hr
Ou pour voir le top 10 des fichiers/dossiers dans le répertoire courant :
Astuce : Si disponible, l'outil ncdu offre une interface navigable bien plus pratique que
dupour explorer et nettoyer ses disques.
Gestion Utilisateur
Pour mettre un user dans le groupe de sécurité “sudo”
Pour le distrib base sur RHEL pour être sudoer
Lister les utilisateurs qui ont des accès
Détails les expressions régulière :
^- Le motif doit être au début de la ligne[^:]*- Faites correspondre n’importe quel personnage qui n’est pas entre 0 et temps illimité::- Faire correspondre le personnage littéralement:[^\*!]- Correspond à n’importe quel caractère qui n’est pas , une fois.
Permissions et Droits
Note
Les permissions ne sont pas automatiquement récursives ; pour accéder à /mnt/backup, l’utilisateur doit d’abord avoir les droits (traverser) sur /mnt.
La base : ls -l
Cette commande affiche les permissions sous cette forme :Structure des permissions : drwxr-xr-x
- 1er caractère : Type
d= dossier-= fichier-
l= lien symbolique -
3 groupes de 3 caractères :
- Permissions du propriétaire
- Permissions du groupe
- Permissions des autres utilisateurs
Signification des lettres
r(read) : Lecturew(write) : Écriturex(execute) : Exécution-: Permission non accordée
Alternatives
Format détaillé
* Affiche tous les fichiers (même cachés) * Montre les permissions de tous les élémentsCommande stat
* Affiche des informations détaillées * Inclut les permissions en format numériqueExemple pratique
Signifie : * Le propriétaire (john) peut lire, écrire et exécuter * Le groupe (users) peut lire et exécuter * Les autres peuvent lire et exécuterRappel des droits en numérique
- 4 = lecture (r)
- 2 = écriture (w)
- 1 = exécution (x)
- 0 = aucun droit
Exemple : 755 = rwxr-xr-x
Et pour changer le possesseur du fichier :
Exemple de restriction
Exemple d'utilisation si l'ont souhaite restreindre un dossier a root uniquement :
Sudoers
On peut intéoger via l'outil sudo si un utilisateur est administrateur ou non
Sa dépend si SSSD est actif ou non mais on peut retrouver les droits dans le fichier sudoers /etc/sudoers /etc/sudoers.d/
Recherche de fichiers et texte
Avec find
Commande de base :
Pour trouver un dossier :
Pour trouver un fichier :
Pour trouver un texte dans le fichier
Avec PanDoc combiner
Avec grep
Option -i pour une recherche insensible à la casse.
Recherche de chaînes fixes avec -F et -e :
-F: recherche des chaînes fixes (pas d’expression régulière).-e: chaque-eintroduit un motif littéral, même s'il commence par-.
Réseau et Connexions
Utilisation de Nmap
scan tout les port si ils sont ouvert
Scan ccomplet de l'appareille port + guest os
Ports et Processus (lsof & ss)
Ces deux outils sont le standard pour l'investigation système et réseau.
lsof (List Open Files)
Car "tout est fichier" sous Linux, lsof voit tout : fichiers, bibliothèques, connexions réseau.
Cas d'usages fréquents :
| Commande | Usage |
|---|---|
lsof -i |
Lister toutes les connexions réseau actives |
lsof -i :8080 |
Voir spécifiquement qui occupe le port 8080 |
lsof -p 1234 |
Voir tout ce que le processus PID 1234 a ouvert |
lsof +D /var/log |
Voir qui écrit dans ce répertoire |
La combinaison idéale avec grep :
L'option -P (port numérique) et -n (pas de DNS) rend la sortie propre et facile à filtrer.
# Qui écoute sur le port 22 ? (Version précise)
lsof -i -P -n | grep ":22"
# Filtrer les connexions "ESTABLISHED" seulement
lsof -i -P -n | grep "ESTABLISHED"
ss (Socket Statistics)
Le remplaçant moderne de netstat. Il interroge directement le noyau (plus rapide).
La commande à retenir : ss -tulpn
* -t TCP / -u UDP
* -l Listening (ports en écoute)
* -p Processus (affiche le nom du programme - nécessite sudo)
* -n Numeric (pas de résolution de nom, essentiel pour grep)
Cas d'usages avec grep :
# Vérifier tout ce qui écoute en TCP et UDP
sudo ss -tulpn
# Isoler un port précis (ex: pour voir si un service a crashé)
sudo ss -tulpn | grep ":80"
# Trouver les connexions établies vers une IP spécifique
ss -tun | grep "192.168.1.50"
# Compter le nombre de connexions actives sur le port 443
ss -tn state established | grep ":443" | wc -l
IPtable
flush iptables :
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
Voire si tout à été supprimer :
Attention un fichier de configuration peut être présent ici :/etc/iptables/iptables-custom
Connexion SSH
Voir cette page
Sauvegarde
Avec tar
(A revoir en changent l'emplacement de la sauvegarde)
nohup tar cvpzf backup-$(date +%d-%m-%Y).tar.gz --exclude=/backup-$(date +%d-%m-%Y).tar.gz --exclude=/proc --exclude=/tmp --exclude=/mnt --exclude=/dev --exclude=/sys --exclude=/run --exclude=/media --exclude=/var/log --exclude=/usr/src/linux-headers\* --exclude=nohup.out / &
TODO : script de restauration
Avec Rsync
sudo rsync -a --del --info=progress2 --exclude={'/cdrom/*','/dev/*','/lost+found/*','/proc/*','/sys/*','/tmp/*','/run/*','/mnt/*','/media/*'} / "user@prod:/mnt/data/Backup/Linux/albt-usb"
(a vérifier)
Exemple de sauvegarde de conteneur docker
Documentation de rsync
Éditeurs de texte
Utilisation de Vi/Vim
Ouverture et fermeture
vi fichier.txt # Ouvrir un fichier
:q # Quitter (si pas de modifications)
:q! # Quitter sans sauvegarder
:wq # Sauvegarder et quitter
:w # Sauvegarder seulement
Les modes essentiels
Mode Normal (par défaut)
- Appuyez sur Esc pour y revenir
Mode Insertion
- i : insérer avant le curseur
- a : insérer après le curseur
- o : nouvelle ligne en dessous
Rappel visuel Mode Normal : Le curseur est un bloc → : = commande Mode Insertion : Le curseur est une ligne → : = caractère normal En bas de l'écran tu vois -- INSERT -- quand tu es en mode insertion
Navigation (mode Normal)
h j k l # ← ↓ ↑ →
w # mot suivant
b # mot précédent
0 # début de ligne
$ # fin de ligne
gg # début du fichier
G # fin du fichier
Édition rapide
x # supprimer caractère
dd # supprimer ligne entière
yy # copier ligne
p # coller
u # annuler (undo)
Ctrl+r # refaire (redo)
Recherche
Astuce
Coincé → Tape Esc puis :q! puis Entrée
Astuces et Divers
Creation de script (Injection de texte)
Exemple d'injection de texte dans un fichier :
cat <<EOF > /etc/wsl.conf
[network]
generateResolvConf = false
[automount]
enabled = true
options = "metadata"
mountFsTab = false
EOF
Force reboot
Commande en arrière plan
nohup youtube-dl -o '/mnt/home/user/cloud/Telechargements/%(title)s.%(ext)s' -q https://www.youtube.com/watch?v=GSUmEZPmNPg &> /dev/null &
Ajouter une commande personnalisé (alias)
- Editer le fichier :
/etc/bash.bashrc - Ajouter une ligne au bas du fichier au format suivant :
<your_custom_command_name>=‘<command_to_be_executed>
Source : Medium
Sudo sans mot de passe
Exemple :
Source : linuxtechi
Traitement de sortit de texte
Utilitaires de base pour le flux de texte
| Commande | Action | Exemple |
|---|---|---|
tee |
Copie l'entrée vers la sortie standard ET dans un fichier | ls | tee output.txt |
head |
Affiche le début d'un fichier (10 lignes par défaut) | head -n 5 fichier.txt |
tail |
Affiche la fin d'un fichier | tail -f /var/log/syslog (suivi en direct) |
tac |
Affiche le contenu dans l'ordre inverse (inverse de cat) |
tac logs.txt |
grep |
Filtre les lignes contenant un texte spécifique | grep "ERROR" app.log |
wc |
Compte les lignes (-l), les mots ou les caractères |
ls | wc -l |
sort |
Trie les lignes de texte | cat liste.txt | sort |
uniq |
Supprime les doublons successifs | sort fichier.txt | uniq |
column |
Formate la sortie en colonnes lisibles | mount | column -t |
Exemples de combinaisons avec le pipe |
# Compter le nombre de fichiers .txt dans le répertoire
ls | grep ".txt" | wc -l
# Afficher les 5 dernières erreurs d'un fichier de log
grep "ERROR" /var/log/syslog | tail -n 5
# Trier une liste, supprimer les doublons et sauvegarder le résultat
cat liste.txt | sort | uniq | tee liste_propre.txt
# Formater la liste des partitions et filtrer les disques ext4
mount | column -t | grep "ext4"
Ajouter une application au chemin d'execution (PATH)
Pour que vous puissiez exécuter l'application zeek de n'importe où dans le terminal sans devoir naviguer jusqu'à son répertoire /opt/zeek/bin
puit insérer la ligne suivante :
export PATH="/opt/zeek/bin:$PATH"
Screen et Partage de Terminal
L'outil standard est GNU Screen. Il permet de lancer des processus en arrière-plan (comme nohup mais réattachable) et de partager son terminal.
Commandes de base
| Commande | Action |
|---|---|
screen |
Lance une nouvelle session |
screen -S nom |
Lance une session nommée "nom" |
Ctrl+a puis d |
Détache la session (la laisse tourner en fond) |
screen -ls |
Liste les sessions actives |
screen -r nom |
Réattache (reprend) une session |
screen -x nom |
Se connecte à une session déjà ouverte (Multi-écran) |
Partager son terminal (Session partagée)
Pour qu'un autre utilisateur voie et interagisse avec votre terminal en temps réel :
- L'hôte lance une session :
screen -S masession - L'hôte active le multi-user (dans screen, taper
Ctrl+apuis:) : - L'invité se connecte :
screen -x hote/masession
Note
Pour un partage rapide via internet sans configuration, regardez du côté de tmate (basé sur tmux).
Aide Rapide : TLDR (Too Long; Didn't Read)
L'outil tldr (Too Long; Didn't Read) est une excellente alternative aux pages man classiques. Alors que man est exhaustif et parfois décourageant, tldr se contente de lister les commandes les plus couramment utilisées avec des exemples concrets et faciles à comprendre.
Au lieu de chercher dans la longue documentation avec man tar, vous pouvez simplement taper :
Il vous donnera directement les 4 ou 5 commandes les plus utilisées pour compresser, décompresser ou extraire un fichier sans vous perdre dans la documentation.
Tip
Lors de la première utilisation, il est parfois nécessaire de mettre à jour le cache local des pages avec la commande tldr --update ou tldr -u.