GNU/Linux >> Tutoriels Linux >  >> Linux

Vérifiez si le répertoire est monté avec bash

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 le mountpoint commande.

Voici un exemple sur 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 le -q option, comme ceci :

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar

J'espère que ça aide.


Le manuel de mountpoint dit qu'il :

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 uniquement pour la compatibilité descendante. Pour une sortie plus robuste et personnalisable, utilisez findmnt(8), en particulier dans vos scripts.

Donc la commande correcte à utiliser est findmnt , qui fait lui-même partie du util-linux paquet et, selon le manuel :

est capable de rechercher dans /etc/fstab, /etc/mtab ou /proc/self/mountinfo

Donc, il recherche en fait 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 montage avec bind option 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 :

  • Si vous vérifiez le chemin tel que /path/to/dir/ se termine par une barre oblique inverse, le chemin en /proc/mounts ou mount la sortie est /path/to/dir
  • Dans la plupart des versions Linux, /var/run/ est le lien symbolique de /run/ , donc si vous montez bind pour /var/run/mypath et vérifiez s'il est monté, il s'affichera sous la forme /run/mypath en /proc/mounts .

Exécuter le mount La commande sans arguments vous indiquera les montages actuels. À partir d'un script shell, vous pouvez vérifier 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 eu une correspondance. Comme je ne veux pas que la sortie s'affiche lorsqu'il y a une correspondance, je la redirige vers /dev/null .


Linux
  1. Comment vérifier si un répertoire particulier est monté ? ?

  2. Bash -c avec des paramètres positionnels ?

  3. Fichiers Cat avec répertoire ?

  4. Comment vérifier si une partition est montée en tant que « noexec » ?

  5. Vérifiez combien de temps un script bash prend pour s'exécuter avec la commande Time

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Commande de CD Linux avec exemples

Monter un dossier distant avec sshfs

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment utiliser SSHFS Mount avec des répertoires distants via SSH