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?

3voto

Howard Punkte 45

Leider haben sowohl mountpoint als auch stat den Nebeneffekt, dass MONTAGE das Verzeichnis, das Sie testen, wenn Sie automount verwenden. Zumindest ist das bei mir unter Debian der Fall, wenn ich auto cifs auf eine WD MyBookLive Netzwerkplatte verwende. Ich endete mit einer Variante der /proc/mounts, die komplexer ist, weil jedes POTENTIAL mount ist bereits in /proc/mounts, auch wenn es nicht wirklich gemountet ist!

cut -d ' ' -f 1 < /proc/mounts | grep -q '^//disk/Public$' && umount /tmp/cifs/disk/Public

Where
   'disk' is the name of the server (networked disk) in /etc/hosts.
   '//disk/Public' is the cifs share name
   '/tmp/cifs' is where my automounts go (I have /tmp as RAM disk and / is read-only)
   '/tmp/cifs/disk' is a normal directory created when the server (called 'disk') is live.
   '/tmp/cifs/disk/Public' is the mount point for my 'Public' share.

2voto

Bombe Punkte 77831
for mountedPath in `mount | cut -d ' ' -f 3`; do
    if [ "${mountedPath}" == "${wantedPath}" ]; then
        exit 0
    fi
done
exit 1

0voto

MatthieuP Punkte 1116

Hier ist eine Variante mit "df -P", die portabel sein soll:

mat@owiowi:/tmp$ f(){ df -P  | awk '{ if($6 == "'$1'")print   }' ; }
mat@owiowi:/tmp$ f /
/dev/mapper/lvm0-vol1  20642428  17141492   2452360      88% /
mat@owiowi:/tmp$ f /mnt
mat@owiowi:/tmp$ f /mnt/media
/dev/mapper/lvm0-media  41954040  34509868   7444172      83% /mnt/media

0voto

mount | awk '$3 == "/pa/th" {print $1}'

Leer, wenn es sich nicht um einen Einhängepunkt handelt ^^

0voto

Pedro Punkte 86

stat --printf '%m' zeigt den Einhängepunkt einer bestimmten Datei oder eines Verzeichnisses an.

realpath wandelt relative Pfade in direkte Pfade um.

Der Vergleich der beiden Ergebnisse zeigt Ihnen, ob ein Verzeichnis ein Einhängepunkt ist. stat ist sehr tragbar. realpath ist weniger wichtig, wird aber nur benötigt, wenn Sie relative Pfade prüfen wollen.

Ich bin nicht sicher, wie tragbar mountpoint ist.

if [ "$(stat --printf '%m' "${DIR}")" = "$(realpath "${DIR}")" ]; then
    echo "This directory is a mount point."
else
    echo "This is not a mount point."
fi

Ohne realpath :

if [  "${DIR}" = "$(stat --printf '%m' "${DIR}")" ]; then
    echo "This directory is a mount point."
else
    echo "This is not a mount point."
fi

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