Respostas:
Como Stephane diz "não existe uma resposta universal do Unix para isso".
A melhor solução que encontrei para minha pergunta:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
retornará o tipo de sistema de arquivos, por exemplo: nfsou ext3.
A -Topção não é padrão , portanto, pode não funcionar em outros sistemas Unix / Linux ...
De acordo com o comentário de Gilles abaixo: "Isso funciona em qualquer Linux não incorporado, mas não no BusyBox, * BSD etc."
/etc/mtabou os resultados de, em mountvez de usar, dfpodem ocorrer em mais alguns casos.
/proc/mounts
mount, nem /etc/mtab, nem mesmo /proc/mountssão padrão por isso não há garantia sobre o que pode ser encontrado lá ...
-Tter um significado diferente aqui
Você poderia usar o GNU stat.
%m para descobrir o ponto de montagem.
$ stat --format=%m /usr/src/linux
/usr/src
%T (no modo de sistema de arquivos) para descobrir o nome do sistema de arquivos.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
Portanto, você sabe que /usr/src/linux, no meu sistema, é armazenado em um sistema de arquivos montado /usr/srce com o tipo de sistema de arquivos reiserfs.
Consulte também man statpara referência adicional. É um comando muito versátil, útil quase sempre quando você precisa de informações sobre arquivos e não deseja voltar ao estado de grep | awkguarda.
statnão possui a %mopção de --format(usando Debian Squeeze, coreutils 8.5). Então, acho que essa solução não é muito confiável.
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. Isso é quase 3 anos atrás. Surpreendente que o Debian ainda não tenha isso.
mount -le use grep,, sedou awkpara encontrar a linha que se refere ao diretório em questão.
/my/path/to/the/directoryna verdade, é algo do ponto de montagem /my/pathcom sua resposta. Talvez você pode dar mais alguns detalhes sobre o grep, sed, awkcomandos você sugere (a resposta completa) ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'deve fornecer uma lista de todos os pontos de montagem do nfs no sistema.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The comando stat: mount` imprimirá todos os pontos de montagem, no <device> on <mountpoint> type <type>formato. Para grep isso, eu stat --printfgerei a on <mountpoint> typeparte.
Infelizmente, não existe uma resposta universal do Unix para isso.
Uma coisa que você pode fazer, pois um determinado arquivo /a/b/c/dé percorrer o caminho:
... e faça um stat(2)em cada nível, até as st_devmudanças. Então você saberá onde está o ponto de montagem. Em seguida, você pode procurar o caminho canônico desse ponto de montagem /etc/mtabou na saída de mountpara descobrir o tipo de sistema de arquivos. Então descobrir o que é remoto e o que não é será complicado, especialmente para os do tipo fusível. Por exemplo, nfs, cifs, fuse.sshfs, fuse.davfssão óbvias, mas o que acontece, por exemplo, fuse.gvfs-fuse-daemonou fuse.avfsdque podem ter ambos os arquivos de rede e fora da rede?
stat(2), acho que você está se referindo à função C, mas estou usando shell. No entanto, st_devrefere-se ao ID principal e secundário do dispositivo (é específico do Linux?), E o comando shell stat(1)possui (não-padrão) %te %Tcom as --formatopções para números maiores e menores, respectivamente, mas sempre retorna "0" (local e nfs ) Eu experimentei o Debian Squeeze e o Lenny.
--file-systemopção?
--file-system.
O "-l" para df (1) falhará com um erro em sistemas de arquivos não locais, portanto você pode usar esse comportamento para saber se o sistema de arquivos é remoto:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
dffalharia e isso por si só não é uma resposta muito boa, mas está tentando responder à pergunta, então não vejo por que você a chamaria de "não uma resposta".
Você pode usar os df -tsistemas Linux e df -TBSD.
Do homem df :
-t, --type = TYPE
lista de limites para sistemas de arquivos do tipo TYPE
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-topção tem um significado diferente no POSIX / SUS. Portanto, o uso desta opção pode fornecer resultados inconsistentes em diferentes versões na ferramenta / UNIX.
Eu usaria pessoalmente mountpoint(muito portátil no Linux!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
ou showmountque é praticamente necessário instalar em qualquer sistema que realmente monte NFScompartilhamentos (parte do nfs-commonpacote):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Outra opção seria algo como:
$ mount -l -t nfs | grep 'my mount point'
mountpointutilitário não informa se o ponto de montagem é remoto. Além disso, os sistemas de arquivos remotos não se limitam aos sistemas de arquivos NFS. Finalmente, mountpointnão é padrão (não está nesta lista ).
mountpointé padrão neste caso.
find . -type d -name nfs -exec mountpoint {} \; | grep not
irá verificar todas as pastas nomeadas 'nfs' se estiverem montadas
nfs.