Réponses:
Comme le dit Stéphane "Il n’ya pas de réponse Unix universelle à cela".
La meilleure solution que j'ai trouvée à ma question:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'renverra le type de système de fichiers, par exemple: nfsou ext3.
L' -Toption n'est pas standard , donc elle pourrait ne pas fonctionner sur d'autres systèmes Unix / Linux ...
Selon le commentaire de Gilles ci-dessous: "Cela fonctionne sur tout Linux non embarqué, mais pas sur BusyBox, * BSD, etc."
/etc/mtabou obtenir des résultats mountau lieu d'utiliser dfpourrait le faire dans certains cas.
                    /proc/mounts
                    mount, ni /etc/mtabmême pas /proc/mountssont standard alors il n'y a aucune garantie sur ce qui peut être trouvé là-bas ...
                    -Tont un sens différent ici
                    Vous pouvez utiliser GNU stat.
%m pour trouver le point de montage.
$ stat --format=%m /usr/src/linux
/usr/src%T (en mode système de fichiers) pour trouver le nom du système de fichiers.
$ stat --file-system --format=%T /usr/src/linux
reiserfsAinsi, vous savez que /usr/src/linux, sur mon système, est stocké dans un système de fichiers sur lequel est monté le /usr/srctype de système de fichiers reiserfs.
Reportez-vous également à man statpour référence ultérieure. C'est une commande très polyvalente, utile presque toujours lorsque vous avez besoin d'informations sur les fichiers et que vous ne voulez pas revenir à la grep | awkprotection.
statn'a pas l' %moption pour --format(utiliser Debian Squeeze, coreutils 8.5). Donc, je suppose que cette solution n’est pas très fiable.
                    2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. C'est il y a presque 3 ans. Incroyable que Debian n’ait toujours pas cela.
                    mount -let utilisez grep, sedou awkpour trouver la ligne qui fait référence au répertoire en question.
/my/path/to/the/directoryréalité à quelque chose du point de montage /my/path. Peut - être que vous pouvez donner quelques détails sur la grep, sed, awkvous proposez des commandes (une réponse complète) ?.
                    mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'devrait vous donner une liste de tous les points de montage nfs du système.
                    mount | fgrep "`stat --printf=" on %m type" /var/log/`". The commande stat: mount` imprimera tous les points de montage, au <device> on <mountpoint> type <type>format. Pour cela, j'ai stat --printfgénérer la on <mountpoint> typepièce.
                    Malheureusement, il n'y a pas de réponse Unix universelle à cela.
Une chose que vous pouvez faire, pour un fichier donné, /a/b/c/dest de suivre le chemin:
... et faire un stat(2)à chaque niveau, jusqu'à ce que les st_devchangements. Ensuite, vous saurez où se trouve le point de montage. Ensuite, vous pouvez rechercher le chemin canonique de ce point de montage dans /etc/mtabou dans la sortie de mountpour connaître le type de système de fichiers. Trouver ensuite ce qui est à distance et ce qui ne l’est pas va être difficile, surtout pour les fusibles. Par exemple, nfs, cifs, fuse.sshfs, fuse.davfssont évidents, mais qu'en est- par exemple fuse.gvfs-fuse-daemonou fuse.avfsdqui peut avoir à la fois le réseau et les fichiers non-réseau?
stat(2), je pense que vous faites référence à la fonction C, mais j'utilise shell. Cependant, st_devfait référence aux ID de périphérique majeur et mineur (est-ce spécifique à Linux?), Et la commande shell stat(1)a (non standard) %tet %Tavec les --formatoptions pour les nombres respectivement majeur et mineur, mais renvoie toujours "0" (local et nfs ). J'ai essayé sur Debian Squeeze et Lenny.
                    --file-systemoption?
                    --file-system.
                    Le "-l" à df (1) échouera avec une erreur sur les systèmes de fichiers non locaux, vous pouvez donc utiliser ce comportement pour savoir si le système de fichiers est distant:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fiCependant, l' -loption n'est pas standard .
dféchoueraient et cela seul en fait une réponse pas très bonne, mais il s'agit d'essayer de répondre à la question, donc je ne vois pas pourquoi vous appelleriez cela "pas une réponse".
                    Vous pouvez utiliser le df -tsur les systèmes Linux et df -TBSD.
De l' homme df :
-t, --type = TYPE
limiter la liste aux systèmes de fichiers de type TYPE
if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi-toption a une signification différente dans POSIX / SUS. L'utilisation de cette option peut donc générer des résultats incohérents dans différentes versions de l'outil / UNIX.
                    Je voudrais personnellement utiliser mountpoint(très portable sur Linux!):
NAME
       mountpoint - see if a directory is a mountpoint
SYNOPSIS
       mountpoint [-d|-q] directoryou showmountqui doit être installé sur tout système qui monte réellement des NFSpartages (une partie du nfs-commonpaquet):
NAME
       showmount - show mount information for an NFS server
SYNOPSIS
       showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]Une autre option serait quelque chose comme:
$ mount -l -t nfs | grep 'my mount point'mountpointutilitaire ne vous dit pas si le point de montage est distant. De plus, les systèmes de fichiers distants ne se limitent pas aux systèmes de fichiers NFS. Enfin, mountpointn'est pas standard (pas dans cette liste ).
                    mountpointest standard dans ce cas.
                    find . -type d -name nfs -exec mountpoint {} \; | grep notvérifiera tous les dossiers nommés 'nfs' s'ils sont montés
nfs.