Quel est le meilleur moyen (fiable, portable, etc.) de vérifier si un dossier donné se trouve sur un système de fichiers monté à distance (nfs) dans un script shell?
Je cherche une commande qui ressemblerait à:
chk-remote-mountpoint /my/path/to/folder
/etc/mtab
ou obtenir des résultatsmount
au lieu d'utiliserdf
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 iciVous pouvez utiliser GNU
stat
.%m
pour trouver le point de montage.%T
(en mode système de fichiers) pour trouver le nom du système de fichiers.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 fichiersreiserfs
.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 à lagrep | awk
protection.la source
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 utilisezgrep
,sed
ouawk
pour trouver la ligne qui fait référence au répertoire en question.la source
/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 lagrep
,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'aistat --printf
générer laon <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 lesst_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 demount
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 exemplefuse.gvfs-fuse-daemon
oufuse.avfsd
qui peut avoir à la fois le réseau et les fichiers non-réseau?la source
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 shellstat(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:
Cependant, l'
-l
option n'est pas standard .la source
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".df /path
vous dira que/path
c'est un point de montage s'il indique que le point de montage ne l'est pas/
.la source
Il suffit de faire
Si le premier champ (le système de fichiers) est au format hôte: / chemin, alors vous savez qu'il s'agit de NFS
la source
Vous pouvez utiliser le
df -t
sur les systèmes Linux etdf -T
BSD.De l' homme df :
la source
-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!):ou
showmount
qui doit être installé sur tout système qui monte réellement desNFS
partages (une partie dunfs-common
paquet):Une autre option serait quelque chose comme:
la source
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.vérifiera tous les dossiers nommés 'nfs' s'ils sont montés
la source
nfs
.