Retour aux tutoriels
Tutoriels
24 septembre 2026

Script Bash : mon résumé du système

Lire la configuration du PC par commandes et fichiers (/proc, /sys), écrire son premier script Bash avec variables, echo et printf, et produire un résumé formaté du système.

#tuto#bash#script#diagnostic#systeme#variables#echo#printf#proc
systeme

1. Objectifs

À la fin de ce TP, tu sauras :

  1. Utiliser des commandes simples pour lire la configuration de ton PC : noyau, CPU, mémoire, disque, réseau, batterie… ;
  2. Lire ces informations de deux façons : par des commandes (uname, free, df…) et par des fichiers particuliers (/proc/, /sys/) ;
  3. Écrire ton premier script Bash, c’est-à-dire un fichier texte qui enchaîne des commandes ;
  4. Utiliser les variables et echo pour afficher un résumé du système, avec la mise en forme de ton choix.

2. Trois termes à retenir

Mot Définition
Terminal Fenêtre de saisie de commandes en mode texte.
Shell Programme qui interprète et exécute les commandes saisies.
Bash Le shell le plus répandu sous GNU/Linux. Il affiche l’invite $ dans le terminal.

Un script (ou « script shell ») est un fichier texte dans lequel on écrit des commandes. Bash les exécute les unes après les autres, comme si elles étaient saisies manuellement.


3. Les commandes utiles pour lire le système

Deux façons d’obtenir une information :

  1. Une commande : uname -a, free -h, df -h… (un programme dédié) ;
  2. Un fichier : les fichiers de /proc/ et /sys/ sont des fichiers virtuels renseignés en direct par le noyau. Ils se lisent comme des fichiers ordinaires, avec cat, grep ou head :
Terminal
cat /proc/meminfo # tout le fichier
grep MemTotal /proc/meminfo # seulement la ligne qui contient MemTotal
head -5 /proc/cpuinfo # seulement les 5 premières lignes

Le tableau suivant recense les commandes et fichiers utiles. Exécute chaque commande et observe le résultat affiché.

Pour savoir… Commande ou fichier Ce que ça donne
Version du noyau uname -a ou uname -r Le noyau (tout, ou juste la version)
Version du noyau (brut) cat /proc/version La même info, sous forme de fichier
Distribution Linux cat /etc/os-release Le nom et la version du système (ex. Debian 13)
Résumé de la machine hostnamectl Système, noyau, fabricant, modèle, firmware
Version du BIOS cat /sys/class/dmi/id/bios_version La version du BIOS
Modèle de la machine cat /sys/class/dmi/id/product_version Ex. : ThinkPad T14 Gen 3
Le processeur lscpu Modèle, nombre de cœurs, caches…
Modèle exact du CPU grep -m1 'model name' /proc/cpuinfo La ligne du modèle dans le fichier brut
Nombre de cœurs nproc Un simple nombre
Mémoire RAM free -h Mémoire utilisée / libre, en format lisible
RAM (brut) grep MemTotal /proc/meminfo La RAM totale en kilo-octets
Disques et espace df -h / Espace utilisé / disponible de la partition racine
Liste des disques lsblk Disques et partitions (SSD, ext4, swap…)
Réseau et adresse IP ip -brief addr Interfaces réseau et adresses IP
Adresse IP locale hostname -I L’adresse IP seule
Durée de fonctionnement du PC uptime Durée + charge moyenne
Température du processeur cat /sys/class/thermal/thermal_zone9/temp Un nombre (en milli-degrés)
Niveau de batterie cat /sys/class/power_supply/BAT0/capacity Le pourcentage de charge
Date et heure date '+%d/%m/%Y %H:%M' La date dans le format choisi

3.1 Chercher, découper et enchaîner : grep, cut et le tube |

Trois outils complémentaires permettent d’exploiter ces fichiers : grep pour filtrer, cut pour découper, et le tube | pour les enchaîner.

grep : afficher seulement les lignes qui contiennent un mot

grep mot fichier affiche uniquement les lignes du fichier qui contiennent mot. Exemple sur des données fictives illustrant le mécanisme :

Sortie
>>> cat exemple.txt # le fichier contient :
Fruit : pomme
Legume : carotte
>>> grep pomme exemple.txt # grep garde seulement les lignes contenant "pomme"
Fruit : pomme

Ces fichiers système étant souvent volumineux, ce filtrage est indispensable :

Terminal
grep 'model name' /proc/cpuinfo # les lignes qui contiennent "model name"
grep MemTotal /proc/meminfo # la ligne du total de mémoire
grep '^PRETTY_NAME' /etc/os-release # ^ = la ligne qui commence par PRETTY_NAME

/proc/cpuinfo contient une ligne par cœur logique. Pour ne garder que la première, on ajoute -m1 (m = maximum) :

Terminal
grep -m1 'model name' /proc/cpuinfo

Le tube | : envoyer la sortie d’une commande dans la suivante

Le symbole | (le « tube », pipe en anglais) connecte deux commandes : la sortie de celle de gauche devient l’entrée de celle de droite.

Tube : la sortie de commande1 devient l'entrée de commande2 la sortie devient l'entrée commande1 commande2 | produit du texte (stdout) lit du texte (stdin)

Exemple : afficher seulement la première ligne trouvée par grep :

Terminal
grep 'model name' /proc/cpuinfo | head -1

cut : découper une ligne en morceaux

cut coupe une ligne en colonnes : avec -d on indique le séparateur (le délimiteur), avec -f on choisit la colonne à garder. Exemple sur des données fictives :

Sortie
>>> echo "Fruit:pomme" | cut -d: -f1
Fruit
>>> echo "Fruit:pomme" | cut -d: -f2
pomme
  • colonne 1 (-f1) = tout ce qui est avant le premier : ;
  • colonne 2 (-f2) = tout ce qui est après le premier :.

Le modèle du processeur figure sur une ligne de la forme model name : <nom du processeur>. On cherche cette ligne avec grep, puis on garde ce qui suit le : avec cut :

Terminal
grep -m1 'model name' /proc/cpuinfo | cut -d: -f2

Même principe pour la distribution : le nom est la partie qui suit le = dans /etc/os-release :

Terminal
grep '^PRETTY_NAME' /etc/os-release | cut -d= -f2

Un espace peut subsister en début de résultat (la découpe s’effectue juste après le :). Il peut être supprimé avec | sed 's/^ *//'.

En une seule ligne de commande chacune, afficher : (1) le nom de la distribution, sans les guillemets ; (2) le modèle du processeur ; (3) la mémoire totale de la machine. Indice pour (1) : tr -d '"' supprime tous les caractères ". Vérifier ensuite le stockage de ces valeurs dans des variables avec $( ) (voir § 4.5).

La valeur 54000 signifie 54,0 °C : il faut diviser par 1000.

Tester chaque commande du § 3. Aide-mémoire : man nom_de_la_commande (quitter avec q) ou nom_de_la_commande --help.


4. Les bases du script Bash

Cette section présente les bases nécessaires. Reproduire chaque exemple dans un fichier, puis l’exécuter.

4.1 Mon premier script

Crée un fichier essai.sh et écris-y :

essai.sh
echo "Bonjour, je suis un script !"

Lance-le avec :

Terminal
bash essai.sh

Le script s’exécute et affiche le message.

4.2 Le shebang : déclarer l’interpréteur

La toute première ligne d’un script Bash est presque toujours :

essai.sh
#!/bin/bash
echo "Bonjour, je suis un script !"

Cette ligne (le shebang) indique au système que le fichier doit être exécuté avec le programme Bash. Elle se place tout en haut, sur la première ligne.

Une autre façon de lancer un script : le rendre exécutable, puis le lancer par son nom :

Terminal
chmod +x essai.sh # donne le droit d'exécution (une fois pour toutes)
./essai.sh # lance le script (./ = dans le dossier courant)

Pour créer ou modifier un script, on utilise un éditeur de texte :

Terminal
nano essai.sh # éditer (enregistrer : Ctrl+O, Entrée ; quitter : Ctrl+X)

4.3 Les commentaires

Toute ligne qui commence par # est un commentaire : Bash l’ignore. Les commentaires documentent le script, pour toi comme pour les autres.

essai.sh
#!/bin/bash
# Mon premier script — écrit par moi
# La ligne suivante affiche un message :
echo "Bonjour !"

4.4 Les variables : nommer des valeurs

Une variable est un nom associé à du texte ou un nombre.

essai.sh
#!/bin/bash
prenom="Alice" # stocke "Alice" dans la variable prenom
echo "Bonjour $prenom" # $prenom = le contenu de la variable
echo "Bonjour ${prenom} !" # accolades utiles si du texte touche le nom

À retenir :

  • Pour stocker : nom="valeur"aucun espace autour du = ;
  • Pour lire : $nom ou ${nom} ;
  • Les guillemets "…" permettent d’écrire des phrases avec espaces.

Il existe aussi des variables déjà renseignées par le système :

essai.sh
#!/bin/bash
echo "Je m'appelle $USER, ma machine est $HOSTNAME."
echo "Mon dossier personnel : $HOME"

$USER, $HOSTNAME et $HOME prennent automatiquement les valeurs du poste.

4.5 Ranger une commande dans une variable : $( )

La substitution de commande $( commande ) exécute une commande et récupère sa sortie pour la ranger dans une variable :

essai.sh
#!/bin/bash
noyau="$(uname -r)" # noyau = la sortie de "uname -r"
echo "La version du noyau est : $noyau"

On peut aussi l’utiliser directement dans un message :

essai.sh
#!/bin/bash
echo "Machine : $(hostname)"
echo "Cœurs : $(nproc)"

C’est ce mécanisme qui relie les commandes du § 3 au script : tester une commande, puis ranger sa sortie dans une variable avec $( ).

4.6 Afficher et mettre en forme : echo et printf

echo affiche simplement, puis passe à la ligne :

Terminal
echo "Texte" # affiche puis passe à la ligne
echo -n "Texte" # affiche sans passer à la ligne (-n)
echo # affiche une ligne vide (pour aérer)

printf offre un meilleur contrôle : il aligne les colonnes. C’est l’outil adapté pour présenter des étiquettes et des valeurs :

essai.sh
#!/bin/bash
printf '%-20s %s\n' "Étiquette" "Valeur"
printf '%-20s %s\n' "Noyau" "$(uname -r)"
printf '%-20s %s\n' "Machine" "$(hostname)"

À retenir sur printf :

  • %-20s → un texte aligné à gauche sur 20 caractères (les suivants s’alignent au même endroit) ;
  • %s → texte, %d → nombre entier ;
  • \n → fin de ligne (comme la touche Entrée).

Reproduire chaque exemple de cette section, puis les combiner : stocker $(uname -r) et $(hostname) dans deux variables et les afficher avec printf en colonnes.


5. Le TP principal : « Mon résumé du système »

La consigne

Écris un script systeme.sh qui affiche un résumé de ton système : un titre, puis les informations de ton choix, présentées selon tes choix.

Choisir librement :

  • quelles informations afficher (dans le § 3) ;
  • dans quel ordre ;
  • avec quelle présentation (séparateurs, lignes vides, colonnes…).

Aucun modèle n’est imposé : la construction du script est libre.

Étapes conseillées

  1. Commencer petit. Crée systeme.sh avec le shebang et un titre : affiche par exemple Mon système avec echo.
  2. Ajouter les premières informations. Range 3 informations dans des variables avec $( ) (ex. : noyau, machine, utilisateur) et affiche-les avec echo.
  3. Compléter. Ajoute les sections utiles : Processeur, Mémoire, Disque, Réseau, Batterie, Température… (reprends les commandes du § 3).
  4. Mettre en forme. Aère la sortie : lignes vides, séparateurs, titre bien visible. Expérimente echo et printf jusqu’à obtenir un affichage satisfaisant.
  5. Relire et commenter. Commente chaque partie avec des # pour expliquer son rôle. Vérifie le fonctionnement en relançant le script.

Idées de présentation

Voici un exemple d’assemblage dans systeme.sh combinant en-tête et alignement :

systeme.sh
#!/bin/bash
echo "=============================================="
echo " Mon système — $(date '+%d/%m/%Y %H:%M')"
echo "=============================================="
echo # une ligne vide
printf '%-15s %s\n' "Noyau:" "$(uname -r)"
printf '%-15s %s\n' "Machine:" "$(hostname)"

D’autres présentations sont possibles (séparateurs, sections, colonnes…) : l’essentiel est un affichage clair et lisible.

Pour concevoir une bannière de titre marquante en texte brut :

  1. En ligne de commande avec figlet :
    • Installez l’outil : sudo apt install figlet -y
    • Testez directement : figlet "MON SYSTEME"
    • Vous pouvez intégrer sa sortie dans votre script :
      systeme.sh
      figlet "ThinkPad"
  2. Génération en ligne :
    • Rendez-vous sur le générateur en ligne patorjk.com/software/taag (Text to ASCII Art Generator).
    • Choisissez une police (ex. Slant, Standard, Small), copiez le résultat et collez-le dans des echo au début de votre script.

Critères de réussite (à vérifier avant de rendre)

  • Le script se lance avec bash systeme.sh (ou ./systeme.sh) ;
  • Il commence par #!/bin/bash et contient des commentaires # ;
  • Il affiche un titre bien visible ;
  • Il affiche au moins 6 informations du § 3, exactes (vérifier au besoin avec les commandes isolées) ;
  • Il utilise au moins 3 variables (dont au moins une avec $( )) ;
  • La présentation est soignée (lignes vides, séparateurs ou colonnes) ;
  • La sortie est lisible par un autre élève sans explication.

Bonus (facultatif)

  1. Affiche la température du processeur en degrés (voir la conversion des milli-degrés).
  2. Affiche la batterie en % avec un message comme Batterie : 98 %.
  3. Enregistre la sortie du script dans un fichier texte, pour garder une trace : bash systeme.sh > fiche_systeme.txt.

6. Pour aller plus loin

if (conditions), for (boucles), $1 (arguments du script) et man bash (manuel complet) ouvrent de nouvelles possibilités. Ces notions dépassent le cadre de ce TP, centré sur l’exécution de commandes, la lecture de fichiers et l’affichage avec echo.


Toutes les commandes de ce TP sont en lecture seule : elles ne modifient rien sur le système. En revanche, ne jamais lancer une commande incomprise, surtout si elle commence par sudo.

Valorisation E4 — Compétences travaillées

En quoi les gestes techniques de cette ressource valident chaque compétence du référentiel (base du portfolio d'épreuve E4).

  • C-1.2.2Traiter des demandes concernant les services réseau et système, applicatifs

    Diagnostic du poste par commandes (uname, hostnamectl, lscpu, free, df, ip, uptime) et fichiers noyau (/proc, /sys).

  • C-1.2.3Traiter des demandes concernant les applications

    Lecture et écriture d'un script systeme.sh exécutable : shebang, variables, $( ), echo et printf.