#2101 Le 05/04/2026, à 15:29
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
BonjourJujuland,
Comme tu le devines, les options de DIALOG '--color-mode' et '--cursor-off-label' ne sont pas essentielles au fonctionnement du script (cf 'man dialog') :
--color-mode est une extension de --colors
--cursor-off-label sert à positionner le curseur.
Tu peux supprimer ces deux fioritures.
Je serais assez mal placé pour dire que Xubuntu 16.04, "c'est vieux".
En effet, à force d'accumuler - et surtout de vieillir - j'ai une palanquée d'ordinateurs ; le plus vieux est un portable Toshiba 'T2150cds' de 1995, en double amorçage (Windows 3.3 + Slackware 8.1) :
https://ermaia.copro212-75012.fr/T2150cds.html
Robert
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2102 Le 05/04/2026, à 17:13
- Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
trop de rm : utilise le Développement de chemin, et donc fonction inutile.
UUOC! tellement !

emploi de fichiers temporaires, alors qu'une commande awk bien construite ferait le boulot en une ligne.
echo en série au lieu d'un printf
redéfinir la variable 'page' comme étant une variable 'chaîne' (elle était devenue une variable contenant un entier)
les variables, en bash, par défaut, ne sont pas typées : c'est du texte.
pour que ce soit un entier, il faut le déclarer explicitement.
tout ça, tout ça...
Le listage des liens à traiter devrait être automatisé. Je ne sais pas combien de pages il y a sur le site, mais tu devrais avoir autre chose à faire que de te le ("le" : le listage.
) palucher.
C'est tortueux et bavard, alors que ça pourrait être beaucoup plus direct et lisible.
pourquoi faire simple quand on peut faire compliquer.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#2103 Le 05/04/2026, à 21:34
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonsoir Watael,
Merci pour ces remarques pertinentes.
Je passe sur les premières remarques qui concernent mes nombreuses maladresses : Elles n'appellent pas d'observation de ma part.
En revanche, je suis intéressé par la manière dont tu te jouerais de la difficulté suivante (pour moi, c'est une difficulté) :
Soit un certain nombre de page html :
#page_1=/Commune/Site_Ermaia/Ermaion/index.html
#page_2=/Commune/Site_Ermaia/Ermaion/TecHT.html
#page_3=/Commune/Site_Ermaia/Ermaion/T2150cds.html
#page_4=/Commune/Site_Ermaia/Ermaion/SecuritePompe.html
#page_5=/Commune/Site_Ermaia/Ermaion/PubOscillo_LERES_T7.html
(...)
* Il est nécessaire de repérer ces pages par le n° de page.
* La variable $page doit être une chaîne : c'est, ici, 'page_1=(...)
* Le script doit incrémenter le n° pour passer à la suivante : --> page="page_"$num ; ((num++))
Mais, si l'on incrémente, la variable $page ne contient plus une chaîne mais un entier.
Pour redéfinir $page comme étant une chaîne, j'avoue ne pas avoir cherché longtemps : J'enregistre dans un fichier temporaire, qui est immédiatement relu ; le shell bash relit, alors, $page comme étant une chaîne.
* Les pages doivent être numérotées ; d'une part, parce que toutes les pages ne contiennent pas forcément des hyperliens et, d'autre part, parce que le cahier des charges prévoit de numéroter les pages.
Quomodo recte facere ?
Merci de ton retour.
Robert
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2104 Le 07/04/2026, à 18:00
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour tout le monde,
Deux petits scripts (enfin, disons deux et demi) :
I. MONTER et CHROOTER
Les deux scripts de dépannage 'MONTER' et 'CHROOTER' -connexes- interfacent les commandes MOUNT et CHROOT, soit en mode graphique (terminal virtuel), soit en mode console texte.
Ils sont écrits avec AWK et DIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.
[ Un troisième script, support, est nécessaire ('montreFST.sh')]
Les captures d'écran sont sur mon site :
https://ermaia.copro212-75012.fr/Inform … tique.html
1. Script MONTER :
1.1. Les partitions sont montées sur '/mnt/' le nom de la partition est /dev/['partition'] (exemple : '/mnt/sda3'.
Si le point de montage n'existe pas, il est créé.
Les versions du script > 3.00 sont aptes à monter des partitions qui sont au format UFS (seulement en lecture).
1.2. Options :
--help : Aide succincte ;
-r –read-only : Monter en "lecture seule" ; à noter que les partitions 'UFS' ne peuvent pas être montées avec des droits d'écriture.
-d –detail : Détailler les caractéristiques des disques durs et des partitions qui peuvent être montées.
-c –chroot : Chrooter, ensuite, sur la partition (le script MONTER appelle CHROOTER) ; à noter que le script CHROOTER peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur /mnt/.
2. Script CHROOTER :
2.1. Le script CHROOTER est appelé habituellement par le script MONTER [option : '--chroot'].
Il peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur /mnt/ et que l'on a utilisé comme nom de montage l'identifiant /dev/['partition'] : ('/mnt/sda1', par exemple)
Le script lie (c-à-d : mount –bind) les répertoires :
/proc
/dev
/dev/pts
/sys
/run
/sys/firmware/efi/efivars (pour accéder aux variables EFI, sur un système UEFI)
Le script permet d’accéder en chroot à Internet et de faire tourner des applications graphiques.
Le script sort du chroot, proprement, en démontant tous les répertoires :
umount -v --recursive /mnt/$Partition
2.2. Option unique :
--help : Aide succincte.
3. Script 'montreFST.sh' :
Script appelé par les scripts MONTER ou CHROOTER (n'a pas vocation à être exécuté seul).
4. Implantation :
4.1. Ces scripts sont implantables sur une distribution Linux (tournant avec ou sans interface graphique) ; l'intéret est évidemment faible.
4.2. En revanche, ces scripts pourraient trouver une certaine utilité pour qui utilise la boîte à outils « SYSTEMRESCUE » qui tourne soit sur une clef USB, soit sur l’une des partitions du disque dur d’un ordinateur.
https://www.system-rescue.org/
En ce dernier cas, GRUB amorce directement l’ISO de SYSTEMRESCUE avec la séquence suivante :
{
load_video
insmod gzio
insmod part_gpt
insmod part_msdos
insmod ext2
rmmod tpm
set iso_path="/ISOS/systemrescue.iso"
search --no-floppy --set=root --file $iso_path
loopback loop $iso_path
echo "Je sonde ..."
probe -u $root --set=iso_disk
echo "Chargement du noyau ..."
linux (loop)/sysresccd/boot/x86_64/vmlinuz img_dev=/dev/disk/by-uuid/$iso_disk img_loop=$iso_path archisobasedir=sysresccd copytoram setkmap=fr-latin9 index=off metacopy=off cow_label=Stockage cow_directory=Modifs_SystemRescue
echo "Chargement de initramfs ..."
initrd (loop)/sysresccd/boot/x86_64/sysresccd.img
}
En considérant, ici, que SystemRescue se trouve dans le répertoire /ISOS/ d’une partition nommée « Stockage » ; le répertoire dans lequel SystemRescue écrit et conserve ses données est appelé, ici : « Modifs_SystemRescue » (à créer vide).
MONTER :
#!/bin/bash
#-----------------------------------------------------------------------
#
# Site 'ERMAIA - 10 août 2011 - Copie libre (sous licence GNU)
#
# MONTER des partitions
#
#-----------------------------------------------------------------------
#
#
rm /tmp/brouillon.txt 2> /dev/nul
rm /tmp/intermediaire.txt 2> /dev/nul
rm /tmp/final.txt 2> /dev/nul
rm /tmp/finalTypeA.txt 2> /dev/nul
rm /tmp/finalTypeB.txt 2> /dev/nul
rm /tmp/finalTypeC.txt 2> /dev/nul
rm /tmp/finalTypeD.txt 2> /dev/nul
rm /tmp/finalTypeE.txt 2> /dev/nul
rm /tmp/finalType.txt 2> /dev/nul
rm /tmp/Partition.txt 2> /dev/nul
rm /tmp/PartitionType-2.txt 2> /dev/nul
#
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
#
# Dépendances :
# Nécessite le script complémentaire suivant :
if ! [ `which montreFST.sh 2> /dev/nul` ]
then echo; echo " Le script 'montreFST.sh' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le script "; echo
echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
exit 1
fi
# Nécessite 'FSARCHIVER'
if ! [ `which fsarchiver 2> /dev/nul` ]
then echo; echo " Le fichier 'FSARCHIVER' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le paquet "; echo
echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
exit 1
fi
# Nécessite 'DIALOG'
if ! [ `which dialog 2> /dev/nul` ]
then echo; echo " Le fichier 'DIALOG' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le paquet "; echo
echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
exit 1
fi
# Usage
if [[ $1 == "--help" ]]
then
echo -e "$VERT"
cat <<EOF
Version : 3.1.5 - Site 'ERMAIA
Les deux scripts MONTER et CHROOTER interfacent les commandes MOUNT et CHROOT, en mode graphique (terminal virtuel) ou sur une console texte.
Ils sont écrits avec AWK et DIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.
[ Un troisième script est nécessaire ('montreFST.sh')]
Les partitions sont montées sur '/mnt/' le nom de la partition est /dev/['partition'] (exemple : '/mnt/sda3'.
Si le point de montage n'existe pas, il est créé.
Cette version (> 3.00) est capable de monter les partitions qui sont au format UFS (lecture seule).
Options :
--help = Cette aide succincte ;
-r --read-only = Monter en "lecture seule" ;
à noter que les partitions 'UFS' ne peuvent pas être montées avec des droits d'écriture.
-d --detail = Détailler les caractéristiques des disques durs et des partitions qui peuvent être montées.
-c --chroot = Chrooter sur la partition (le script MONTER appelle CHROOTER) ;
à noter que le script CHROOTER peut être appelé seul, dès lors que la partition à travailler
est déjà montée sur '/mnt'.
EOF
echo -e "$NORMAL"
exit 0
fi
# Pour travailler dans une session graphique nécessite soit : 'XFCE4-TERMINAL', soit 'GNOME-TERMINAL'
tty | grep -q "/dev/pts/"
if [ $? -eq 0 ]
then
Xterminal=""
if ! [ `which gnome-terminal 2> /dev/nul` ]
then echo "Le terminal 'GNOME-TERMINAL' n'est pas installé"
else
Xterminal="GNOME-TERMINAL"
#echo "X-TERMINAL = "$Xterminal
fi
if ! [ `which xfce4-terminal 2> /dev/nul` ]
then echo "Le terminal 'XFCE4-TERMINAL' n'est pas installé"
else
Xterminal="XFCE4-TERMINAL"
#echo " ---> X-TERMINAL = "$Xterminal
fi
if [[ $Xterminal == "" ]]
then
echo ; echo -e "$VERT""___""$NORMAL""Dans une session graphique, les scripts MONTER et CHROOTER necessitent un X-TERMINAL (mais ils sont fonctionnels dans une session sans X.) "
echo ; echo -e "$VERT""___""$NORMAL""Aucun X-TERMINAL trouvé : Prière de télécharger et d'installer l'un des paquets suivants :"
echo ; echo " 'GNOME-TERMINAL' 'XFCE4-TERMINAL' "; echo
echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
exit 1
fi
fi
#
# Récupérer un paramètre de ligne de commande
Ecriture=""
AppelChroot=""
Detailler=""
while [ "$#" -gt 0 ]; do
case $1 in
--read-only) Ecriture="-r"
;;
-r) Ecriture="-r"
;;
--chroot) AppelChroot="--chroot"
;;
-c) AppelChroot="--chroot"
;;
--detail) Detailler="--detail"
;;
-d) Detailler="--detail"
;;
-rd) Ecriture="-r" ; Detailler="--detail"
;;
-dr) Ecriture="-r" ; Detailler="--detail"
;;
-dc) AppelChroot="--chroot" ; Detailler="--detail"
;;
-cd) AppelChroot="--chroot" ; Detailler="--detail"
;;
*) Inconnu=$1
echo -e "$VERT" " Paramètre ""$ROUGE"$Inconnu"$VERT"" inconnu ==> -r --read-only -c --chroot -d --detail -dr -rd -cd -dc --help : Je sors" "$NORMAL"
exit 1
;;
esac
shift
done
echo
echo "Ecriture= "$Ecriture
echo "AppelChroot= "$AppelChroot
echo "Detailler= "$Detailler
echo
if [[ $Ecriture == -r ]] && [[ $AppelChroot == --chroot ]]
then
echo
echo -e "$VERT" "Les arguments ""$ROUGE""'--chroot' et '--read-only'""$VERT"" sont incompatibles : Je sors. " "$NORMAL"
echo
exit 1
fi
#
#
#" substr($5,2,3)
# Récupérer la liste des partitions existantes avec 'fsarchiver' (sauf la partition 'SWAP')
fsarchiver probe 2> /tmp/intermediaire.txt
#
awk 'substr($1,5,1) <= 9 && substr($1,5,1) >= 1 && substr($3,2,4) != "swap" \
{print substr($1,2,5) " " substr($3,2,8) "________" substr($5,2,10) " off "}' /tmp/intermediaire.txt > /tmp/final.txt
Resultat=`cat /tmp/final.txt`
#
# Voir les partitions existantes et celles qui sont montées (deux cas de figure : soit console graphique [tty --> pts],
# soit console texte [tty --> tty], on filtre en conséquence.
if [[ "$Detailler" == "--detail" ]]
then
tty | grep -q "/dev/pts/"
if [ $? -eq 0 ]
then
case $Xterminal in
GNOME-TERMINAL ) gnome-terminal --hide-menubar --geometry=90x30 -- /usr/bin/montreFST.sh --graph & ;;
XFCE4-TERMINAL ) xfce4-terminal --hide-toolbar --hide-menubar --geometry=90x30 --execute /usr/bin/montreFST.sh --graph & ;;
esac
fi
#
tty | grep -q "/dev/tty"
if [ $? -eq 0 ]
then
/usr/bin/montreFST.sh
fi
fi
#
# Boîte de menu 'Dialog' pour choisir les partitions à monter
#
touch /tmp/dialoghdatmp && FICHTMP=/tmp/dialoghdatmp
trap "rm -f $FICHTMP" 0 1 2 3 15
#
dialog \
--backtitle "Bon, je monte quoi ?" --title "Menu " \
--ok-label "Valider" --cancel-label "Quitter" \
--checklist "Cochez une ou plusieurs partitions (montage sur /mnt)" 16 62 7 \
$Resultat 2> $FICHTMP
if [ $? != 0 ]; then
echo $?
clear
exit $?
fi
#
clear
# Formatage de la réponse : Enlever les guillemets encadrant les résultats de la boîte 'DIALOG'
Rien=""
Guillemet='"'
sed "s/$Guillemet/$Rien/g" < $FICHTMP > /tmp/brouillon.txt
#
# Tester si un choix a été fait dans 'DIALOG'
if test ! -s /tmp/brouillon.txt
then echo; echo -e "$JAUNE" "___ Aucune partition à monter n'a été choisie : Je sors. ___" "$NORMAL"; echo
exit 0
fi
#
# Combiner le fichier 'Liste des partitions choisies' et le fichier 'Type'
ListePart=`cat /tmp/brouillon.txt`
for index in $ListePart
do
grep -w $index /tmp/final.txt >> /tmp/finalTypeA.txt
done
#
# Formatage du fichier : Enlever les "________"
Espace=" "
Tiret="________"
sed "s/$Tiret/$Espace/g" < /tmp/finalTypeA.txt > /tmp/finalTypeB.txt
#
# Formatage du fichier : Remplacer "ntfs" par "ntfs-3g" pour monter un fichier ntfs en lecture/écriture
sed "s/ntfs/ntfs-3g/g" < /tmp/finalTypeB.txt > /tmp/finalTypeC.txt
#
# Formatage du fichier : Remplacer le séparateur des champs " " (Espace) par le séparateur "," (une seule virgule).
Espace=" "
Virgule=","
sed "s/$Espace/$Virgule/g" < /tmp/finalTypeC.txt > /tmp/finalTypeD.txt
Virgules_5=",,,,,"
sed "s/$Virgules_5/$Virgule/g" < /tmp/finalTypeD.txt > /tmp/finalTypeE.txt
#
# Formatage du fichier : Remplacer "ufs" par "ufs -o ufstype=ufs2" pour monter un fichier ufs en lecture ; il s'ensuit la création de deux champs supplémentaires : $3 et $4.
sed "s/ufs/ufs -o ufstype=ufs2/g" < /tmp/finalTypeE.txt > /tmp/finalType.txt
#
# S'assurer que le répertoire de montage /mnt/XXX existe ; sinon, le créer ; $1 : 1er champ : 'partition' ; $2 : 2ème champ : 'type'
awk 'BEGIN { FS="," } {print("Partition="$1"; \
if test ! -d /mnt/$Partition; \
then mkdir -v /mnt/$Partition; fi; ") | "sh"}' /tmp/finalType.txt
#
echo -e "$JAUNE"
echo
echo "xxxx"
echo
#
# Monter les répertoires ; $1 : 1er champ : 'partition' ; $2 : 2ème champ : 'type'
#
cat /tmp/finalType.txt | awk 'BEGIN { FS="," } {print $1, $2 }' > /tmp/PartitionType.txt
NbrLignes=`cat /tmp/PartitionType.txt | wc -l`
echo "Nombre de partitions à monter = "$NbrLignes
echo
#
# On pipe la ligne de commande générée par AWK à MOUNT :
#
if [[ "$Ecriture" == "-r" ]]
then
awk '{print(" --read-only --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}
{close("xargs mount")}
{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)}
{print $1 > "/tmp/Partition.txt"}' /tmp/PartitionType.txt
Partition=`cat /tmp/Partition.txt`
echo -e "$VERT"" montée(s) en lecture seule" "$JAUNE"
else
awk '{print(" --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}
{close("xargs mount")}
{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)}
{print $1 > "/tmp/Partition.txt"}' /tmp/PartitionType.txt
Partition=`cat /tmp/Partition.txt`
fi
#
echo
echo "xxxx"
echo
#
# Selon l'option choisie :
if [[ "$AppelChroot" == "--chroot" ]]
then
sleep 1
read -r Partition < /tmp/Partition.txt ; echo $Partition > /tmp/Partition.txt
# ---> conserver dans ce fichier une seule entrée où CHROOTER
/usr/bin/chrooter
fi
#
echo -e "$NORMAL"
exit 0
#
#-----------------------------FIN------------------------------------
#
# Autre façon (plus claire mais besognieuse) de piper la ligne de commande générée par AWK à MOUNT :
#while IFS= read -r ligne
#do
#if [[ "$Ecriture" == "-r" ]]
#then # On pipe la ligne de commande générée par AWK à MOUNT
#echo "$ligne" | awk '{print(" --read-only --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}'
#echo "$ligne" | awk '{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} {print $1 > "/tmp/Partition.txt"}'
#Partition=`cat /tmp/Partition.txt`
#echo -e "$VERT"" montée en lecture seule" "$JAUNE"
#else
#echo "$ligne" | awk '{print(" --types", $2, $3, $4" /dev/"$1, "/mnt/"$1) | "xargs mount"}'
#echo "$ligne" | awk '{print("Partition /dev/"$1" (typée "$2") montée sur /mnt/"$1)} {print $1 > "/tmp/Partition.txt"}'
#Partition=`cat /tmp/Partition.txt`
#fi
#done < /tmp/PartitionType.txtCHROOTER :
#!/bin/bash
#-----------------------------------------------------------------------
#
# Site 'ERMAIA - 15 août 2011 - Copie libre (sous licence GNU)
#
# CHROOTER sur une partition
#
#-----------------------------------------------------------------------
#
#
#
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
#
# Nécessite 'DIALOG'
if ! [ `which dialog 2> /dev/nul` ]
then echo; echo " Le fichier 'DIALOG' n'existe pas." ; echo "J'ai cherché dans : "$PATH ; echo ; echo " --> Installer le paquet "; echo
echo -e "$ROUGE" "Erreur fatale" "$NORMAL"
exit 1
fi
#
# Usage
if [[ $1 == "--help" ]]
then
clear
echo -e "$VERT"
cat <<EOF
Version : 3.1.5 - Site 'ERMAIA
Les deux scripts MONTER et CHROOTER interfacent les commandes MOUNT et CHROOT, en mode graphique (terminal virtuel) ou sur une console texte..
Ils sont écrits avec AWK et CDIALOG ; FSARCHIVER est utilisé pour lister les disques durs et les partitions.
[ Un troisième script est nécessaire ('montreFST.sh')]
Le script CHROOTER est appelé habituellement par le script MONTER [option : '--chroot'].
Il peut être exécuté seul, dès lors que la partition à travailler est déjà montée sur /mnt/ et que l'on a utilisé comme nom de montage l'identifiant /dev/['partition'] : ('/mnt/sda1', par exemple)
Option unique :
--help = Cette aide succincte.
EOF
echo -e "$NORMAL"
exit 0
fi
#
touch /tmp/final2.txt
#
# Boîte d'entrée clavier 'dialog' : partition sur laquelle on va chrooter
#
touch /tmp/dialoghdatmp && FICHTMP=/tmp/dialoghdatmp
trap "rm -f $FICHTMP" 0 1 2 3 15
#
# Donner un exemple de partition sur laquelle chrooter :
read -r Partition < /tmp/Partition.txt ; echo $Partition > /tmp/Partition.txt # Une seule partition (si ce fichier en contient plusieurs)
Partition=`cat /tmp/Partition.txt`
#
dialog \
--backtitle "Bon, je fais un CHROOT sur quelle partition ?" --title "CHROOT " \
--ok-label "Valider" --cancel-label "Quitter" \
--inputbox "Entrer la reference de la partition cible (exemple :"$Partition")" 12 28 $Partition 2> $FICHTMP
if [ $? != 0 ]; then
echo $?
clear
exit $?
fi
#
# Enlever les 'espaces' parasites
sed 's/\s\{1,\}//' < $FICHTMP | sed 's/\s\{1,\}//' | sed 's/\s\{1,\}//' | sed 's/\s\{1,\}//' > /tmp/final2.txt
Partition=`cat /tmp/final2.txt`
#
echo "==========="
echo -e "$VERT" 'Partition = '"$NORMAL"$Partition
echo "==========="
#
# Vérifier que '$Partition' est montée et est bien montée sur '/mnt/'
if ! grep -wq "/dev/"$Partition /etc/mtab
then
clear
echo ; echo "Erreur : "$Partition" n'est pas montée ; la partition doit d'abord être montée ; je sors (bien dépité)."
exit 1
fi
if ! grep -wq "/mnt/"$Partition /etc/mtab
then
clear
echo ; echo "Erreur : "$Partition" doit être montée sur /mnt sous son propre nom : /mnt"$Partition" ; je sors (bien dépité)."
exit 1
fi
if [ -w /mnt/$Partition/dev ] && [ -w /mnt/$Partition/proc ]
then
echo " /mnt/$Partition/* est une partition Linux ouverte en lecture et en écriture "
else
clear
echo ; echo "Erreur : "$Partition" n'est pas une partition sur laquelle il est possible de chrooter ; je sors (bien dépité)."
exit 1
fi
clear
echo -e "$VERT" 'Préparation du chroot' "$NORMAL"
sleep 1
# CHROOT dans une console
echo -e "$VERT" 'Environnement matériel :' "$NORMAL"
mount -v -t proc /proc /mnt/$Partition/proc
mount -v -o bind /dev /mnt/$Partition/dev
mount -v -o bind /dev/pts /mnt/$Partition/dev/pts
mount -v -t sysfs /sys /mnt/$Partition/sys
echo -e "$VERT" 'Montage optionnel :' "$NORMAL"
mount -v -o bind /run /mnt/$Partition/run
echo -e "$VERT" 'Accéder aux variables EFI, sur un système UEFI (GRUB etc ...) ' "$NORMAL"
mount -v -o bind /sys/firmware/efi/efivars /mnt/$Partition/sys/firmware/efi/efivars
echo -e "$VERT" 'Accéder à internet :' "$NORMAL"
mount -v -o bind /etc/resolv.conf /mnt/$Partition/etc/resolv.conf
echo -e "$VERT" 'Accéder aux applications graphiques :' "$NORMAL"
xhost +local:
#
echo "==========="
echo -e "$VERT" "Si l'on souhaite créer une 'Invite chroot', pour pouvoir différencier l'environnement chroot, copier/coller dans la console de chroot la commande suivante :" "$NORMAL"
echo 'export PS1=`echo -e "\\033[1;31m"`chroot_$PS1`echo -e "\\033[0;39m"`'
echo -e "$VERT" "Pour utiliser des applications graphiques en chroot : En cas de difficulté, exporter la valeur de la variable DISPLAY, en copiant/collant dans la console de chroot la commande suivante :" "$NORMAL"
echo "export DISPLAY=$DISPLAY"
echo
echo -e "$VERT" "S'il est nécessaire de charger la configuration locale de bash, copier/coller dans la console de chroot les deux commandes suivantes : :" "$NORMAL"
echo " source /etc/profile"
echo " source ~/.bashrc"
echo -e "$JAUNE" "Console de CHROOT (taper 'exit' pour sortir) :" "$NORMAL"
echo
chroot /mnt/$Partition ``bash -i''
#
umount -v --recursive /mnt/$Partition
if [ $? != 0 ]
then
echo -e "$JAUNE" "Démonter à la main, ou copier/coller la commande :" "$NORMAL"
echo " umount -v --force --recursive /mnt/$Partition"
echo -e "$JAUNE" "En cas de nouvel échec : copier/coller la commande :" "$NORMAL"
echo " umount -v --lazy --recursive /mnt/$Partition"
echo
fi
#
#
exit 0
#
#-----------------------------FIN------------------------------------
# MontreFST.sh :
#!/bin/bash
# Script appelé par le script "MONTER" (n'a pas vocation à être exécuté seul)
#
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
#
# Usage
if echo $* | grep --ignore-case --no-messages --quiet --regexp=--help --regexp=-h --regexp=--version --regexp=--V
then
echo -e "$VERT"
cat <<EOF
Version : 3.1.2 Site 'ERMAIA - Copie libre (sous license GNU)
Script appelé par le script "MONTER" (n'a pas vocation à être exécuté seul).
EOF
#
echo -e "$NORMAL"
exit 0
fi
#
# Récupérer un paramètre de ligne de commande
Graphique=$1
#
# ----Version "Environnement graphique"----
if [[ "$Graphique" == "--graph" ]]
then
echo -e "$VERT" '=====================>>> fsarchiver probe simple <<<=====================' "$NORMAL"
fsarchiver probe
echo ' '
echo -e "$VERT" '_________________________________________________________________________' "$NORMAL"
echo ' '
echo -e "$BLEU" 'appuyez sur une touche pour sortir' "$NORMAL"
read key
exit 0
fi
#
#
echo
echo
echo -e "$JAUNE" "-------- Comme demandé (option -d --detailler) j'affiche d'abord les disques et les partitions -----------" "$NORMAL"
echo
echo
# ----Version "Console texte"----
echo -e "$VERT" " ----------------------------------------------------------------------" "$NORMAL"
echo -e "$BLEU" " Partitions existantes " "$NORMAL"
echo -e "$BLEU" " Ensuite, menu des partitions ( --> appuyez sur une touche + 'Entrée' pour sortir) " "$NORMAL"
echo -e "$VERT" ' =====================>>> fsarchiver probe simple <<<======================' "$NORMAL"
fsarchiver probe 2> /tmp/fsarch.txt
cat -n /tmp/fsarch.txt
echo -e "$VERT" ' __________________________________________________________________________' "$NORMAL"
echo
echo
echo -e "$JAUNE" "------------------------------------------------------------------------------------------------------" "$NORMAL"
echo
echo -e "$BLANCLAIR" " ( --> appuyer sur une touche + 'Entrée' pour sortir) " "$NORMAL"
sleep 1
#--> appuyez sur une touche pour sortir :
#Source - https://stackoverflow.com/a/11596145
#Posted by Seth Robertson
#Retrieved 2026-02-18, License - CC BY-SA 3.0
#read -n 1 x; while read -n 1 -t .1 y; do x="$x$y"; done
#
Clavier=""
ConditionFinale=""
until [[ "$Clavier" != "$ConditionFinale" ]]
do
read Clavier
done
exit 0
#
# ------------------------------------------- FIN ----------------------------------------Mise à jour à la version 3.1.5 des scripts :
- MONTER (corrections de forme et correction d'un bogue empêchant une partition au format 'UFS' d'être montée. - cf. lignes 265 et ss. du script)
- CHROOTER (corrections de forme et correction d'un bogue empêchant la résolution des DNS sur une partition FEDORA (et apparentées) utilisant des liens symboliques - cf. mon message ci-dessous du 12-04-2026)
Robert
Dernière modification par Robert_75012 (Aujourd'hui à 15:03)
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2105 Le 07/04/2026, à 18:14
- Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
---
un script utile par message, s'il te plaît.
sinon on ne saura plus de quoi on parle.
---
pourquoi ta liste devrait-elle avoir ce format
#page_1=/Commune/Site_Ermaia/Ermaion/index.html?
quand tu fais la liste des courses, tu écris :
article#1 - lessive
article#2 - rillettes
...
?
ton fichier de "configuration" n'est qu'une liste qui contient un seul type de données : des URLs.
tu aurais une liste de liens à tester :
/Commune/Site_Ermaia/Ermaion/index.html
/Commune/Site_Ermaia/Ermaion/TecHT.html
/Commune/Site_Ermaia/Ermaion/T2150cds.htmlc'est très simple :
# pseudoCode:
while read -r url; do wget --spider... "$url" && urlValide || lienMort; done <tonFichierListeURLspour obtenir la liste des urls, il faut parcourir les fichiers du site, et rediriger (et traiter/nettoyer) les balises <a ... href="...">
Dernière modification par Watael (Le 08/04/2026, à 01:09)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#2106 Le 07/04/2026, à 21:16
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonsoir Watael,
Merci.
1. Sur la numérotation des pages html à tester.
Le script 'LiensMorts' a été écrit pour le site "Archives de la copropriété" (on me tanne le cuir pour chasser les liens morts) ; je gère le site depuis 2007 ; c'est lourd.. j'essaye de passer la main ; l'idée est de scinder et de partager l'administration du site entre plusieurs autres victimes ; à cet égard, chacun serait responsable d'un certain nombre de pages : d'où la nécessité de numéroter les pages html du site ; à terme, j'espère me désengager complètement.
Diabolique ! est mon plan.
Évidemment, en dehors de ce contexte, la numérotation des pages html n'est pas utile.
La simplification de ce script que tu proposes est donc, à la fois, bien venue et à retenir.
Est-ce rédhibitoire, si le fichier 'liensmorts.conf' contient, outre des adresses, des variables à initialiser ?
En l'espèce, il y en a quatre.
2. Sur la multiplication, à outrance, des fichiers temporaires.
C'est vrai que j'ai fait fort.
Mais c'est bien pratique pour le débogage et l'adjonction éventuelle de nouvelles fonctionnalités ; en regardant le contenu de chaque fichier, on a une fenêtre ouverte sur le fonctionnement du script.
3. Je reviens sur la façon de tester l'existence d'un fichier exécutable dont dépend les srcipts.
Faire :
if test ! -e /usr/bin/dialog
c'est ballot, parce qu'on ne teste pas tous les chemins du $PATH.
Il vaut mieux faire :
if ! [ `which dialog` ]
tous les chemins de $PATH sont testés à la fois.
Robert
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2107 Le 07/04/2026, à 21:53
- Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Est-ce rédhibitoire, si le fichier 'liensmorts.conf' contient, outre des adresses, des variables à initialiser ?
oui. on ne mélange pas des données (les URLs) et des variables utiles au script (ça, c'est de la conf)
mais 4 variables dans un fichier de conf, c'est surdimensionné. Pourquoi n'iraient-elles pas dans le script ?
je suis très pessimiste quant à l'implication de "tes victimes", et je prédis que ton projet ne survivra pas longtemps après ton départ, notamment à cause de la maintenance qui va être compliquée par ses défauts.
d'autant que, comme je te l'ai dit, une boucle qui parcourt l'arborescence du site permettrait "facilement" de recenser toutes les URLs.
de là, il n'est pas impossible de les tester dans la foulée, ce qui te dispenserait du fichier ±temporaire qui les liste, et de n'avoir qu'une liste qui contient des liens vraiment morts.
tu as lu le message de Krodelabestiole concernant les codes de retour des tests d'URLs ?
type -p dialog fonctionne bien : type -p dialog || >&2 echo "missing command: dialog"*, ou command -v dialog*
on peut mettre ça dans une boucle :
#!/bin/bash
declare -a neededProgs=( dialog beep 'trash-put' )
for prog in "${neededProgs[@]}"; do if ! type -p "$prog"; then missingProgs+=( "$prog" ); fi; done
if ((${#missingPorgs[*]})); then >&2 echo "missing Progs: ${missingProgs[@]}"; exit1; fi--
* la sortie peut être redirigée vers /dev/null pour ne pas "polluer" l'affichage.
Dernière modification par Watael (Le 07/04/2026, à 22:11)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#2108 Le 08/04/2026, à 13:17
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour Watael
Vu, merci.
1. Sur une simplification radicale.
Effectivement, on peut simplifier - comme tu le suggères - en codant, à la fois, la recherche des pages html dans un dossier du disque dur et la recherche des liens morts, à l'intérieur de chaque page html trouvée.
2. Sur ce que génère le script et sur ce qu'il teste.
Oui, j'ai lu l'intervention de Krodelabestiole, portant sur un autre sujet ; c'est dans les clous.
En effet, le script teste le code de retour de 'Wget' (non pas celui du serveur distant) ; il y a ainsi huit codes d'erreur possibles de 'Wget' (qui correspondent à des codes de retour d'erreur du serveur distant > à 400 (si j'ai bonne mémoire - sachant qu'une connexion réussie renvoie le code 200).
(..)
wget --spider --tries=2 --timeout=5 --force-html --base=URL $Ligne ; CodeRetour=$?
if [[ $CodeRetour -eq 0 ]]
then
(..)
case "$CodeRetour" in # indiquer la signification du n° de code Erreur de la commande 'wget --spider' (cf 'man wget')
"1" )
echo " Code d'erreur générique." ;;
"2" )
echo " Erreur d'analyse - par exemple, lors de l'analyse des options de la ligne de commande, des
fichiers .wgetrc ou .netrc..." ;;
"3" )
echo " Erreur d'entrées/sorties du fichier." ;;
"4" )
echo " Échec du réseau." ;;
"5" )
echo " Échec de la vérification SSL." ;;
"6" )
echo " Échec de l'authentification du nom d'utilisateur ou du mot de passe." ;;
"7" )
echo " Erreurs de protocole." ;;
"8" )
echo " Le serveur a émis une réponse d'erreur." ;;
esac
(..)Les codes de retour dont il s'agit sont ceux listés dans le man de wget.
Sur le terminal, le script affiche, à la fois, la sortie de Wget (c-à-d. les codes de retour d'erreur du serveur distant, en clair) et les siens propres (n° et signification du code).
Le fichier 'Log' n'enregistre que la sortie de Wget (erreur du serveur distant, en clair).
Voir les captures d'écran sur mon site :
https://ermaia.copro212-75012.fr/Inform … MORTS.html
3. Il me semblerait nécessaire de maintenir la possibilité de configurer le script avec un fichier de configuration.
En effet, il y a au moins deux variables importantes à initialiser :
* L'activation ou la désactivation du bip sonore
* Le choix d'un éditeur de texte (certes, 'nvim' fonctionne à la fois en console texte et en mode graphique, mais il est tout moche).
Ce n'est pas 'vendeur' si l'on supprimait ces choix.
Robert
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2109 Le 08/04/2026, à 16:57
- Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
3- ça ne constitue pas d'obligations à avoir un fichier de conf.
le script lit les paramètres qui lui sont passés et selon leur valeur positionne telle ou telle variable.
ces variables "environnementales" (par opposition aux variables "fonctionnelles" qui facilite le traitement) n'ont pas à être dans un fichier indépendant; c'est surdimensionné par rapport à la taille de ton projet.
À la rigueur, si elles étaient partagées avec d'autres scripts... et encore une poignée de variables c'est rien à (re)mettre dans un script.
en plus nvim, vu que maintenant tu vas traiter les URLs à la volée, n'est plus utile. ![]()
Dernière modification par Watael (Le 08/04/2026, à 16:58)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#2110 Le 09/04/2026, à 16:37
- lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour,
En parlant de chroot, voici une petite fonction qui me sert bien pour chrooter facilement un système. L'idée avec cette fonction, est de l'intégrer dans le fichier ~/.bash_functions. Rien de bien novateur mais j'aime bien le côté pratique de la chose pour dépanner un système ou mettre à jour ce dernier sans avoir à forcement démarrer dessus.
Je n'ai pas essayé avec un système efi mais je pense que ça devrait fonctionner.
chrootme ()
{
local verbose=1
local path=""
local CYAN="\e[36m"
local YELLOW="\e[33m"
local RESET="\e[0m"
local funcname="${FUNCNAME[0]}"
help ()
{
printf "%bUsage :%b
%-30s : %s
%-30s : %s
%-30s : %s
%-30s : %s
%bNotes :%b
- Recherche par défaut dans :
%s
%s
%s
- Un système est chrootable s'il contient %s et un shell valide
- Le shell utilisé est celui de l'utilisateur root dans le chroot
%bExemples :%b
%-30s : %s
%-30s : %s
%-30s : %s
" \
"$CYAN" "$RESET" \
"$funcname" "Sélection interactive pour chrooter un système" \
"$funcname -l ou --list" "Liste les systèmes chrootables" \
"$funcname -p ou --path <chemin>" "Chroote directement le système à ce point de montage" \
"$funcname -h ou --help" "Affiche cette aide" \
"$CYAN" "$RESET" \
"/mnt/*" \
"/media/*" \
"/run/media/$USER/*" \
"/etc/os-release" \
"$CYAN" "$RESET" \
"$funcname" "Sélection interactive du système à chrooter" \
"$funcname -l" "Liste uniquement les systèmes chrootables" \
"$funcname --path /mnt/arch" "Chroote directement /mnt/arch"
}
local action=""
while [ $# -gt 0 ]; do
case $1 in
-h|--help)
help
return 0
;;
-l|--list)
action="list"
;;
-p|--path)
shift
if [ -z "$1" ]; then
printf "%bErreur : -p ou --path nécessite un chemin%b\n" "$YELLOW" "$RESET"
return 1
fi
path="$1"
;;
*)
printf "%bOption inconnue : %s%b\n" "$YELLOW" "$1" "$RESET"
return 1
;;
esac
shift
done
# Détection des systèmes chrootables
if [ -z "$path" ]; then
local os_names=()
local os_dirs=()
local dir os_name
[ "$action" = "list" ] && printf "%bDétection des systèmes chrootables...%b\n" "$CYAN" "$RESET"
for dir in /mnt/* /media/* /run/media/"$USER"/*; do
[ -f "$dir/etc/os-release" ] || continue
local shell_found=""
local shells=("bash" "zsh" "ksh" "fish" "dash" "sh")
for s in "${shells[@]}"; do
if [[ -x "$dir/bin/$s" || -x "$dir/usr/bin/$s" ]]; then
shell_found="$s"
break
fi
done
if [ -z "$shell_found" ]; then
continue
fi
local root_shell=""
if [ -f "$dir/etc/passwd" ]; then
root_shell=$(awk -F: '$1 == "root" {gsub(/.*\//, "", $7); print $7}' "$dir/etc/passwd" 2>/dev/null)
fi
if [[ -z "$root_shell" || ! -x "$dir/bin/$root_shell" && ! -x "$dir/usr/bin/$root_shell" ]]; then
root_shell="$shell_found"
fi
# shellcheck disable=SC1091
source "$dir/etc/os-release" 2>/dev/null || continue
os_name="$PRETTY_NAME"
os_names+=("$os_name")
os_dirs+=("$dir")
[ "$action" = "list" ] && printf " - trouvé : %s (%s) [shell: %s]\n" "$os_name" "$dir" "$root_shell"
done
if [ ${#os_names[@]} -eq 0 ]; then
printf "Aucun système chrootable trouvé.\n"
return 1
fi
fi
if [ "$action" = "list" ]; then
return 0
fi
local mountpoint
if [ -n "$path" ]; then
mountpoint="$path"
[ "$verbose" -eq 1 ] && printf "%bChroot target: %s%b\n" "$CYAN" "$mountpoint" "$RESET"
else
printf "%bSélectionnez le système à chrooter (ou tapez 'q' pour quitter) :%b\n" "$CYAN" "$RESET"
for i in "${!os_names[@]}"; do
printf " %02d) %s\n" "$((i+1))" "${os_names[$i]}"
done
local selected idx
while true; do
printf '#? '
read -r idx
[[ $idx =~ ^[qQ]$ ]] && {
printf "Sortie sans chroot.\n"
return 0
}
[[ $idx =~ ^[0-9]+$ ]] && [ "$idx" -ge 1 ] && [ "$idx" -le ${#os_names[@]} ] && {
selected=$((idx-1))
mountpoint=${os_dirs[$selected]}
break
}
printf "%bChoix invalide.%b\n" "$YELLOW" "$RESET"
done
[ "$verbose" -eq 1 ] && printf "%bChroot target: %s%b\n" "$CYAN" "$mountpoint" "$RESET"
fi
local boot_uuid efi_uuid boot_mnt efi_mnt
boot_mnt="$mountpoint/boot"
efi_mnt="$mountpoint/boot/efi"
if [ -f "$mountpoint/etc/fstab" ]; then
read -r boot_uuid efi_uuid <<< "$(awk '
$2 == "/boot" {print $1}
$2 == "/boot/efi" {print $1}
' "$mountpoint/etc/fstab")"
fi
if [ -n "$boot_uuid" ]; then
old_boot=$(awk -v uuid="$boot_uuid" '$1 == uuid {print $3}' < /proc/mounts)
if [ -n "$old_boot" ] && [ "$old_boot" != "$boot_mnt" ]; then
[ "$verbose" -eq 1 ] && printf "Démontage ancien /boot: %s\n" "$old_boot"
sudo umount "$old_boot"
fi
[ ! -d "$boot_mnt" ] && sudo mkdir -p "$mountpoint/boot" && [ "$verbose" -eq 1 ] && printf "Création du point de montage /boot\n"
if ! mountpoint -q "$boot_mnt"; then
[ "$verbose" -eq 1 ] && printf "Montage /boot: %s → %s\n" "$boot_uuid" "$boot_mnt"
sudo mount "$boot_uuid" "$boot_mnt"
fi
fi
if [ -n "$efi_uuid" ]; then
old_efi=$(awk -v uuid="$efi_uuid" '$1 == uuid {print $3}' < /proc/mounts)
if [ -n "$old_efi" ] && [ "$old_efi" != "$efi_mnt" ]; then
[ "$verbose" -eq 1 ] && printf "Démontage ancien /boot/efi: %s\n" "$old_efi"
sudo umount "$old_efi"
fi
[ ! -d "$efi_mnt" ] && sudo mkdir -p "$efi_mnt" && [ "$verbose" -eq 1 ] && printf "Création du point de montage /boot/efi\n"
if ! mountpoint -q "$efi_mnt"; then
[ "$verbose" -eq 1 ] && printf "Montage /boot/efi: %s → %s\n" "$efi_uuid" "$efi_mnt"
sudo mount "$efi_uuid" "$efi_mnt"
fi
fi
for dir in dev dev/pts proc sys run; do
[ ! -d "$mountpoint/$dir" ] && sudo mkdir -p "$mountpoint/$dir"
if ! mountpoint -q "$mountpoint/$dir"; then
[ "$verbose" -eq 1 ] && printf "Bind mount: /%s → %s/%s\n" "$dir" "$mountpoint" "$dir"
sudo mount --bind "/$dir" "$mountpoint/$dir"
fi
done
local resolv_host="/etc/resolv.conf"
local resolv_chroot="$mountpoint/etc/resolv.conf"
if [ ! -e "$resolv_chroot" ] || [ "$(readlink -f "$resolv_chroot")" != "$(readlink -f "$resolv_host")" ]; then
[ "$verbose" -eq 1 ] && printf "Copie de %s → %s\n" "$resolv_host" "$resolv_chroot"
sudo cp -f "$resolv_host" "$resolv_chroot" 2>/dev/null
fi
local user_shell
user_shell=$(awk -F: '$1 == "root" {gsub(/.*\//, "", $7); print $7}' "$mountpoint/etc/passwd" 2>/dev/null)
if [[ -z "$user_shell" || ! -x "$mountpoint/$user_shell" ]]; then
local shells=("zsh" "bash" "ksh" "fish" "dash" "sh")
for s in "${shells[@]}"; do
if [ -x "$mountpoint/bin/$s" ]; then
user_shell="/bin/$s"
break
fi
if [ -x "$mountpoint/usr/bin/$s" ]; then
user_shell="/usr/bin/$s"
break
fi
done
fi
[ -z "$user_shell" ] && user_shell="/bin/sh"
printf "%bEntrée dans le chroot : %s%b\n" "$CYAN" "$mountpoint" "$RESET"
printf "Tapez 'exit' pour sortir et nettoyer automatiquement\n"
sudo chroot "$mountpoint" "$user_shell"
[ "$verbose" -eq 1 ] && printf "%bNettoyage des bind mounts...%b\n" "$CYAN" "$RESET"
if ! sudo umount -R "$mountpoint" 2>/dev/null; then
[ "$verbose" -eq 1 ] && {
printf "%bCertains répertoires sont occupés. Utilisation de --lazy...%b\n" "$YELLOW" "$RESET"
sudo lsof +D "$mountpoint" 2>/dev/null | head -n 5
}
sudo umount -Rl "$mountpoint" 2>/dev/null
fi
[ "$verbose" -eq 1 ] && printf "%bNettoyage terminé%b\n" "$CYAN" "$RESET"
}Dernière modification par lynn (Le 12/04/2026, à 12:02)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2111 Le 09/04/2026, à 17:11
- Watael

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
pourquoi une fonction (qui contient des fonctions
), qui sera chargée à chaque démarrage de bash, plutôt qu'un script (sous ~/.local/bin par exemple), qui ne sera pas moins accessible ?
Dernière modification par Watael (Le 09/04/2026, à 17:11)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#2112 Le 10/04/2026, à 07:21
- lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Pourquoi une fonction ? Parce que ça me plait bien et que je peux le faire ^^ ; Après, que les fonctions (j'en ai plusieurs dans ce fichier) se chargent à chaque démarrage de bash ne me dérange pas mais libre à chacun d'utiliser un script placé ailleurs.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2113 Le 10/04/2026, à 11:48
- iznobe

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour , pour chrooter , je fais " juste " :
sudo mount -v /dev/nvme0n1p10 /mnt
sudo arch-chroot /mnt et pis c' est tout ![]()
Dernière modification par iznobe (Le 10/04/2026, à 11:49)
En ligne
#2114 Le 12/04/2026, à 10:15
- Robert_75012
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour,
1. A l'adresse de lynn :
Merci pour cette fonction 'chrootme()'
A la fin de cette fonction (lignes 219 et ss.), quand il s'agit du "Nettoyage des bind mounts", y a-t-il une raison à utiliser une boucle for pour tout démonter, au lieu d'utiliser l'option '--recursive' de umount ?
En revanche, n'y a-t-il pas un risque à utiliser immédiatement 'umount --lazy', au lieu d'y aller doucement ?
Pour ma part, j'aurais bien vu :
umount --verbose --recursive (...),
puis en cas d'échec :
umount --verbose --recursive --force (...),
et enfin, si ça bouge encore :
umount --verbose --recursive --lazy (...),
2. A l'adresse de iznobe :
Merci ; je découvre le cht'it script d'ArchLinux 'arch-chroot'.
Je suis allé voir dans ses entrailles ; c'est, en effet, une boîte noire, qui fait le boulot, mais qui ne dit pas ce qu'il fait, "c'est un taiseux".
On y trouve une astuce, façon 'œuf de Christophe Colomb' :
On sait que d'ordinaire, dans un chroot pour accéder à internet et traduire les noms de domaine ('DNS resolution'), on fait :
cp -v /etc/resolv.conf /mnt/$Partition/etc/resolv.confCopier le fichier 'resolv.conf' marche bien dans la majorité des cas, mais pas dans une distribution Fedora et autres, où 'resolv.conf' n'est pas un vrai fichier "en dur" mais est un lien symbolique.
'arch-chroot', ne copie pas, mais fait un 'mount --bind' de /etc/resolv.conf sur ce lien symbolique (cf. ligne 159 du script) ; cela devient en substance :
mount -v -o bind /etc/resolv.conf /mnt/$Partition/etc/resolv.confJe modifierai en ce sens mon propre script "chrooter".
Robert
Site Internet :
https://ermaia.copro212-75012.fr/Inform … tique.html
Hors ligne
#2115 Le 12/04/2026, à 10:55
- iznobe

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour Robert , oui , à ce niveau là , le arch-chroot script est bien plus robuste . c ' est pour ça que je me suis intéressé de prêt à celui-ci , surtout dans le cadre de dépannage sur le forum , où l ' accès internet est primordial .
je ne vois pas trop l' interet de re écrire un script qui marche vraiment trés bien , et pour ma part , je n' ai pas besoin qu ' il soit verbeux ![]()
En ligne
#2116 Le 12/04/2026, à 12:33
- lynn

Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour,
@Robert_75012 @Watael
Une petite modification qui supprime une fonction dont on peut se passer et l'utilisation de l'option --recursive plutôt qu'une bloucle et l'option --lazy si échec de démontage normal. Après, c'est du virtuel qui est monté, donc il n'y a pas trop de risque à utiliser --lazy.
Copier le fichier 'resolv.conf' marche bien dans la majorité des cas, mais pas dans une distribution Fedora et autres, où 'resolv.conf' n'est pas un vrai fichier "en dur" mais est un lien symbolique.
Je peux t'assurer que ça fonctionne très bien pour Fedora ainsi que pour l'ensemble des distributions ci dessous.
chrootme
Sélectionnez le système à chrooter (ou tapez 'q' pour quitter) :
01) Arch Linux
02) CachyOS
03) EndeavourOS
04) Fedora Linux 43 (Workstation Edition)
05) Kali GNU/Linux Rolling
06) Linux Mint 22.3
07) Manjaro Linux
08) openSUSE Tumbleweed
09) Ubuntu 24.04.4 LTS
10) Ubuntu Resolute Raccoon (development branch)
#? 4
Chroot target: /mnt/fedora
Bind mount: /dev → /mnt/fedora/dev
Bind mount: /dev/pts → /mnt/fedora/dev/pts
Bind mount: /proc → /mnt/fedora/proc
Bind mount: /sys → /mnt/fedora/sys
Bind mount: /run → /mnt/fedora/run
Copie de /etc/resolv.conf → /mnt/fedora/etc/resolv.conf
Entrée dans le chroot : /mnt/fedora
Tapez 'exit' pour sortir et nettoyer automatiquement
root@Ubuntu-24-04:/# dnf update
Mise à jour et chargement des dépôts:
RPM Fusion for Fedora 43 - Nonfree - Steam 100% | 2.5 KiB/s | 8.3 KiB | 00m03s
RPM Fusion for Fedora 43 - Nonfree - NVIDIA Driver 100% | 2.8 KiB/s | 8.6 KiB | 00m03s
google-chrome 100% | 799.0 B/s | 1.3 KiB | 00m02s
Fedora 43 - x86_64 - Test Updates 100% | 4.8 KiB/s | 14.7 KiB | 00m03s
Copr repo for PyCharm owned by phracek 100% | 1.3 KiB/s | 2.1 KiB | 00m02s
Fedora 43 - x86_64 - Updates 100% | 7.5 KiB/s | 17.5 KiB | 00m02s
Dépôts chargés.
Paquet Architecture Version Dépôt Taille
Mise à jour de:
NetworkManager-ssh x86_64 1.4.4-1.fc43 updates-testing 230.6 KiB
remplacement de NetworkManager-ssh x86_64 1.4.3-1.fc43 updates-testing 226.6 KiB
NetworkManager-ssh-gnome x86_64 1.4.4-1.fc43 updates-testing 173.2 KiB
remplacement de NetworkManager-ssh-gnome x86_64 1.4.3-1.fc43 updates-testing 173.2 KiB
NetworkManager-ssh-selinux x86_64 1.4.4-1.fc43 updates-testing 18.6 KiB
remplacement de NetworkManager-ssh-selinux x86_64 1.4.3-1.fc43 updates-testing 18.6 KiB
aardvark-dns x86_64 2:1.17.1-1.fc43 updates-testing 2.3 MiB
remplacement de aardvark-dns x86_64 2:1.17.0-1.fc43 updates 2.4 MiB
bind-libs x86_64 32:9.18.48-1.fc43 updates-testing 3.6 MiB
remplacement de bind-libs x86_64 32:9.18.47-1.fc43 updates 3.6 MiB
bind-utils x86_64 32:9.18.48-1.fc43 updates-testing 665.2 KiB
remplacement de bind-utils x86_64 32:9.18.47-1.fc43 updates 665.2 KiB
binutils x86_64 2.45.1-5.fc43 updates-testing 27.3 MiB
remplacement de binutils x86_64 2.45.1-4.fc43 updates 27.3 MiB
cockpit-bridge noarch 360-1.fc43 updates 2.1 MiB
remplacement de cockpit-bridge noarch 359-1.fc43 updates 2.1 MiB
cockpit-storaged noarch 360-1.fc43 updates 851.4 KiB
remplacement de cockpit-storaged noarch 359-1.fc43 updates 851.4 KiB
cockpit-system noarch 360-1.fc43 updates 3.1 MiB
remplacement de cockpit-system noarch 359-1.fc43 updates 3.1 MiB
cockpit-ws x86_64 360-1.fc43 updates 1.9 MiB
remplacement de cockpit-ws x86_64 359-1.fc43 updates 1.9 MiB
cockpit-ws-selinux x86_64 360-1.fc43 updates 44.9 KiB
remplacement de cockpit-ws-selinux x86_64 359-1.fc43 updates 44.9 KiB
edk2-ovmf noarch 20260213-3.fc43 updates-testing 45.2 MiB
remplacement de edk2-ovmf noarch 20260213-2.fc43 updates 45.2 MiB
edk2-shell-x64 noarch 20260213-3.fc43 updates-testing 1.1 MiB
remplacement de edk2-shell-x64 noarch 20260213-2.fc43 updates 1.1 MiB
firefox x86_64 149.0.2-1.fc43 updates 267.4 MiB
remplacement de firefox x86_64 149.0-4.fc43 updates 267.1 MiB
firefox-langpacks x86_64 149.0.2-1.fc43 updates 42.4 MiB
remplacement de firefox-langpacks x86_64 149.0-4.fc43 updates 42.3 MiB
flatpak x86_64 1.16.5-1.fc43 updates-testing 7.4 MiB
remplacement de flatpak x86_64 1.16.3-1.fc43 updates 7.3 MiB
flatpak-libs x86_64 1.16.5-1.fc43 updates-testing 1.1 MiB
remplacement de flatpak-libs x86_64 1.16.3-1.fc43 updates 1.0 MiB
flatpak-selinux noarch 1.16.5-1.fc43 updates-testing 12.7 KiB
remplacement de flatpak-selinux noarch 1.16.3-1.fc43 updates 12.7 KiB
flatpak-session-helper x86_64 1.16.5-1.fc43 updates-testing 99.2 KiB
remplacement de flatpak-session-helper x86_64 1.16.3-1.fc43 updates 99.2 KiB
glibc x86_64 2.42-11.fc43 updates-testing 6.7 MiB
remplacement de glibc x86_64 2.42-10.fc43 updates 6.7 MiB
glibc-all-langpacks x86_64 2.42-11.fc43 updates-testing 226.9 MiB
remplacement de glibc-all-langpacks x86_64 2.42-10.fc43 updates 226.9 MiB
glibc-common x86_64 2.42-11.fc43 updates-testing 1.0 MiB
remplacement de glibc-common x86_64 2.42-10.fc43 updates 1.0 MiB
glibc-gconv-extra x86_64 2.42-11.fc43 updates-testing 7.2 MiB
remplacement de glibc-gconv-extra x86_64 2.42-10.fc43 updates 7.2 MiB
grub2-common noarch 1:2.12-43.fc43 updates 6.1 MiB
remplacement de grub2-common noarch 1:2.12-42.fc43 updates-testing 6.1 MiB
grub2-efi-ia32 x86_64 1:2.12-43.fc43 updates 5.2 MiB
remplacement de grub2-efi-ia32 x86_64 1:2.12-42.fc43 updates-testing 5.2 MiB
grub2-efi-ia32-cdboot x86_64 1:2.12-43.fc43 updates 5.2 MiB
remplacement de grub2-efi-ia32-cdboot x86_64 1:2.12-42.fc43 updates-testing 5.2 MiB
grub2-efi-ia32-modules noarch 1:2.12-43.fc43 updates 3.7 MiB
remplacement de grub2-efi-ia32-modules noarch 1:2.12-42.fc43 updates-testing 3.7 MiB
grub2-efi-x64 x86_64 1:2.12-43.fc43 updates 6.1 MiB
remplacement de grub2-efi-x64 x86_64 1:2.12-42.fc43 updates-testing 6.1 MiB
grub2-efi-x64-cdboot x86_64 1:2.12-43.fc43 updates 6.1 MiB
remplacement de grub2-efi-x64-cdboot x86_64 1:2.12-42.fc43 updates-testing 6.1 MiB
grub2-efi-x64-modules noarch 1:2.12-43.fc43 updates 5.5 MiB
remplacement de grub2-efi-x64-modules noarch 1:2.12-42.fc43 updates-testing 5.5 MiB
grub2-pc x86_64 1:2.12-43.fc43 updates 31.0 B
remplacement de grub2-pc x86_64 1:2.12-42.fc43 updates-testing 31.0 B
grub2-pc-modules noarch 1:2.12-43.fc43 updates 3.2 MiB
remplacement de grub2-pc-modules noarch 1:2.12-42.fc43 updates-testing 3.2 MiB
grub2-tools x86_64 1:2.12-43.fc43 updates 7.7 MiB
remplacement de grub2-tools x86_64 1:2.12-42.fc43 updates-testing 7.7 MiB
grub2-tools-efi x86_64 1:2.12-43.fc43 updates 2.5 MiB
remplacement de grub2-tools-efi x86_64 1:2.12-42.fc43 updates-testing 2.5 MiB
grub2-tools-extra x86_64 1:2.12-43.fc43 updates 5.0 MiB
remplacement de grub2-tools-extra x86_64 1:2.12-42.fc43 updates-testing 5.0 MiB
grub2-tools-minimal x86_64 1:2.12-43.fc43 updates 3.0 MiB
remplacement de grub2-tools-minimal x86_64 1:2.12-42.fc43 updates-testing 3.0 MiB
ibus-typing-booster noarch 2.30.6-1.fc43 updates-testing 9.0 MiB
remplacement de ibus-typing-booster noarch 2.30.4-1.fc43 updates 9.0 MiB
kdump-utils x86_64 1.0.61-1.fc43 updates-testing 294.6 KiB
remplacement de kdump-utils x86_64 1.0.60-1.fc43 updates-testing 294.7 KiB
libcap x86_64 2.76-4.fc43 updates-testing 209.1 KiB
remplacement de libcap x86_64 2.76-3.fc43 0e44b8838a06423 209.1 KiB
libcap-ng x86_64 0.9.3-1.fc43 updates-testing 69.0 KiB
remplacement de libcap-ng x86_64 0.9.2-1.fc43 updates 65.0 KiB
libcap-ng-python3 x86_64 0.9.3-1.fc43 updates-testing 87.7 KiB
remplacement de libcap-ng-python3 x86_64 0.9.2-1.fc43 updates 86.7 KiB
libpng x86_64 2:1.6.56-1.fc43 updates-testing 241.8 KiB
remplacement de libpng x86_64 2:1.6.55-1.fc43 updates 241.7 KiB
selinux-policy noarch 43.6-1.fc43 updates 32.0 KiB
remplacement de selinux-policy noarch 43.4-2.fc43 updates 32.0 KiB
selinux-policy-targeted noarch 43.6-1.fc43 updates 18.6 MiB
remplacement de selinux-policy-targeted noarch 43.4-2.fc43 updates 18.5 MiB
xdg-desktop-portal x86_64 1.20.4-1.fc43 updates-testing 1.9 MiB
remplacement de xdg-desktop-portal x86_64 1.20.3-2.fc43 0e44b8838a06423 1.8 MiB
Résumé de la transaction:
Mise à jour: 46 paquets
Remplacement : 46 paquets
La taille totale des paquets entrants est de 197 MiB. Un téléchargement de 197 MiB est nécessaire.
Après cette opération, 637 KiB supplémentaires seront utilisés (+739 MiB, -738 MiB).
Is this ok [y/N]: «C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne