Estou procurando uma maneira rápida de encontrar o ponto de montagem do sistema de arquivos que contém um determinado arquivo. Existe algo mais simples ou mais direto do que minha solução abaixo?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Uma pergunta semelhante " Existe um comando para ver onde um disco está montado? " Usa o nó do dispositivo do disco atual como entrada e não um arquivo arbitrário do disco ...
shell
filesystems
mount
Stu
fonte
fonte
tr
chamada utilizandoawk -F'% '...
Respostas:
Você poderia fazer algo como
ou mesmo
Como as
awk
divisões nos espaços em branco, por padrão, não é necessário especificar o-F
e também não é necessário apará-lotr
. Por fim, especificando o número da linha de interesse (NR==2
), você também pode eliminartail
.fonte
-P
certo? Em todos os casos, o último campo impresso porawk
deve ser o disco.-P
opção que Gilles acabou de adicionar.-P
. No entanto, eu recomendo sempre usar-P
quando você estiver analisando a saída dedf
, é mais fácil do que verificar se esse uso específico é seguro.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
No GNU / Linux, se você possui o GNU
stat
do coreutils 8.6 ou superior, você pode:De outra forma:
Sua abordagem é válida, mas assume que o ponto de montagem não contém espaço,%, nova linha ou outros caracteres não imprimíveis; você pode simplificá-lo um pouco com as versões mais recentes do GNU
df
(8.21 ou superior):fonte
df
não reconhece a--output
opção.df
> = 8.21.Para Linux, temos o findmnt do util-linux feito exatamente para isso
Observe que algum tipo de ponto de montagem aleatório pode ser retornado caso haja várias montagens de ligação. O uso
df
tem o mesmo problema.fonte
Como
stat
retorna um campo "Dispositivo", fiquei curioso para ver como astat()
chamada de biblioteca subjacente poderia ser usada para obter essas informações programaticamente de maneira compatível com POSIX.Este trecho de código C:
Fornecerá os IDs principais e secundários do dispositivo que contém o arquivo listado na linha de comando (
argv[1]
). Infelizmente,major()
eminor()
não são POSIX, embora a página de manual afirme que eles estão "presentes em muitos outros sistemas" além do GNU / linux.Você pode obter uma correspondência entre o número principal / menor do dispositivo e o nó do dispositivo, por exemplo
/proc/diskstats
, e mapear isso para montar pontos/proc/mounts
, também conhecido como./etc/mtab
.Portanto, um utilitário de linha de comando para fazer isso seria bastante simples.
fonte
/proc/diskstats
é apenas para dispositivos de bloco, você vai perder o NFS, proc, fusível ... No Linux, pelo menos, diferentes pontos de montagem pode ter o mesmo maj + minst_dev
pode não oferecer uma maneira de distinguir uma partição NFS da outra. Quem realmente quer escrever isso terá que levar isso em conta;)Aqui está mais código C ++, se você quiser fazer isso em C ++ ...
Mais links para formas programáticas
fonte