Introduction
FRAME Studio vérifie le poste Linux utilisé pour exporter les photos d’un événement. Avant de surveiller une longue session, il faut des mesures fiables : temps processeur non inactif, mémoire qui n’est pas immédiatement disponible et utilisation du système de fichiers contenant le dossier d’exportation. Une valeur élevée est un signal à interpréter, pas la preuve d’un échec du travail photo.
Vous implémenterez trois courtes fonctions Bash et utiliserez un adaptateur fourni qui exécute de vraies commandes Linux. Les chemins du terminal, variables, fonctions, conditions et boucles Bash de Shell for Beginners sont des prérequis. Les programmes fournis assurent l’enchaînement des commandes ; vous lirez ce mécanisme et implémenterez les pourcentages. Cette instance Linux indépendante contient deux petits systèmes ext4 réels pour l’apprentissage. Leur préparation et leur montage ne sont pas votre tâche. La durée est une estimation de l’auteur, incluant lecture et erreurs courantes.
Mesurer le temps processeur non inactif
Dans cette étape, vous observerez une capture de ressources fonctionnelle et implémenterez la conversion du processeur.
Commencez dans Terminal. Toutes les commandes du laboratoire s’y exécutent. Entrez dans l’espace préparé ; pwd affiche votre position et ls ses fichiers. Si un chemin relatif manque ensuite, réutilisez cette commande cd complète plutôt que de réinitialiser l’instance.
Saisir les commandes
Cliquez dans Terminal avant de saisir. Copiez uniquement le contenu d'un bloc de commandes : ne saisissez ni l'invite, ni les accents graves qui l'encadrent, ni un exemple de résultat attendu. Appuyez sur Enter après chaque commande et attendez le retour de l'invite. Une commande peut réussir sans rien afficher. Gardez le même Terminal ouvert pendant tout le laboratoire.
cd /home/labex/project/resource-watch
pwd
Le chemin doit finir par /resource-watch. Lancez la démonstration fournie avec Bash :
bash demo.sh
La première ligne nomme quatre champs. La suivante contient un horodatage UTC et trois pourcentages réels. Les valeurs varient. demo.sh est un exemple fonctionnel fourni ; il ne complète pas vos fonctions et ne sauvegarde pas votre réponse.
UTC timestamp | CPU non-idle % | memory pressure % | target filesystem used %
2026-...Z ... ... ...
Les pourcentages décrivent le temps réparti sur les processeurs virtuels de l’instance. vmstat présente l’activité système. Dans vmstat 1 2, 1 est l’intervalle en secondes et 2 le nombre de rapports. Le premier rapport processeur est une moyenne depuis le démarrage ; le second couvre le nouvel intervalle. Exécutez-le avant d’extraire des champs :
LC_ALL=C vmstat 1 2
LC_ALL=C applique à cette commande un format numérique anglais stable. Repérez id dans les colonnes processeur : il s’agit du temps inactif. Le cours définit non inactif = 100 - inactif. Cela inclut l’attente d’E/S et le temps volé ; ce n’est ni uniquement l’exécution de votre programme, ni un diagnostic de panne.
L’adaptateur utilise un pipeline : | transmet la sortie à la commande suivante. tail -n 1 choisit la dernière ligne. awk '{print $15}' affiche son quinzième champ séparé par des espaces, la colonne id de cette version de procps. Les apostrophes réservent $15 à awk au lieu de laisser le shell le développer. Confirmez que la valeur extraite est entière :
LC_ALL=C vmstat 1 2 | tail -n 1 | awk '{print $15}'
Modifiez maintenant les fonctions fournies. nano est un éditeur de terminal. Ouvrez le fichier et remplacez seulement le : à l’intérieur de cpu_nonidle, sans changer les deux autres fonctions. Les deux-points sont un emplacement qui ne fait rien.
nano metrics.sh
Déplacez le curseur avec les flèches. Dans la première fonction, supprimez uniquement la ligne contenant les deux-points et insérez les deux lignes indentées ci-dessous. Conservez le nom, les accolades et les autres fonctions. L'exemple complet montre le résultat visé : n'en collez pas une seconde copie sous l'original. L'indentation facilite la lecture ; les accolades et l'orthographe doivent rester correctes.
La première fonction doit devenir :
cpu_nonidle() {
local idle=$1
echo $((100 - idle))
}
$1 est le premier argument. local limite la variable à cette fonction. $((...)) effectue un calcul entier et echo affiche le résultat. Appuyez sur Ctrl+O, Enter, puis Ctrl+X pour enregistrer et quitter. Si une modification ultérieure provoque une erreur de syntaxe, rouvrez ce fichier et corrigez la fonction ; le collecteur fourni reste intact.

Seule la première fonction est terminée dans cet exemple ; les deux autres marqueurs deux-points sont intentionnels. En bas de nano, l'accent circonflexe représente Ctrl. Par exemple, ^O signifie maintenir Ctrl et appuyer sur O, et non saisir ces deux caractères.

Après Ctrl+O, nano demande le nom du fichier en bas. Gardez le nom existant et confirmez avec Enter, puis Ctrl+X ramène à l'invite du shell. Si vous avez ouvert le mauvais fichier, faites Ctrl+X et répondez N à la demande d'enregistrement, puis ouvrez le bon fichier. Ne saisissez pas de commandes shell tant que l'éditeur est ouvert.
source charge les définitions dans le shell courant. Terminal démarre Zsh tandis que l’exercice utilise Bash : employez bash -c pour exécuter le test entre apostrophes dans Bash. Les apostrophes externes conservent la commande interne.
bash -c 'source ./metrics.sh; cpu_nonidle 97'
3
Cette entrée d’inactivité fournie teste votre calcul ; elle ne signifie pas que la valeur réelle actuelle est exactement 3 %. Vérifiez aussi les deux extrémités :
bash -c 'source ./metrics.sh; cpu_nonidle 0; cpu_nonidle 100'
100
0
Votre fonction accepte tout entier d’inactivité de 0 à 100. Le collecteur réel fournira la valeur nouvellement mesurée.
Distinguer mémoire disponible et mémoire libre
Dans cette étape, vous calculerez la pression mémoire à partir de ce que Linux estime disponible pour de nouvelles applications.
Restez dans Terminal, dans /home/labex/project/resource-watch. free -k affiche la mémoire en KiB, unités de 1024 octets. Exécutez la commande avant de l’analyser :
LC_ALL=C free -k
Lisez la ligne Mem:. free désigne la mémoire entièrement inutilisée ; available estime la mémoire utilisable sans échange par de nouvelles applications, y compris une partie du cache récupérable. Ne considérez pas tout le cache comme définitivement indisponible. Le cours utilise floor((total - available) * 100 / total) comme pourcentage de pression. Il ne prédit pas la réussite d’une allocation future particulière.
L’adaptateur choisit total et disponible dans la même ligne. En awk, /^Mem:/ sélectionne une ligne commençant par Mem: ; $2 et $7 choisissent ses deuxième et septième champs.
LC_ALL=C free -k | awk '/^Mem:/ {print $2, $7}'
La sortie donne le total puis la mémoire disponible. Les unités sont identiques, leur rapport est donc pertinent. Un total de 1000 et un disponible de 750 donnent 25 %, pas 75 %.
Ouvrez votre fichier et remplacez seulement l’emplacement de memory_pressure :
nano metrics.sh
memory_pressure() {
local total=$1 available=$2
echo $(((total - available) * 100 / total))
}
La division entière Bash tronque la fraction. Ici les entrées sont positives ou nulles et le total strictement positif : la troncature équivaut à l’arrondi inférieur. Multipliez avant de diviser pour ne pas perdre trop tôt la fraction. Enregistrez avec Ctrl+O, Enter, Ctrl+X.
bash -c 'source ./metrics.sh; memory_pressure 1000 750; memory_pressure 3 2'
25
33
Le résultat 33 est voulu pour une unité indisponible sur trois. Le contrat utilise des quantités entières de même unité, avec disponible compris entre zéro et total. Le traitement des entrées invalides est assuré hors de ce petit exercice.
Pour le premier test, 1000 - 750 = 250 unités indisponibles, donc 250 × 100 ÷ 1000 = 25. Pour le second, une unité sur trois est indisponible : 33.333… devient 33, car la fonction renvoie un entier. Le deuxième argument est la quantité disponible, pas un pourcentage déjà calculé. Conservez la fonction CPU terminée à l'étape précédente.
Observer le bon système de fichiers
Dans cette étape, vous terminerez la fonction du système de fichiers et enregistrerez une observation complète.
Restez dans Terminal, dans /home/labex/project/resource-watch. Les dossiers exports et reference appartiennent à deux systèmes ext4 préparés distincts. Conservez leurs données et notes originales. Vous observez l’espace : ne supprimez rien, ne modifiez pas les montages et ne cherchez pas à remplir un système.
df décrit le système contenant le chemin fourni. Son option -P produit une présentation prévisible avec une ligne par système. Comparez les chemins :
df -P exports reference
Lisez Capacity, pas le nombre de fichiers d’un dossier. L’utilisation de exports doit être inférieure à celle de reference. df / décrirait un autre système et ne remplace pas la cible choisie.
Dans nano, remplacez seulement filesystem_used :
nano metrics.sh
filesystem_used() {
df -P "$1" | awk 'NR == 2 {gsub(/%/, "", $5); print $5}'
}
Les guillemets conservent le chemin comme un seul argument. NR == 2 sélectionne la ligne après l’en-tête. gsub retire % du cinquième champ avant son affichage. Enregistrez avec Ctrl+O, Enter, Ctrl+X. Une autre implémentation est autorisée si elle retourne le même entier pour le système demandé.
bash -c 'source ./metrics.sh; filesystem_used exports; filesystem_used reference'
Les deux nombres doivent correspondre à leurs lignes df respectives. Terminez avec le pilote fourni :
bash snapshot.sh
Il affiche désormais horodatage UTC, temps processeur non inactif, pression mémoire et utilisation de la cible, séparés par des tabulations. Processeur et mémoire peuvent changer entre commandes. Lisez l’adaptateur pour relier les observations :
cat capture.sh
L’adaptateur exécute vmstat et free, appelle vos fonctions et lit la cible avec df. $(...) capture une sortie ; read -r affecte les champs séparés par des espaces et <<< lui fournit la chaîne capturée. Cette liaison est prête ; vos trois fonctions déterminent les pourcentages.
Enregistrez une véritable capture. > redirige la sortie et remplace ce fichier de capture uniquement, sans modifier l’historique original.
L'extension .tsv signifie valeurs séparées par tabulations : une observation par ligne, une tabulation entre champs. L'instantané comporte quatre champs dans cet ordre : horodatage UTC, pourcentage CPU non inactif, pourcentage de pression mémoire et pourcentage d'occupation du système cible. UTC est une référence horaire commune ; le Z final indique UTC. Ces pourcentages décrivent des ressources différentes : ne les additionnez pas et n'attendez pas un total de 100.
bash snapshot.sh > snapshot.tsv
cat snapshot.tsv
En cas de faute dans un nom, utilisez ls, rouvrez metrics.sh, corrigez et relancez la capture. Ne remplacez pas une observation échouée par des nombres inventés. Vous disposez maintenant d’un collecteur Bash aux calculs et à la cible explicites.
Résumé
Vous avez mesuré un nouvel intervalle processeur, calculé la pression à partir de mémoire disponible et sélectionné le système de fichiers de la vraie cible. Vos trois fonctions Bash produisent une observation réelle. Le prochain laboratoire indépendant fournit ces fonctions et ajoute les règles d’avertissement et la conservation d’historique.



