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: nfs
ou ext3
.
L' -T
option 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/mtab
ou obtenir des résultats mount
au lieu d'utiliser df
pourrait le faire dans certains cas.
/proc/mounts
mount
, ni /etc/mtab
même pas /proc/mounts
sont standard alors il n'y a aucune garantie sur ce qui peut être trouvé là-bas ...
-T
ont 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
reiserfs
Ainsi, vous savez que /usr/src/linux
, sur mon système, est stocké dans un système de fichiers sur lequel est monté le /usr/src
type de système de fichiers reiserfs
.
Reportez-vous également à man stat
pour 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 | awk
protection.
stat
n'a pas l' %m
option 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 -l
et utilisez grep
, sed
ou awk
pour trouver la ligne qui fait référence au répertoire en question.
/my/path/to/the/directory
réalité à quelque chose du point de montage /my/path
. Peut - être que vous pouvez donner quelques détails sur la grep
, sed
, awk
vous 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 --printf
générer la on <mountpoint> type
piè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/d
est de suivre le chemin:
... et faire un stat(2)
à chaque niveau, jusqu'à ce que les st_dev
changements. Ensuite, vous saurez où se trouve le point de montage. Ensuite, vous pouvez rechercher le chemin canonique de ce point de montage dans /etc/mtab
ou dans la sortie de mount
pour 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.davfs
sont évidents, mais qu'en est- par exemple fuse.gvfs-fuse-daemon
ou fuse.avfsd
qui 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_dev
fait 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) %t
et %T
avec les --format
options pour les nombres respectivement majeur et mineur, mais renvoie toujours "0" (local et nfs ). J'ai essayé sur Debian Squeeze et Lenny.
--file-system
option?
--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"
fi
Cependant, l' -l
option 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 -t
sur les systèmes Linux et df -T
BSD.
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
-t
option 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] directory
ou showmount
qui doit être installé sur tout système qui monte réellement des NFS
partages (une partie du nfs-common
paquet):
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'
mountpoint
utilitaire 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, mountpoint
n'est pas standard (pas dans cette liste ).
mountpoint
est standard dans ce cas.
find . -type d -name nfs -exec mountpoint {} \; | grep not
vérifiera tous les dossiers nommés 'nfs' s'ils sont montés
nfs
.