Ich benutze
mount -o bind /some/directory/here /foo/bar
Ich möchte /foo/bar
zwar mit einem Bash-Skript überprüfen und sehen, ob es eingehängt wurde. Wenn nicht, rufen Sie den obigen Mount-Befehl auf, sonst machen Sie etwas anderes. Wie kann ich das machen?
CentOS ist das Betriebssystem.
Wenn Sie den Befehl mount
ohne Argumente ausführen, werden Ihnen die aktuellen Mounts angezeigt. Von einem Shell-Skript aus können Sie mit grep
und einer if-Anweisung nach dem Einhängepunkt suchen:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
In meinem Beispiel überprüft die if-Anweisung den Exit-Code von grep
, der angibt, ob eine Übereinstimmung vorliegt. Da ich nicht möchte, dass die Ausgabe bei Übereinstimmung angezeigt wird, leite ich sie an /dev/null
um.
Sie haben sich nicht die Mühe gemacht, einen O/S zu erwähnen.
Ubuntu Linux 11.10 (und wahrscheinlich die aktuellsten Linux-Varianten) haben den Befehl mountpoint
.
Hier ist ein Beispiel auf einem meiner Server:
$ mountpoint /Oracle
/Oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
In Ihrem Fall sollten Sie in der Lage sein, die -q
-Option wie folgt zu verwenden:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Hoffentlich hilft das.
Das Handbuch von mountpoint
sagt, dass es:
prüft, ob das angegebene Verzeichnis oder die angegebene Datei in der Datei/proc/self/mountinfo angegeben ist.
Das Handbuch von mount
sagt folgendes:
Der Auflistungsmodus wird nur aus Gründen der Abwärtskompatibilität beibehalten. Zum Robustere und anpassbare Ausgabe verwenden Sie findmnt (8), insbesondere in Ihrem Skripte.
Daher ist der korrekte Befehl findmnt
, der selbst Teil des Pakets util-linux
ist und laut Handbuch:
kann in/etc/fstab,/etc/mtab oder/proc/self/mountinfo suchen
Es sucht also tatsächlich mehr als mountpoint
. Es bietet auch die bequeme Option:
-M, --Mountpoint Pfad
Definieren Sie die Mountpoint-Datei oder das Verzeichnis explizit. Siehe auch --target.
Zusammenfassend können Sie zur Überprüfung, ob ein Verzeichnis mit Bash gemountet ist, Folgendes verwenden:
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 Mark J. Bobaks Antwort , mountpoint
funktioniert nicht, wenn das Mounten mit der Option bind
in einem anderen Dateisystem erfolgt.
Für Christopher Neylans Antwort muss die Ausgabe von grep nicht nach/dev/null umgeleitet werden. Verwenden Sie stattdessen grep -q
.
Das wichtigste, kanonisieren Sie den Pfad mit readlink -f $mypath
:
/path/to/dir/
ende mit Backslash überprüfen, lautet der Pfad in /proc/mounts
oder mount
die Ausgabe /path/to/dir
./var/run/
der Symlink von /run/
. Wenn Sie also bind für /var/run/mypath
einhängen und prüfen, ob es eingehängt ist, wird es in /run/mypath
als /proc/mounts
angezeigt.Eine andere saubere Lösung ist so:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
Sicherlich kann "Echo etwas" durch das ersetzt werden, was Sie für jeden Fall tun müssen.