« Toute variable doit être placée dans .bashrc. »
.bashrc cible surtout les shells Bash interactifs non-login. Une variable de session, une politique système et un alias interactif n’ont pas le même emplacement.
01Cartographie les fichiers d’environnement
printf 'shell=%s
' "$SHELL"
shopt -q login_shell && echo login-shell || echo non-login-shell
case $- in *i*) echo interactive ;; *) echo non-interactive ;; esac
ls -l /etc/environment /etc/profile 2>/dev/null || true
find /etc/profile.d -maxdepth 1 -type f -printf '%f
' 2>/dev/null | sort | sed -n '1,30p'
ls -la "$HOME" | grep -E 'profile|bashrc|bash_profile' || true
/etc/environment/etc/profile, /.profile/.bashrcEnvironment, EnvironmentFile02Teste les copies du laboratoire
export LAB="/tmp/soria-linux-systemd-$USER"
bash --noprofile --norc -c 'source "$1"; printf "SORIA_ENV=%s
" "$SORIA_ENV"' bash "$LAB/home/profile.sample"
bash --noprofile --norc -i -c 'source "$1"; printf "SORIA_INTERACTIVE=%s
" "$SORIA_INTERACTIVE"' bash "$LAB/home/bashrc.sample"
Les fichiers réels du compte ne sont pas modifiés. Le test isole l’effet de chaque source.
03Évite les duplications de PATH
path_add_once() {
case ":$PATH:" in
*":$1:"*) ;;
*) PATH="$1:$PATH" ;;
esac
}
path_add_once "$HOME/.local/bin"
path_add_once "$HOME/.local/bin"
printf '%s
' "$PATH" | tr ':' '
' | nl -ba
04Inspecte les connexions
who
w
loginctl list-sessions 2>/dev/null || true
loginctl show-session self -p Name -p User -p State -p Remote -p Type -p Class 2>/dev/null || true
last -a | sed -n '1,12p'
last -x | sed -n '1,12p'
who et w montrent les sessions courantes. loginctl expose la session selon systemd-logind. last -x ajoute les boots, shutdowns et changements de runlevel enregistrés.
05Vérifie les inhibitors et travaux actifs
systemd-inhibit --list 2>/dev/null || true
systemctl list-jobs
systemctl --failed
shutdown --show 2>/dev/null || true
Avant un arrêt, vérifie sessions actives, sauvegardes, transactions de paquets, services en échec, jobs systemd et inhibitors.
06Simule une maintenance planifiée
Au lieu de programmer un arrêt réel, crée un timer utilisateur inoffensif puis annule-le :
systemd-run --user --on-active=2min --unit=soria-maintenance-reminder /usr/bin/printf 'maintenance window reached
'
systemctl --user list-timers soria-maintenance-reminder.timer
systemctl --user stop soria-maintenance-reminder.timer
systemctl --user reset-failed soria-maintenance-reminder.service soria-maintenance-reminder.timer 2>/dev/null || true
07Documente les commandes réelles sans les exécuter
printf '%s
' 'sudo shutdown -r +10 "Maintenance planifiée"' 'sudo shutdown -c' 'sudo systemctl reboot' 'sudo systemctl poweroff'
Ces commandes sont seulement affichées. Sur une VM dédiée, une procédure réelle doit annoncer la maintenance, vérifier les sessions, synchroniser les écritures, programmer l’arrêt, confirmer le timer et conserver un accès console.
08Nettoie le laboratoire
./module4-systemd-boot-lab.sh validate
./module4-systemd-boot-lab.sh reset
Rédige une procédure de maintenance
Inclue annonce, inventaire des sessions, vérification des sauvegardes et jobs, inhibitors, services en échec, fenêtre, commande prévue, annulation, accès console, tests après retour et journal d’exploitation.
✓Ce que tu retiens
L’environnement doit être placé selon sa portée. Un arrêt est une opération d’exploitation : il se prépare, s’annonce, se vérifie, peut être annulé et doit disposer d’une voie de récupération.