webentwicklung-frage-antwort-db.com.de

So testen Sie, ob ein angegebener Pfad ein Bereitstellungspunkt ist

Angenommen, Sie möchten testen, ob/mnt/disk ein Einhängepunkt in einem Shell-Skript ist. Wie machst Du das?

33
Andrea Francia

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

Vom 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 kommt es mit dem Paket sysvinit. Ich weiß nicht, ob dieser Befehl auf anderen Systemen verfügbar ist.

[[email protected]~]# rpm -qf $(which mountpoint)
sysvinit-2.86-17
51
Andrea Francia

Verlassen sich nicht auf 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 aufgeführten Alternativen ist, dass Sie nichts analysieren müssen, und wenn dir=/some//path/../with///extra/components das Richtige ist.

Der Nachteil ist, dass / nicht als Mountpoint markiert wird. Nun, das ist leicht genug für den Spezialfall, aber trotzdem.

20
ephemient

Verwenden von GNU find 

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

gibt die Gerätenummer des Verzeichnisses an. Wenn es zwischen Und dem übergeordneten Verzeichnis unterscheidet, haben Sie einen Mount-Punkt.

Hinzufügen /. auf den Verzeichnisnamen, wenn Symlinks zu verschiedenen Dateisystemen als Mountpoints zählen sollen (Sie möchten es immer für die übergeordneten Elemente).

Nachteile: verwendet GNU find also weniger portabel

Vorteile: Meldet Mount-Punkte, die nicht in/etc/mtab aufgezeichnet wurden. 

4
William Hay
if mount | cut -d ' ' -f 3 | grep '^/mnt/disk$' > /dev/null ; then
   ...
fi

BEARBEITEN: Benutzte Bombes Idee, um Schnitt zu verwenden.

3
haggai_e

Leider haben sowohl Mountpoint als auch Stat den Nebeneffekt vonMOUNTdes Verzeichnisses, das Sie testen, wenn Sie Automount verwenden. Oder zumindest bei Debian unter Verwendung von Auto-Cifs auf einer WD MyBookLive-Netzwerkfestplatte. Am Ende wurde eine Variante des/proc/mounts komplexer gemacht, da jedesPOTENTIELLEmount ist bereits in/proc/mounts, auch wenn es nicht wirklich montiert ist!

cut -d ' ' -f 1 < /proc/mounts | grep -q '^//disk/Public$' && umount /tmp/cifs/disk/Public
Dabei ist 
 'Disk' der Name des Servers (Netzlaufwerk) in /etc/hosts.
 '// disk/Public' ist der cifs-Freigabename 
 '/ Tmp/cifs 'ist, wo meine Automounts gehen (ich habe/tmp als RAM disk und/ist schreibgeschützt) 
'/tmp/cifs/disk 'ist ein normales Verzeichnis, das beim Server erstellt wird (genannt "Diskette") ist live. 
 "/ tmp/cifs/disk/Public" ist der Mountpunkt für meine "Public" -Freigabe. 
3
Howard
df $path_in_question | grep " $path_in_question$"

Dadurch wird nach Beendigung $? festgelegt.

3
chaz
for mountedPath in `mount | cut -d ' ' -f 3`; do
    if [ "${mountedPath}" == "${wantedPath}" ]; then
        exit 0
    fi
done
exit 1
2
Bombe
mount | awk '$3 == "/pa/th" {print $1}'

Leer wenn kein Mountpoint ist ^^

0
Igor

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

realpath konvertiert relative Pfade in direkt.

Wenn Sie die Ergebnisse der beiden vergleichen, erfahren Sie, ob ein Verzeichnis ein Einhängepunkt ist. stat ist sehr portabel. realpath ist weniger, aber es ist nur erforderlich, wenn Sie relative Pfade überprüfen möchten.

Ich bin mir nicht sicher, wie tragbar einhängepunkt 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
0
Pedro

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

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