Como obter informações do sistema de arquivos para um arquivo específico?

8

Qual é a melhor maneira de descobrir informações do sistema de arquivos sobre um arquivo.

Por exemplo, se eu tiver um arquivo

/media/xyz/path/to/file.ext

E /etc/fstabcontém

//server1/Share1 /media/xyz cifs option1=value1,...

Como posso determinar que o arquivo está em um compartilhamento Samba, que possui o caminho local /path/to/file.exte com quais opções o sistema de arquivos foi montado?

Está analisando a saída de mountuma solução portátil? Ou analisar findmnt? Existe uma maneira compatível com POSIX para conseguir isso?

kba fica com Monica
fonte
df /path/to/filedeve mostrar a partição ou montagem.
thrig
Obrigado @thrig, esse é o primeiro passo. Qual seria a melhor maneira de obter informações como opções de montagem a partir daí?
Kba fica com Monica
No Linux, eu posso analisar /proc/mounts. Existe uma maneira compatível com BSD / OSX para obter o mesmo?
Kba fica com Monica
apenas olhando arquivos? você não pode! essa é a beleza se unix-like sistemas operacionais, aplicativos podem acessá-los usando caminho independentemente da sua localização física
Edward Torvalds
@edwardtorvalds Não, não apenas olhando os arquivos, é por isso que perguntei sobre a análise, mountetc., para obter o sistema de arquivos e as opções, etc. Ainda não tenho certeza da melhor maneira de encontrar essas informações em * BSD e OSX. Não tive tempo de trabalhar na biblioteca que exige isso, mas receberei feedback assim que o fizer. Pelo que vi, mount -Pparece bastante confiável no Linux / BSD.
Kba fica com Monica

Respostas:

1

O stat (1) é uma maneira portátil de descobrir algumas dessas informações, por exemplo:

stat --file-system --format="%T" /media/xyz/path/to/file.ext

Todo o resto é muito específico do sistema operacional; nos sistemas Linux recentes, você pode facilmente usar findmnt --outputem um script.

Marco d'Itri
fonte
stattambém é específico do sistema operacional.
31516 Don_crissti
0

se eu entendi sua necessidade corretamente e combinando bits de respostas anteriores, o seguinte pode ser o que você precisa. define no script (por exemplo, no seu .bashrc) -

findpart ()
{
df -h $1|sed 1d|cut -d" " -f1|xargs findmnt -n
}

e então você pode executá-lo conforme necessário

findpart /foo/file.ext
Gil Shabtai
fonte
findmntnão precisa de tudo isso, ele pode fazer isso por si só
don_crissti
teoricamente sim. na prática, não consegui que o -T trabalhasse no centos 6, enquanto essa solução funciona.
Gil Shabtai