Script bash "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 test ! -x /usr/bin/montreFST.sh then echo; echo "___ Le fichier /usr/bin/montreFST.sh n'existe pas ou n'est pas exécutable___"; echo echo -e "$ROUGE" "Erreur fatale" "$NORMAL" exit 1 fi # Nécessite 'FSARCHIVER' if test ! -e /usr/bin/fsarchiver -a ! -e /usr/sbin/fsarchiver then echo; echo "___ Le fichier 'FSARCHIVER' n'existe pas (j'ai cherché dans '/usr/bin/' et dans '/usr/sbin/') --> Installer le paquet___"; echo echo -e "$ROUGE" "Erreur fatale" "$NORMAL" # exit 1 fi # Nécessite 'DIALOG' if test ! -e /usr/bin/dialog then echo; echo "___ Le fichier 'DIALOG' n'existe pas (j'ai cherché dans '/usr/bin/') --> 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.2.1 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 test ! -e /usr/bin/gnome-terminal then echo "Le terminal 'GNOME-TERMINAL' n'est pas installé" else Xterminal="GNOME-TERMINAL" echo "X-TERMINAL = "$Xterminal fi if test ! -e /usr/bin/xfce4-terminal 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="" if echo $* | grep --ignore-case --no-messages --quiet --regexp=--read-only --regexp=-r then Ecriture="-r" fi if echo $* | grep --ignore-case --no-messages --quiet --regexp=--chroot --regexp=-c then AppelChroot="--chroot" fi if echo $* | grep --ignore-case --no-messages --quiet --regexp=--detail --regexp=-d then Detailler="--detail" fi # #" substr($5,2,3) # Récupérer la liste des partitions existantes (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 (2 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 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" # # 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 for index in $(seq 1 $NbrLignes); do if test $index = `cat -n /tmp/PartitionType.txt | grep -wo $index` then cat -n /tmp/PartitionType.txt | grep -w $index > /tmp/PartitionType-2.txt Partition=`cut -c8-12 /tmp/PartitionType-2.txt` Type=`cut -c13- /tmp/PartitionType-2.txt` mount -v $Ecriture -t $Type /dev/$Partition /mnt/$Partition fi if [[ "$Ecriture" == "-r" ]] then echo $Partition" montée en lecture seule" fi done # echo echo "xxxx" echo # # Selon l'option choisie : if [[ "$AppelChroot" == "--chroot" ]] then echo $Partition > /tmp/Partition.txt sleep 2 /usr/bin/chrooter fi # echo -e "$NORMAL" exit 0 # #-----------------------------FIN------------------------------------ #
Copier
Capture d'écran - Script "MONTER"