Как получить информацию о файловой системе для конкретного файла?

8

Каков наилучший способ узнать информацию о файле файловой системы.

Например, если у меня есть файл

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

И /etc/fstabсодержит

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

Как определить, что файл находится на общем ресурсе Samba, имеет локальный путь /path/to/file.extи с какими параметрами была смонтирована файловая система?

Разбирает ли вывод mountпортативного решения? Или разобрать findmnt? Есть ли POSIX-совместимый способ добиться этого?

кба стоит с моникой
источник
df /path/to/fileдолжен показать раздел или монтировать.
августа
Спасибо @thrig, это делает первый шаг. Каков наилучший способ получить информацию, такую ​​как параметры монтирования оттуда?
KBA стоит с Моникой
На Linux я могу разобрать /proc/mounts. Есть ли совместимый с BSD / OSX способ добиться того же?
КБА стоит с Моникой
просто глядя на файлы? ты не можешь! в этом прелесть Unix-подобных операционных систем, приложения могут получать к ним доступ, используя путь независимо от их физического местоположения
Эдвард Торвальдс,
@edwardtorvalds Нет, не просто просматривая файлы, поэтому я спросил о синтаксическом анализе mountи т. д. для получения файловой системы и опций и т. д. Я до сих пор не уверен в том, как лучше всего найти эту информацию в * BSD и OSX. У меня не было времени поработать над библиотекой, которая требует этого, но когда я это сделаю, я получу обратную связь Из того, что я видел, mount -Pкажется довольно надежным для Linux / BSD.
КБА стоит с Моникой

Ответы:

1

stat (1) - это портативный способ узнать некоторые из этих сведений, например:

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

Все остальное очень зависит от ОС, на последних системах Linux вы можете легко использовать findmnt --outputв скрипте.

Марко д'Итри
источник
statтакже специфичен для ОС.
don_crissti
0

если я правильно понял вашу потребность и, комбинируя биты из предыдущих ответов, вам может понадобиться следующее. определить в скрипте (например, в вашем .bashrc) -

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

и тогда вы можете запустить его по мере необходимости

findpart /foo/file.ext
Гил Шабтай
источник
findmntне нужно всего этого, он может сделать это сам по себе
don_crissti
теоретически да. на практике я не мог заставить -T работать с centos 6, тогда как это решение делает.
Гил Шабтай