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


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, тогда как это решение делает.
Гил Шабтай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.