J'utilise
mount -o bind /some/directory/here /foo/bar
Je veux vérifier /foo/bar
si avec un script bash, et voir si il a été monté? Sinon, appelez la commande de montage ci-dessus, sinon faites autre chose. Comment puis-je faire ceci?
CentOS est le système d'exploitation.
L'exécution de la commande mount
sans arguments vous indiquera les montages actuels. A partir d'un script Shell, vous pouvez rechercher le point de montage avec grep
et une instruction if:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
Dans mon exemple, l'instruction if vérifie le code de sortie de grep
, qui indique s'il y a une correspondance. Puisque je ne veux pas que la sortie soit affichée quand il y a une correspondance, je la redirige vers /dev/null
.
Vous n'avez pas pris la peine de mentionner un O/S.
Ubuntu Linux 11.10 (et probablement les versions les plus récentes de Linux) ont la commande mountpoint
.
Voici un exemple sur l'un de mes serveurs:
$ mountpoint /Oracle
/Oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
En fait, dans votre cas, vous devriez pouvoir utiliser l'option -q
, comme ceci:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
J'espère que cela pourra aider.
Le manuel de mountpoint
dit que:
vérifie si le répertoire ou le fichier donné est mentionné dans le fichier/proc/self/mountinfo.
Le manuel de mount
dit que:
Le mode de liste est maintenu pour la compatibilité ascendante uniquement. Pour Une sortie plus robuste et personnalisable utilise findmnt (8), en particulier dans votre les scripts.
Donc, la commande correcte à utiliser est findmnt
, qui fait elle-même partie du paquet util-linux
et, selon le manuel:
est capable de rechercher dans/etc/fstab,/etc/mtab ou/proc/self/mountinfo
Donc, il recherche plus de choses que mountpoint
. Il fournit également l'option pratique:
-M, --mountpoint chemin
Définissez explicitement le fichier ou le répertoire du point de montage. Voir aussi --target.
En résumé, pour vérifier si un répertoire est monté avec bash, vous pouvez utiliser:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Exemple:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
Sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
Sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
Ma solution:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Exemple:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Pour La réponse de Mark J. Bobak , mountpoint
ne fonctionne pas si monter avec l'option bind
dans un système de fichiers différent.
Pour la réponse de Christopher Neylan , il n'est pas nécessaire de rediriger la sortie de grep vers/dev/null, utilisez simplement grep -q
à la place.
Le plus important, canonisez le chemin en utilisant readlink -f $mypath
:
/path/to/dir/
fin avec barre oblique inverse, le chemin dans la sortie /proc/mounts
ou mount
est /path/to/dir
/var/run/
est le lien symbolique de /run/
. Par conséquent, si vous montez une liaison pour /var/run/mypath
et que vous vérifiez si elle est montée, elle affichera le code /run/mypath
dans /proc/mounts
.Une autre solution propre est comme ça:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
Bien sûr, "écho quelque chose" peut être remplacé par tout ce que vous devez faire pour chaque cas.