Wie kann am besten (zuverlässig, portabel usw.) überprüft werden, ob sich ein bestimmter Ordner in einem bereitgestellten Remote-Dateisystem (nfs) in einem Shell-Skript befindet?
Ich suche einen Befehl, der so aussehen würde:
chk-remote-mountpoint /my/path/to/folder
linux
shell-script
filesystems
mount
Totor
quelle
quelle
/etc/mtab
oder Anzeigen von Ergebnissenmount
anstelle der Verwendungdf
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 hatSie könnten GNU verwenden
stat
.%m
um den Einhängepunkt herauszufinden.%T
(im Dateisystemmodus), um den Namen des Dateisystems herauszufinden.So wissen Sie, dass
/usr/src/linux
auf meinem System in einem Dateisystem gespeichert ist, das gemountet ist/usr/src
und den Dateisystemtyp hatreiserfs
.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 aufgrep | awk
Schutz zurückgreifen möchten.quelle
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 Siegrep
,sed
oderawk
, um die Zeile zu finden, die auf das betreffende Verzeichnis verweist.quelle
/my/path/to/the/directory
tatsächlich etwas vom Ausgangspunkt ist/my/path
. Vielleicht können Sie einige weitere Details über das gebengrep
,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 ichstat --printf
dason <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 dasst_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 nachschlagenmount
, um den Dateisystemtyp zu ermitteln. Dann herauszufinden, was entfernt ist und was nicht, wird besonders für sicherungsartige schwierig sein. Zum Beispielnfs
,cifs
,fuse.sshfs
,fuse.davfs
liegen auf der Hand, aber was ist zum Beispielfuse.gvfs-fuse-daemon
oderfuse.avfsd
dass sowohl Netzwerk- als auch Nicht-Netzwerk - Dateien haben kann?quelle
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-Befehlstat(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:
Die
-l
Option ist jedoch nicht Standard .quelle
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.df /path
wird Ihnen sagen, dass/path
es sich um einen Mount-Punkt handelt, wenn der Mount-Punkt nicht angegeben ist/
.quelle
Mach einfach
Wenn das erste Feld (das Dateisystem) das Format host: / path hat, wissen Sie, dass es sich um NFS handelt
quelle
Sie können die
df -t
unter Linux unddf -T
auf BSD-Systemen verwenden.Vom mann df :
quelle
-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!):oder
showmount
was eigentlich erforderlich ist, um auf einem System installiert zu werden, das tatsächlichNFS
Freigaben bereitstellt (Teil desnfs-common
Pakets):Eine andere Möglichkeit wäre:
quelle
mountpoint
Dienstprogramm sagt Ihnen nicht, ob der Mount-Punkt entfernt ist. Darüber hinaus sind ferne Dateisysteme nicht auf NFS-Dateisysteme beschränkt. Schließlichmountpoint
ist nicht Standard (nicht in dieser Liste ).mountpoint
ist in diesem Fall Standard.überprüft alle Ordner mit dem Namen 'nfs', wenn sie gemountet sind
quelle
nfs
.