Angenommen, Sie wollen in einem Shell-Skript testen, ob /mnt/disk ein Einhängepunkt ist. Wie machen Sie das?
Antworten
Zu viele Anzeigen?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
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.
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.
- See previous answers
- Weitere Antworten anzeigen