Supposons que vous souhaitiez tester si/mnt/disk est un point de montage dans un script Shell. Comment est-ce que tu fais ça?
Je découvre que sur mon Fedora 7, il existe une commande de point de montage.
De l'homme point de montage:
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
/bin/mountpoint [-q] [-d] /path/to/directory
/bin/mountpoint -x /dev/device
Apparemment, cela vient avec le paquet sysvinit, je ne sais pas si cette commande est disponible sur d’autres systèmes.
[root@myhost~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17
Ne pas s'appuyer sur mount
, /etc/mtab
, /proc/mounts
, etc.:
if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
echo "$dir is mounted"
else
echo "$dir is not mounted"
fi
Lorsque $dir
est un point de montage, son numéro de périphérique est différent de celui de son répertoire parent.
L'avantage par rapport aux alternatives énumérées jusqu'à présent est que vous n'avez pas à analyser quoi que ce soit, et que c'est correct si dir=/some//path/../with///extra/components
.
L'inconvénient est qu'il ne marque pas /
en tant que point de montage. Eh bien, c'est assez facile à un cas spécial, mais quand même.
En utilisant GNU find
find <directory> -maxdepth 0 -printf "%D"
donnera le numéro de périphérique du répertoire. S'il diffère entre Le répertoire et son parent, vous avez un point de montage.
Ajouter /. sur le nom du répertoire si vous souhaitez que les liens symboliques vers différents systèmes de fichiers comptent comme points de montage (vous le voudrez toujours pour le parent).
Inconvénients: les utilisations GNU sont donc moins portables
Avantages: Indique les points de montage non enregistrés dans/etc/mtab.
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
...
fi
EDIT: utilisé l'idée de Bombe d'utiliser cut.
df $path_in_question | grep " $path_in_question$"
Ceci définira $?
à la fin.
for mountedPath in `mount | cut -d ' ' -f 3`; do
if [ "${mountedPath}" == "${wantedPath}" ]; then
exit 0
fi
done
exit 1
mount | awk '$3 == "/pa/th" {print $1}'
Vide si ce n'est pas un point de montage ^^
stat --printf '% m' montre le point de montage d'un fichier ou d'un répertoire donné.
realpath convertit les chemins relatifs en direct.
La comparaison des résultats des deux vous dira si un répertoire est un point de montage. stat est très portable. realpath moins, mais cela n’est nécessaire que si vous souhaitez vérifier les chemins relatifs.
Je ne sais pas comment portable point de montage est.
if [ "$(stat --printf '%m' "${DIR}")" = "$(realpath "${DIR}")" ]; then
echo "This directory is a mount point."
else
echo "This is not a mount point."
fi
Sans pour autant realpath:
if [ "${DIR}" = "$(stat --printf '%m' "${DIR}")" ]; then
echo "This directory is a mount point."
else
echo "This is not a mount point."
fi
Voici une variante avec "df -P" supposée portable:
mat@owiowi:/tmp$ f(){ df -P | awk '{ if($6 == "'$1'")print }' ; }
mat@owiowi:/tmp$ f /
/dev/mapper/lvm0-vol1 20642428 17141492 2452360 88% /
mat@owiowi:/tmp$ f /mnt
mat@owiowi:/tmp$ f /mnt/media
/dev/mapper/lvm0-media 41954040 34509868 7444172 83% /mnt/media