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.
1. Objectifs
À la fin de ce TP, tu sauras :
- Utiliser des commandes simples pour lire la configuration de ton PC : noyau, CPU, mémoire, disque, réseau, batterie… ;
- Lire ces informations de deux façons : par des commandes (
uname,free,df…) et par des fichiers particuliers (/proc/,/sys/) ; - Écrire ton premier script Bash, c’est-à-dire un fichier texte qui enchaîne des commandes ;
- Utiliser les variables et
echopour 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 :
- Une commande :
uname -a,free -h,df -h… (un programme dédié) ; - 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, aveccat,grepouhead:
cat /proc/meminfo # tout le fichiergrep MemTotal /proc/meminfo # seulement la ligne qui contient MemTotalhead -5 /proc/cpuinfo # seulement les 5 premières lignesLe 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 :
>>> cat exemple.txt # le fichier contient :Fruit : pommeLegume : carotte
>>> grep pomme exemple.txt # grep garde seulement les lignes contenant "pomme"Fruit : pommeCes fichiers système étant souvent volumineux, ce filtrage est indispensable :
grep 'model name' /proc/cpuinfo # les lignes qui contiennent "model name"grep MemTotal /proc/meminfo # la ligne du total de mémoiregrep '^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) :
grep -m1 'model name' /proc/cpuinfoLe 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.
Exemple : afficher seulement la première ligne trouvée par grep :
grep 'model name' /proc/cpuinfo | head -1cut : 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 :
>>> echo "Fruit:pomme" | cut -d: -f1Fruit>>> echo "Fruit:pomme" | cut -d: -f2pomme- 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 :
grep -m1 'model name' /proc/cpuinfo | cut -d: -f2Même principe pour la distribution : le nom est la partie qui suit le = dans
/etc/os-release :
grep '^PRETTY_NAME' /etc/os-release | cut -d= -f2Un 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 :
echo "Bonjour, je suis un script !"Lance-le avec :
bash essai.shLe 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 :
#!/bin/bashecho "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 :
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 :
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.
#!/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.
#!/bin/bashprenom="Alice" # stocke "Alice" dans la variable prenomecho "Bonjour $prenom" # $prenom = le contenu de la variableecho "Bonjour ${prenom} !" # accolades utiles si du texte touche le nomÀ retenir :
- Pour stocker :
nom="valeur"→ aucun espace autour du=; - Pour lire :
$nomou${nom}; - Les guillemets
"…"permettent d’écrire des phrases avec espaces.
Il existe aussi des variables déjà renseignées par le système :
#!/bin/bashecho "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 :
#!/bin/bashnoyau="$(uname -r)" # noyau = la sortie de "uname -r"echo "La version du noyau est : $noyau"On peut aussi l’utiliser directement dans un message :
#!/bin/bashecho "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 :
echo "Texte" # affiche puis passe à la ligneecho -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 :
#!/bin/bashprintf '%-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
- Commencer petit. Crée
systeme.shavec le shebang et un titre : affiche par exempleMon systèmeavececho. - Ajouter les premières informations. Range 3 informations dans des
variables avec
$( )(ex. : noyau, machine, utilisateur) et affiche-les avececho. - Compléter. Ajoute les sections utiles : Processeur, Mémoire, Disque, Réseau, Batterie, Température… (reprends les commandes du § 3).
- Mettre en forme. Aère la sortie : lignes vides, séparateurs, titre bien
visible. Expérimente
echoetprintfjusqu’à obtenir un affichage satisfaisant. - 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 :
#!/bin/bashecho "=============================================="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 :
- 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"
- Installez l’outil :
- 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
echoau 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/bashet 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)
- Affiche la température du processeur en degrés (voir la conversion des milli-degrés).
- Affiche la batterie en
%avec un message commeBatterie : 98 %. - 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.