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: nfs
oder ext3
.
Die -T
Option 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/mtab
oder Anzeigen von Ergebnissen mount
anstelle der Verwendung df
kann in einigen weiteren Fällen hilfreich sein.
/proc/mounts
mount
noch /etc/mtab
nicht einmal /proc/mounts
Standard, so gibt es keine Garantie dafür, was dort zu finden ist ...
-T
es 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/linux
auf meinem System in einem Dateisystem gespeichert ist, das gemountet ist /usr/src
und den Dateisystemtyp hat reiserfs
.
Siehe auch man stat
fü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 | awk
Schutz zurückgreifen möchten.
stat
hat keine %m
Option 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 -l
Verwenden Sie grep
, sed
oder awk
, um die Zeile zu finden, die auf das betreffende Verzeichnis verweist.
/my/path/to/the/directory
tatsächlich etwas vom Ausgangspunkt ist /my/path
. Vielleicht können Sie einige weitere Details über das geben grep
, sed
, awk
Befehle , 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 --printf
das on <mountpoint> type
Teil generiert .
Leider gibt es keine universelle Unix-Antwort darauf.
Eine Sache, die Sie für eine bestimmte Datei tun können, /a/b/c/d
ist, 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/mtab
oder 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.davfs
liegen auf der Hand, aber was ist zum Beispiel fuse.gvfs-fuse-daemon
oder fuse.avfsd
dass 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_dev
Bezieht sich jedoch auf die Haupt- und Nebengeräte-ID (ist das Linux-spezifisch?) Und hat den Shell-Befehl stat(1)
(nicht standardgemäß) %t
und %T
mit den --format
Optionen für Haupt- und Nebennummern, gibt aber immer "0" zurück (local und nfs) ). Ich habe es mit Debian Squeeze und Lenny versucht.
--file-system
Option?
--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 -l
Option ist jedoch nicht Standard .
df
dies 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 -t
unter Linux und df -T
auf 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
-t
Option 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 showmount
was eigentlich erforderlich ist, um auf einem System installiert zu werden, das tatsächlich NFS
Freigaben bereitstellt (Teil des nfs-common
Pakets):
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'
mountpoint
Dienstprogramm sagt Ihnen nicht, ob der Mount-Punkt entfernt ist. Darüber hinaus sind ferne Dateisysteme nicht auf NFS-Dateisysteme beschränkt. Schließlich mountpoint
ist nicht Standard (nicht in dieser Liste ).
mountpoint
ist 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
.