38 Stimmen

So testen Sie, ob ein bestimmter Pfad ein Einhängepunkt ist

Angenommen, Sie wollen in einem Shell-Skript testen, ob /mnt/disk ein Einhängepunkt ist. Wie machen Sie das?

57voto

Andrea Francia Punkte 9167

Ich entdecke, dass es auf meinem Fedora 7 einen Mountpoint-Befehl gibt.

Aus man mountpoint:

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       /bin/mountpoint [-q] [-d] /path/to/directory
       /bin/mountpoint -x /dev/device

Anscheinend wird er mit dem sysvinit-Paket geliefert, ich weiß nicht, ob dieser Befehl auch auf anderen Systemen verfügbar ist.

[root@myhost~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17

25voto

ephemient Punkte 189038

Sich nicht auf die mount , /etc/mtab , /proc/mounts , usw.:

if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
    echo "$dir is mounted"
else
    echo "$dir is not mounted"
fi

Wenn $dir ein Einhängepunkt ist, hat er eine andere Gerätenummer als sein übergeordnetes Verzeichnis.

Der Vorteil gegenüber den bisher aufgelisteten Alternativen ist, dass Sie nichts parsen müssen, und dass es das Richtige tut, wenn dir=/some//path/../with///extra/components .

Der Nachteil ist, dass es keine Markierung / als Einhängepunkt. Nun, das ist einfach genug, um einen Sonderfall zu schaffen, aber trotzdem.

5voto

GNU find verwenden

find <directory> -maxdepth 0 -printf "%D" 

wird die Gerätenummer des Verzeichnisses angegeben. Wenn sie abweicht zwischen dem Verzeichnis und dem übergeordneten Verzeichnis unterscheidet, haben Sie einen Einhängepunkt.

Fügen Sie /. an den Verzeichnisnamen an, wenn Sie möchten, dass Symlinks zu verschiedenen Dateisystemen als Einhängepunkte zählen (Sie werden es immer für das übergeordnete System brauchen).

Nachteile: verwendet GNU find, daher weniger portabel

Vorteile: Meldet Einhängepunkte, die nicht in /etc/mtab verzeichnet sind.

3voto

haggai_e Punkte 4504
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
   ...
fi

EDIT: Die Idee von Bombe, den Schnitt zu verwenden.

3voto

df $path_in_question | grep " $path_in_question$"

Damit wird die $? nach Fertigstellung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X