# Comment tester la présence valide d'une partition

**URL:** <https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152 "2016-02-21T02:54:19Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/1 "2016-02-21T02:54:19Z")

</div>

J’ai décidé de faire un script bash pour automatiser mes MAJs hebdomadaires.  
Je veux essayer de le faire seul, pour apprendre et je ne tiens pas à ce que vous m’aidiez plus que ce que je demande.  
Ma première question :

Mes sauvegardes sont faites sur un DDext dans la partition ‘sdb9’.  
Ce DDext n’est pas allumé en permanence (auto-alimenté).  
Il m’arrive d’essayer de le monter sans l’avoir allumé au préalable et, bien sûr, il n’obéit pas.  
Je voudrais donc commencer mon script par ce test de reconnaissance.  
Problème ! je ne sais pas comment coder cette condition : si sdb9 est opérationnel  
S’il s’agissait de tester l’existence d’un fichier, je saurais mais une partition ?  
Je sais que tout est ‘fichier’ sous linux mais je ne pense pas que /dev/sdb9 suffise ?

[code]ddext=/dev/sdb9

if [-e $ddext]  
then  
echo “OK”   
else  
echo "Le DDext ne répond pas"  
fi[/code]

EDIT :  
J’en reviens pas : ça fonctionne ![:030](https://www.debian-fr.org/uploads/default/original/1X/65b1b73704eec538091c0e1d04a633b3840a284f.gif "picole")

Ça me permet de poser une autre question :  
Je n’ai pas besoin de réponse quand c’est OK, quoi entrer à la place, ligne 5 ?

---

<div class="post-metadata">

**Author:** ![LAV-FRED](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/da6949/32.png) [@LAV-FRED](https://www.debian-fr.org/u/LAV-FRED)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/2 "2016-02-21T02:54:19Z")

</div>

Je pense en pseudo code :  
si ta condition n’est pas vraie, affiche le message d’erreur, et pas de else…

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/3 "2016-02-21T02:54:19Z")

</div>

Ben oui, je viens d’y penser en mangeant.  
Je vais même tourner la condition en négatif et ça devrait aller  
‹&nbsp;essai&nbsp;› et je reviens en EDIT

EDIT : ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK") et c’est franchement plus simple

[code]ddext=/dev/sdb9

if [! -e $ddext]  
then  
echo «&nbsp;Le DDext ne répond pas&nbsp;»  
fi[/code]

EDIT 2 :  
J’ai relu ta proposition LAV-FRED et en fait, je crois que c’est ce que tu écrivais ?

---

<div class="post-metadata">

**Author:** ![LAV-FRED](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/da6949/32.png) [@LAV-FRED](https://www.debian-fr.org/u/LAV-FRED)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/4 "2016-02-21T02:54:20Z")

</div>

Oui c’est bien ce que j’écrivais (peut être mal formulé mais c’est ça) 😃

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/5 "2016-02-21T02:54:22Z")

</div>

Encore une question et je vous propose mon travail pour correction :  
Deux commandes qui doivent être exécutées l’une après l’autre.  
La première prends un certain temps (sauvegarde rsync de /)  
Puis-je écrire mes deux commandes à la suite l’une de l’autre sur deux lignes différentes (elles sont longues et c’est pour plus de clarté) ?  
La seconde sera automatiquement exécutée lorsque l’exécution de la première sera terminée ?

---

<div class="post-metadata">

**Author:** ![LAV-FRED](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/da6949/32.png) [@LAV-FRED](https://www.debian-fr.org/u/LAV-FRED)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/6 "2016-02-21T02:54:23Z")

</div>

Les commandes d’un script bash écrites à la suites les unes des autres ou avec un retour à la ligne sont exécutées dès que la commande précédente se termine, peu importe le temps d’exécution de celle-ci.  
Si tu veux que ton script continu sans attendre la fin d’une commande tu dois placer un et commercial “&” à la fin de celle-ci (comme ds le terminal en fait),  
tu peux carrément la détacher de tout processus parent en mettant nohup devant (ce qui te permet de te délogguer et ta commande continue de tourner.

Voilà voilà…

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/7 "2016-02-21T02:54:24Z")

</div>

bonsoir,

l’inconvénient de nohup, c’est que toute sortie standard est redirigée vers le fichier “nohup.out” du dossier courant. on peut donc se retrouver avec des fichiers polluants rapidement le dd.

pour contourner ce léger problème, il y a la builtin “disown” qui fait le même taf.

exemple dans un script :

```auto
commande_qui_doit_être_indépendante &
disown %+
```

précision : %+ permet de référencer le dernier process mis en backgroup. cf [ici](http://www.gnu.org/software/bash/manual/bashref.html#Job-Control).

exemple en console (ça fonctionne en ssh mais il est conseillé d’utiliser screen car cela permet de récupérer le job après une déconnexion) :

```auto
commande_qui_doit_être_indépendante &
disown -h %+
```

l’option -h permet de conserver le job dans la liste des jobs (mais ce n’est pas obligé, c’est une habitude que j’ai).

si le & n’a pas été utilisé - ou a été oublié - il faut utiliser la séquence CTRL+z pour stopper le process puis d’utiliser la builtin “bg” pour mettre en background (son pendant est “fg” pour foreground)

une autre builtin intéressante est wait. bien pratique lors de traitements asynchrones.

mais tout cela est décris sur la page que j’ai donné en lien.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/8 "2016-02-21T02:54:24Z")

</div>

Merci des explications.  
une petite dernière :  
je voudrais insérer deux lignes vides à la fin de mon script, pour bien faire ressortir un pense-bête.  
1/ J’ai fait ce qui suit mais je suppose que ce n’est pas très élégant, y-a-t-il mieux que ces echo “” ?  
2/ Éventuellement, peut-on augmenter la grosseur de la police ou/et la mettre en couleur ?

`echo ""
echo ""
MA LIGNE D'ALERTE (PENSE-BETE)
echo ""
echo ""
exit # fin du script`

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/9 "2016-02-21T02:54:24Z")

</div>

pour le echo “” regarde [ici](http://www.debian-fr.org/script-bash-de-configuration-reseau-t34256.html#p347694)

pour les couleurs, tu peux utiliser les séquences [d’échapement](http://www.faqs.org/docs/abs/HTML/colorizing.html) mais également l’instruction [tput](http://www.commentcamarche.net/faq/6458-la-commande-tput) avec la commande setaf.

à toi d’utiliser ce qu’il te convient de mieux :

- si tu dois changer au sein d’un même “echo”, il est préférable d’utiliser les séquences

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/10 "2016-02-21T02:54:26Z")

</div>

Impec, autant pour les lignes vides que pour les caractères en couleur. Super ce second lien ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")  
 ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/11 "2016-02-21T02:54:27Z")

</div>

Une commande pour vider complètement la corbeille ?

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/12 "2016-02-21T02:54:28Z")

</div>

> [@ricardo](#):
>
> Une commande pour vider complètement la corbeille ?

`rm -r "~/.local/share/Trash/"` ?

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/13 "2016-02-21T02:54:30Z")

</div>

Ben oui, ça je comprends mais le problème (j’ai ouvert un fil dans SD) c’est qu’il y a un wagon de fichiers dans ce dossier et j’ai peur qu’ils ne soient pas tous à virer ?  
Fais l’expérience d’aller voir dans ce dossier Trash.  
Je vais faire un essai en les sauvegardant auparavant .  
Je donnerai la réponse ensuite.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/14 "2016-02-21T02:54:30Z")

</div>

[quote=“Totor”] [d’échapement](http://www.faqs.org/docs/abs/HTML/colorizing.html) mais également l’instruction [tput](http://www.commentcamarche.net/faq/6458-la-commande-tput) avec la commande setaf.  
[/quote]

Et d’où viens ce setaf, que je n’ai trouvé ni dans “man tput” ni avec “man bash”, ni avec “apt-cache search setaf”, ni avec set+, et sans autre explication ni avec avec golito ni avec les liens cités ?

* * *

Exemple ( sans setup ): script d’affichage du tableau des couleurs avec leur code d’échappement:

[code]clear  
echo $0  
echo " exemple: PS1=’\033[47;34m … \033[0m’ =\> prompt … bleu sur fond gris"  
esc="\033[“  
echo -n " 40 41 42 43"  
echo " 44 45 46 47 “  
for fore in 30 31 32 33 34 35 36 37; do  
line1=”$fore m “  
line2=”$fore ;1m “  
for back in 40 41 42 43 44 45 46 47; do  
line1=”${line1}${esc}${back};${fore}m Normal ${esc}0m"  
line2=”${line2}${esc}${back};${fore};1m Bold ${esc}0m"  
done  
echo “$line1” ; echo “$line2”;  
done  
echo "code esc: ‘‘033’[’ réinitialiser: esc0m "  
echo " Les codes couleur doivent être encadrés par [et] "  
echo[  
/code]

* * *

Je reviens aussi sur la question des fins de ligne posée au début de ce fil, même si la suite a été intéressante.  
Je crois que Ricardo demandait l’effet d’une fin de ligne en bash

La fin de ligne est la fin d’une commande, équivalente au ; (point-virgule).

En bash, pour écrire une seule commande sur plusieurs lignes, comme rsync avec des options et des longs noms de fichier, il faut échapper la fin de ligne avec un ‘[b][/b]’ (et surtout rien, aucun blanc derrière le ‘[b][/b]’ )  
Une ligne de commande (ou de script ) peut être très longue ( au moins 511 caractères je crois, sans doute plus ). L’utilité du fractionnement d’une commande est donc uniquement sa lisibilité, ce qui n’est pas rien !

C’est une des différences avec Perl, pour qui le retour à la ligne ne signifie rien, et le point-virgule est obligatoire entre chaque commande ( sauf fin de bloc ou de programme ).

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/15 "2016-02-21T02:54:30Z")

</div>

[quote=“ricardo”]Ben oui, ça je comprends mais le problème (j’ai ouvert un fil dans SD) c’est qu’il y a un wagon de fichiers dans ce dossier et j’ai peur qu’ils ne soient pas tous à virer ?  
Fais l’expérience d’aller voir dans ce dossier Trash.  
Je vais faire un essai en les sauvegardant auparavant .  
Je donnerai la réponse ensuite.[/quote]

Crée plutôt un utilisateur de test, et fait un test sous cet utilisateur, après avoir créé et viré plusieurs fois des fichiers, des répertoires. Sans être un garantie absolue, ça te montrera peut-être quelque-chose ?

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/16 "2016-02-21T02:54:30Z")

</div>

En fait, les gros dossiers plein de sous-dossiers, pleins eux-mêmes, sont des “expunged” donc : “effacés”.  
Je vais tester ça bientôt.  
Merci pour le complément d’info au sujet des lignes longues.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/17 "2016-02-21T02:54:30Z")

</div>

Je reviens aussi sur la 1ère question:  
pour tester si un répertoire est monté: `mount`

Par exemple, extrait correspondant du script sur lequel j’ai ramé avant toi:

[code]## DESTINATION:  
VOL\_DESTINATION=’/home/BKP’

## VOL\_DESTINATION est-il déjà monté ?

MONTE=$( mount | egrep $VOL\_DESTINATION );  
[/code]

Ici on suppose que /home/BKP est dans /etc/fstab

Tu peux aussi faire egrep “/dev/volume” au lieu de egrep '/point/de/montage’  
Si tu mets les 2 versions de egrep en série, tu assures ( version paranoïaque, peut-être utile avec un cron )

$MONTE est vide = faux ou non-vide = vrai, ce qui fait un test très simple à écrire.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/18 "2016-02-21T02:54:32Z")

</div>

C’est en effet une autre solution mais celle que j’ai employée est valable par défaut, la ligne du dessus (qu’on ne voit pas ici) monte la partition.  
les lignes de dessous n’envoient l’alerte que s’il y a un oubli de connexion, ce que je cherchais

[code]ddext=/dev/sdb9

if [! -e $ddext]  
then  
echo "Le DDext ne répond pas"  
fi[/code]

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:54 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/19 "2016-02-21T02:54:35Z")

</div>

Bonsoir,

> [@josephtux](#):
>
> Et d’où viens ce setaf, que je n’ai trouvé ni dans «&nbsp;man tput&nbsp;» ni avec «&nbsp;man bash&nbsp;», ni avec «&nbsp;apt-cache search setaf&nbsp;», ni avec set+, et sans autre explication ni avec avec golito ni avec les liens cités ?

pourtant tout est indiqué dans le man de tput :

> [@man tput](#):
>
> […]The tput utility uses the terminfo database to make the values of terminal-dependent capabilities[…]  
> Before using a value returned on the standard output, the application should test the exit code (e.g., $?, see sh(1)) to be sure it is 0. (See the EXIT CODES  
> and DIAGNOSTICS sections.) For a complete list of capabilities and the capname associated with each, see terminfo(5).  
> […]

et lorsque l’on consulte le man de terminfo, section 5 :

> [@man 5 terminfo](#):
>
> […]setaf[..]Set foreground color to #1, using ANSI escape[…]

Pour l’avoir consulté dans le cadre de cette [demande](http://forum.ubuntu-fr.org/viewtopic.php?pid=3830859), j’avoue que ce man est très indigeste !

[quote=«&nbsp;josephtux&nbsp;»]Je reviens aussi sur la 1ère question:  
pour tester si un répertoire est monté: `mount`  
[/quote]

Oui à 99,9% des cas 😉  
Je m’explique : mount (ainsi que le fichier /etc/mtab) retourne l’ensemble des filesystems montés à condition qu’ils n’aient pas été montés avec l’option -n (ce qui est extrêmement rare).

> [@man mount](#):
>
> […]When the proc filesystem is mounted (say at /proc), the files /etc/mtab and /proc/mounts have very similar contents. The former has somewhat more  
> information, such as the mount options used, but is not necessarily up-to-date (cf. the -n option below)[…]  
> -n, --no-mtab  
> Mount without writing in /etc/mtab. This is necessary for example when /etc is on a read-only filesystem.

C’est pourquoi j’exploite df de la sorte :

```auto
#!/bin/bash
mountPoint="$1"
if { read; read infos ; } < <(df "${mountPoint}" 2>/dev/null) && ["${infos}" != "${infos%${mountPoint%/}}"]
then
  echo "${mountPoint} est monté"
else
  echo "${mountPoint} n'est pas monté"
fi
```

---

<div class="post-metadata">

**Author:** ![Mitsu](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/f475e1/32.png) [@Mitsu](https://www.debian-fr.org/u/Mitsu)\
**Post date:** [Février 21, 2016, 3:09 UTC](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152/20 "2016-02-21T03:09:38Z")

</div>

Je déterre un peu le sujet pour apporter un morceau de code un peu différent.  
Plutôt que de checker /dev/sdxx ou le point de montage, je passe par l’uuid  
Pourquoi ? amusez-vous à plugger un DD usb, le monter, le couper électriquement (cas d’une panne électrique), de le rallumer  
il ne sera plus en /dev/sdc par exemple mais /dev/sdd  
Chose qui me posait souci chez un client.  
Avec l’uuid, ça passe bien mieux je trouve 🙂

ça donne qlqch comme ça :

[code]  
#remplacer par l’uuid correspondant au bon disque  
DISK=“00000000-0000-0000-0000-000000000000”

MOUNTPOINT="/mnt"

if mount -U ${DISK} ${MOUNTPOINT} ; then  
printf “$(date +%d-%m-%Y\ %Hh%M) - Montage du disque reussi.\n”  
…  
action  
…  
else  
printf "$(date +%d-%m-%Y\ %Hh%M) - Echec de montage du disque.\n"  
exit 0  
fi[/code]  
…et bien évidement on umount en fin de script

Si le disque est connecté et utilisable, alors on le monte dans MOUNTPOINT  
Si cela échoue pour une quelconque raison que ce soit (partition invalide, disque non connecté, etc.), alors on arrête tout  
Chez certains clients, j’ai même poussé le vice en rajoutant en cas d’échec l’écriture de la sortie d’un “ls -alh /dev/disk/by-uuid/” et d’un “blkid” dans un fichier log

[Page suivante](https://www.debian-fr.org/t/comment-tester-la-presence-valide-dune-partition/33152.md?page=2)
