GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Überprüfen Sie, ob das Verzeichnis mit Bash gemountet wurde

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 oder mount 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 .


Linux
  1. Bash-Skripte beim Betreten eines Verzeichnisses ausführen?

  2. Wie überprüfe ich, ob ein bestimmtes Verzeichnis gemountet ist?

  3. Überprüfen Sie, wie lange die Ausführung eines Bash-Skripts mit dem Time-Befehl dauert

  4. Mounten Sie das Gerät mit bestimmten Benutzerrechten

  5. Was ist der beste Weg, um zu überprüfen, ob ein Volume in einem Bash-Skript gemountet ist?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

Linux-CD-Befehl mit Beispielen

Mounten Sie einen Remote-Ordner mit sshfs

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist

So verwenden Sie SSHFS-Mount mit Remote-Verzeichnissen über SSH