Risposte:
Come dice Stephane "non esiste una risposta universale a Unix".
La migliore soluzione che ho trovato alla mia domanda:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
restituirà il tipo di filesystem, ad esempio: nfso ext3.
L' -Topzione non è standard , quindi potrebbe non funzionare su altri sistemi Unix / Linux ...
Secondo il commento di Gilles di seguito: "Funziona su qualsiasi Linux non incorporato, ma non su BusyBox, * BSD, ecc."
/etc/mtabo i risultati mountanziché utilizzare dfpotrebbero essere utili in alcuni casi.
/proc/mounts
mount, né /etc/mtab, nemmeno /proc/mountssono standard quindi non c'è garanzia su cosa si possa trovare lì ...
-Tha un significato diverso
Puoi usare GNU stat.
%m per scoprire il mountpoint.
$ stat --format=%m /usr/src/linux
/usr/src
%T (in modalità file system) per scoprire il nome del file system.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
Quindi sai che /usr/src/linux, sul mio sistema, è memorizzato in un filesystem che è montato /usr/srce ha il tipo di filesystem reiserfs.
Fare riferimento anche man statper ulteriori riferimenti. È un comando molto versatile, utile quasi sempre quando hai bisogno di informazioni sui file e non vuoi tornare al grep | awkreparto.
statnon ha l' %mopzione per --format(usando Debian Squeeze, coreutils 8.5). Quindi, suppongo che questa soluzione non sia molto affidabile.
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. Sono passati quasi 3 anni. Incredibile che Debian non abbia ancora questo.
mount -le utilizzare grep, sedoppure awkper trovare la riga che fa riferimento alla directory in questione.
/my/path/to/the/directoryrealtà è qualcosa dal mountpoint /my/pathcon la tua risposta. Forse si può dare qualche dettaglio in più sul grep, sed, awkcomandi suggerire (una risposta completa) ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'dovrebbe darti un elenco di tutti i mountpoint di nfs sul sistema.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The comando stat: mount` stamperà tutti i punti di mount, nel <device> on <mountpoint> type <type>formato. Per grep questo, ho stat --printfgenerato la on <mountpoint> typeparte.
Sfortunatamente, non esiste una risposta universale a Unix.
Una cosa che puoi fare, per un dato file /a/b/c/dè percorrere il percorso:
... e fai un stat(2)a ogni livello, fino a quando le st_devmodifiche. Quindi saprai dove si trova il punto di montaggio. Quindi puoi cercare il percorso canonico di quel punto di mount all'interno /etc/mtabo nell'output di mountper scoprire il tipo di file system. Quindi scoprire cosa è remoto e cosa non lo sarà sarà difficile soprattutto per quelli di tipo a miccia. Per esempio, nfs, cifs, fuse.sshfs, fuse.davfssono evidenti, ma per quanto riguarda per esempio fuse.gvfs-fuse-daemono fuse.avfsdche possono avere entrambe le file di rete e non in rete?
stat(2), penso che stai facendo riferimento alla funzione C, ma sto usando shell. Tuttavia, st_devfa riferimento all'ID dispositivo principale e secondario (è specifico di Linux?) E il comando shell stat(1)ha (non standard) %te %Tcon le --formatopzioni per i numeri rispettivamente maggiore e minore, ma restituisce sempre "0" (local e nfs ). Ho provato Debian Squeeze e Lenny.
--file-systemopzione?
--file-system.
Il "-l" a df (1) fallirà con un errore sui filesystem non locali, quindi puoi usare questo comportamento per sapere se il filesystem è remoto:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
dfmolti altri motivi per cui fallirebbe e questo da solo rende questa una risposta non molto buona, ma sta cercando di rispondere alla domanda, quindi non vedo perché la chiameresti "non una risposta".
È possibile utilizzare i df -tsistemi Linux e df -TBSD.
Da man df :
-t, --type = TYPE
limitare l'elenco ai file system di tipo TYPE
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-topzione ha un significato diverso in POSIX / SUS. Pertanto, l'utilizzo di questa opzione può fornire risultati incoerenti in diverse versioni sullo strumento / UNIX.
Personalmente userei mountpoint(molto portatile su Linux!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
o showmountche è praticamente necessario installare su qualsiasi sistema che effettivamente monta NFScondivisioni (parte del nfs-commonpacchetto):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Un'altra opzione sarebbe qualcosa del tipo:
$ mount -l -t nfs | grep 'my mount point'
mountpointutilità non ti dice se il punto di montaggio è remoto. Inoltre, i filesystem remoti non si limitano ai filesystem NFS. Infine, mountpointnon è standard (non in questo elenco ).
mountpointin questo caso è standard.
find . -type d -name nfs -exec mountpoint {} \; | grep not
controllerà tutte le cartelle denominate 'nfs' se sono montate
nfs.