Solution 1 :
Évitez d'utiliser /etc/mtab
car il peut être incohérent.
Éviter les tuyauteries mount
parce que ça n'a pas besoin d'être si compliqué.
Simplement :
if grep -qs '/mnt/foo ' /proc/mounts; then
echo "It's mounted."
else
echo "It's not mounted."
fi
(L'espace après le /mnt/foo
est d'éviter de faire correspondre par ex. /mnt/foo-bar
.)
Solution 2 :
if mountpoint -q /mnt/foo
then
echo "mounted"
else
echo "not mounted"
fi
ou
mountpoint -q /mnt/foo && echo "mounted" || echo "not mounted"
Solution 3 :
findmnt -rno SOURCE,TARGET "$1"
évite tous les problèmes dans les autres réponses. Il fait proprement le travail avec une seule commande.
Les autres approches présentent les inconvénients suivants :
grep -q
etgrep -s
sont une étape supplémentaire inutile et ne sont pas pris en charge partout./proc/\*
n'est pas pris en charge partout. (mountpoint
est également basé sur proc).mountinfo
est basé sur /proc/..cut -f3 -d' '
perturbe les espaces dans les noms de chemin- Analyse de montage L'espace blanc de est problématique. Sa page de manuel indique maintenant :
.. le mode de liste est maintenu uniquement pour la rétrocompatibilité.
Pour une sortie plus robuste et personnalisable, utilisez findmnt (8), notamment dans vos scripts.
Fonctions bash :
#These functions return exit codes: 0 = found, 1 = not found
isMounted () { findmnt -rno SOURCE,TARGET "$1" >/dev/null;} #path or device
isDevMounted () { findmnt -rno SOURCE "$1" >/dev/null;} #device only
isPathMounted() { findmnt -rno TARGET "$1" >/dev/null;} #path only
#where: -r = --raw, -n = --noheadings, -o = --output
Exemples d'utilisation :
if isPathMounted "/mnt/foo bar"; #Spaces in path names are ok.
then echo "path is mounted"
else echo "path is not mounted"
fi
if isDevMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
#Universal:
if isMounted "/mnt/foo bar";
then echo "device is mounted"
else echo "device is not mounted"
fi
if isMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
Solution 4 :
Un script comme celui-ci ne sera jamais portable. Un sale secret sous Unix est que seul le noyau sait où se trouvent les systèmes de fichiers, et à moins de choses comme /proc (non portable), il ne vous donnera jamais de réponse claire.
J'utilise généralement df pour découvrir quel est le point de montage d'un sous-répertoire et dans quel système de fichiers il se trouve.
Par exemple (nécessite un shell posix comme ash / AT&T ksh / bash / etc)
case $(df $mount)
in
$(df /)) echo $mount is not mounted ;;
*) echo $mount has a non-root filesystem mounted on it ;;
esac
Kinda vous donne des informations utiles.
Solution 5 :
Voici ce que j'utilise dans l'un de mes travaux cron de sauvegarde rsync. il vérifie si /backup est monté et essaie de le monter si ce n'est pas le cas (cela peut échouer car le disque se trouve dans une baie remplaçable à chaud et peut même ne pas être présent dans le système)
REMARQUE :ce qui suit ne fonctionne que sur Linux, car il greps /proc/mounts - une version plus portable exécuterait 'mount | grep /backup', comme dans la réponse de Matthew..
if ! grep -q /backup /proc/mounts ; then if ! mount /backup ; then echo "failed" exit 1 fi fi echo "suceeded." # do stuff here