Sie haben sich nicht die Mühe gemacht, ein Betriebssystem zu erwähnen.
Ubuntu Linux 11.10 (und wahrscheinlich die aktuellsten Varianten von Linux) haben den mountpoint
Befehl.
Hier ist ein Beispiel auf einem meiner Server:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
Eigentlich sollten Sie in Ihrem Fall den -q
verwenden können Option, etwa so:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Hoffe das hilft.
Das Handbuch von mountpoint
sagt, dass es:
prüft, ob das angegebene Verzeichnis oder die angegebene Datei in der Datei /proc/self/mountinfo erwähnt wird.
Das Handbuch von mount
sagt das:
Der Auflistungsmodus wird nur aus Gründen der Abwärtskompatibilität beibehalten. Für robustere und anpassbare Ausgaben verwenden Sie findmnt(8), insbesondere in Ihren Skripten.
Der richtige zu verwendende Befehl ist also findmnt
, die selbst Teil von util-linux
ist Paket und laut Handbuch:
kann in /etc/fstab, /etc/mtab oder /proc/self/mountinfo
suchen
Es sucht also tatsächlich nach mehr Dingen als mountpoint
. Es bietet auch die praktische Option:
-M, --mountpoint Pfad
Definieren Sie explizit die Mountpoint-Datei oder das Verzeichnis. Siehe auch --target.
Zusammenfassend können Sie Folgendes verwenden, um zu überprüfen, ob ein Verzeichnis mit Bash gemountet ist:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
Beispiel:
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"
Meine Lösung:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
Beispiel:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Für die Antwort von Mark J. Bobak mountpoint
funktioniert nicht, wenn mount mit bind
Option in anderem Dateisystem.
Für die Antwort von Christopher Neylan ist es nicht erforderlich, die Ausgabe von grep nach /dev/null umzuleiten, verwenden Sie einfach grep -q
stattdessen.
Das Wichtigste ist, den Pfad zu kanonisieren, indem Sie readlink -f $mypath
verwenden :
- Wenn Sie Pfade wie
/path/to/dir/
überprüfen mit Backslash enden, der Pfad in/proc/mounts
odermount
Ausgabe ist/path/to/dir
- In den meisten Linux-Versionen
/var/run/
ist der symbolische Link von/run/
, wenn Sie also bind für/var/run/mypath
mounten und überprüfen Sie, ob es gemountet ist, es wird als/run/mypath
angezeigt in/proc/mounts
.
Ausführen von mount
Befehl ohne Argumente zeigt Ihnen die aktuellen Mounts an. Von einem Shell-Skript aus können Sie mit grep
nach dem Einhängepunkt suchen und eine if-Anweisung:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
In meinem Beispiel prüft die if-Anweisung den Exit-Code von grep
, was anzeigt, ob es eine Übereinstimmung gab. Da ich nicht möchte, dass die Ausgabe bei einer Übereinstimmung angezeigt wird, leite ich sie auf /dev/null
um .