Antworten:
Wie Stephane sagt "es gibt keine universelle Unix-Antwort darauf".
Die beste Lösung, die ich zu meiner Frage gefunden habe:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
gibt den Dateisystemtyp zurück, zum Beispiel: nfsoder ext3.
Die -TOption ist kein Standard , daher funktioniert sie möglicherweise nicht auf anderen Unix / Linux-Systemen ...
Nach Gilles 'Kommentar unten: "Dies funktioniert auf jedem nicht eingebetteten Linux, aber nicht auf BusyBox, * BSD usw."
/etc/mtaboder Anzeigen von Ergebnissen mountanstelle der Verwendung dfkann in einigen weiteren Fällen hilfreich sein.
/proc/mounts
mountnoch /etc/mtabnicht einmal /proc/mountsStandard, so gibt es keine Garantie dafür, was dort zu finden ist ...
-Tes hier eine andere Bedeutung hat
Sie könnten GNU verwenden stat.
%m um den Einhängepunkt herauszufinden.
$ stat --format=%m /usr/src/linux
/usr/src
%T (im Dateisystemmodus), um den Namen des Dateisystems herauszufinden.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
So wissen Sie, dass /usr/src/linuxauf meinem System in einem Dateisystem gespeichert ist, das gemountet ist /usr/srcund den Dateisystemtyp hat reiserfs.
Siehe auch man statfür weitere Referenz. Es ist ein sehr vielseitiger Befehl, der fast immer nützlich ist, wenn Sie Informationen über Dateien benötigen und nicht auf grep | awkSchutz zurückgreifen möchten.
stathat keine %mOption für --format(unter Verwendung von Debian Squeeze, Coreutils 8.5). Ich denke, diese Lösung ist nicht sehr zuverlässig.
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. Das ist fast 3 Jahre her. Erstaunlich, dass Debian dies immer noch nicht hat.
mount -lVerwenden Sie grep, sedoder awk, um die Zeile zu finden, die auf das betreffende Verzeichnis verweist.
/my/path/to/the/directorytatsächlich etwas vom Ausgangspunkt ist /my/path. Vielleicht können Sie einige weitere Details über das geben grep, sed, awkBefehle , die Sie vorschlagen (vollständige Antwort) ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'sollte Ihnen eine Liste aller nfs-Mountpunkte auf dem System geben.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The Befehl stat: mount kombiniert werden, um alle Einhängepunkte im <device> on <mountpoint> type <type>Format auszudrucken . Um dies zu begreifen, habe ich stat --printfdas on <mountpoint> typeTeil generiert .
Leider gibt es keine universelle Unix-Antwort darauf.
Eine Sache, die Sie für eine bestimmte Datei tun können, /a/b/c/dist, den Pfad entlangzugehen:
... und mach stat(2)auf jedem Level ein, bis sich das st_devändert. Dann wissen Sie, wo sich der Einhängepunkt befindet. Anschließend können Sie den kanonischen Pfad dieses Einhängepunkts in /etc/mtaboder in der Ausgabe von nachschlagen mount, um den Dateisystemtyp zu ermitteln. Dann herauszufinden, was entfernt ist und was nicht, wird besonders für sicherungsartige schwierig sein. Zum Beispiel nfs, cifs, fuse.sshfs, fuse.davfsliegen auf der Hand, aber was ist zum Beispiel fuse.gvfs-fuse-daemonoder fuse.avfsddass sowohl Netzwerk- als auch Nicht-Netzwerk - Dateien haben kann?
stat(2)denke ich, dass Sie die C - Funktion sich beziehen, aber ich bin mit Shell. st_devBezieht sich jedoch auf die Haupt- und Nebengeräte-ID (ist das Linux-spezifisch?) Und hat den Shell-Befehl stat(1)(nicht standardgemäß) %tund %Tmit den --formatOptionen für Haupt- und Nebennummern, gibt aber immer "0" zurück (local und nfs) ). Ich habe es mit Debian Squeeze und Lenny versucht.
--file-systemOption?
--file-system.
"-L" bis "df (1)" schlagen bei nicht lokalen Dateisystemen fehl, sodass Sie anhand dieses Verhaltens feststellen können, ob das Dateisystem remote ist:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
Die -lOption ist jedoch nicht Standard .
dfdies fehlschlagen würde, und das allein macht dies zu einer nicht sehr guten Antwort, aber es wird versucht, die Frage zu beantworten, sodass ich nicht verstehe, warum Sie es "keine Antwort" nennen würden.
Sie können die df -tunter Linux und df -Tauf BSD-Systemen verwenden.
Vom mann df :
-t, --type = TYPE
Beschränken Sie die Auflistung auf Dateisysteme des Typs TYPE
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-tOption in POSIX / SUS jedoch eine andere Bedeutung . Daher kann die Verwendung dieser Option zu inkonsistenten Ergebnissen in verschiedenen Versionen des Tools / UNIX führen.
Ich persönlich würde folgendes benutzen mountpoint(sehr portabel unter Linux!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
oder showmountwas eigentlich erforderlich ist, um auf einem System installiert zu werden, das tatsächlich NFSFreigaben bereitstellt (Teil des nfs-commonPakets):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Eine andere Möglichkeit wäre:
$ mount -l -t nfs | grep 'my mount point'
mountpointDienstprogramm sagt Ihnen nicht, ob der Mount-Punkt entfernt ist. Darüber hinaus sind ferne Dateisysteme nicht auf NFS-Dateisysteme beschränkt. Schließlich mountpointist nicht Standard (nicht in dieser Liste ).
mountpointist in diesem Fall Standard.
find . -type d -name nfs -exec mountpoint {} \; | grep not
überprüft alle Ordner mit dem Namen 'nfs', wenn sie gemountet sind
nfs.