Como posso determinar o tipo fs do meu diretório de trabalho atual?

17

Eu preciso de uma maneira leve e independente de plataforma de detectar o tipo de montagem do meu CWD. Especificamente, preciso determinar se meu CWD está em uma montagem SSHFS, NFS, CIFS, SMB ou de armazenamento de bloco local.

Eu preciso fazer isso no Mac OSX 10.6, 10.7 e RHEL5 (no mínimo).

Existe a possibilidade de usar o df, mas o df se comporta de maneira bastante diferente nessas duas plataformas. Além disso, eu teria que CLI raspar sua saída com o awk, que, embora viável, é ... frágil.

Esta informação deve estar disponível em algum nível. Existe uma ferramenta que eu não conheço que poderia fornecer essa informação para mim?

    
por Chris R 30.09.2011 / 21:06

4 respostas

16

O tipo de sistema de arquivos não é algo que você pode acessar facilmente de maneira independente do sistema operacional. Os nomes dos tipos de sistema de arquivos são dependentes do sistema operacional, portanto, não houve nenhum incentivo para estabelecer um método padrão.

Em sistemas Linux não incorporados, stat -f -c %T . mostra o tipo de sistema de arquivos do diretório atual. O comando stat do OSX não tem nada parecido com isto.

Como tudo o que você quer saber é se o tipo de sistema de arquivos está em uma lista finita, no Linux, você pode limitar tanto o conjunto de caminhos para imprimir informações quanto o conjunto de tipos de sistema de arquivos. Você receberá um erro ("df: nenhum sistema de arquivos processado") se o tipo de sistema de arquivos do diretório atual não estiver na lista.

if df -t sshfs -t nfs -t cifs . >/dev/null 2>/dev/null; then …

A mesma sintaxe pode ou não funcionar no OSX; se isso não acontecer, tente df -T sshfs,nfs,cifs . .

    
por 02.10.2011 / 03:44
4

Você pode usar o GNU stat no Linux:

stat --file-system --format=%T /tmp/subdir/whatever
tmpfs
    
por 18.05.2016 / 16:41
3

Ainda não testei, mas df -P deve se comportar da mesma forma na maioria das plataformas.

Isso funciona no Linux.

$ mount | grep "^$(df -Pk . | head -n 2 | tail -n 1 | cut -f 1 -d ' ') " | cut -f 5 -d ' '

Ou dividi-lo em funções reutilizáveis:

# get_mount <directory>
get_mount() {
    df -Pk "$1" | head -n 2 | tail -n 1 | cut -f 1 -d ' '
}

# get_fs <mountpoint>
get_fs() {
    mount | grep "^$1 " | cut -f 5 -d ' '
}

E chamando a função:

get_fs $(get_mount .)

Pode ser reescrito para ser um pouco mais rápido usando sed ou awk , mas provavelmente é mais fácil ler.

Se isso não funcionar, você pode tentar algo semelhante, mas usando /etc/mtab em vez da saída de mount .

    
por 30.09.2011 / 22:33
3

No Linux há findmnt disponível desde o util-linux 2.18.

findmnt -n -o FSTYPE -T /home
nfs4
    
por 11.03.2014 / 14:43