Як я можу визначити тип fs мого поточного робочого каталогу?


19

Мені потрібен незалежний від платформи і легкий спосіб виявлення типу кріплення мого CWD. Зокрема, мені потрібно визначити, чи мій CWD знаходиться в кріпленні SSHFS, NFS, CIFS, SMB або локальному блоці.

Мені потрібно це зробити на Mac OSX 10.6, 10.7 та RHEL5 (як мінімум).

Існує можливість використання df, але df веде себе по-різному на цих двох платформах. Плюс до того, я повинен був би CLI скребти свій результат із awk, який, хоча працює, є ... крихким.

Ця інформація повинна бути доступною на певному рівні. Чи є інструмент, про який я не знаю, який міг би надати мені цю інформацію?

Відповіді:


17

Тип файлової системи - це не те, до чого легко отримати доступ незалежно від ОС. Імена типів файлової системи залежать від ОС, тому не було стимулів встановлювати стандартний метод.

У невбудованих системах Linux stat -f -c %T .показує тип файлової системи поточного каталогу. statКоманда OSX не має нічого подібного.

Оскільки все, що ви хочете знати, - це тип файлової системи в кінцевому списку, в Linux, ви можете обмежити як набір шляхів для друку інформації, так і набір типів файлової системи. Ви отримаєте помилку ("df: файлова система не обробляється"), якщо тип файлової системи поточного каталогу відсутній у списку.

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

Один і той же синтаксис може працювати або не працювати в OSX; якщо ні, спробуйте df -T sshfs,nfs,cifs ..


Це саме те, що мені було потрібно. Жиль, ти чудовий!
ARX

7

Ви можете використовувати статистику GNU в Linux:

stat --file-system --format=%T /tmp/subdir/whatever
tmpfs

Це чудово, оскільки він працює в підкаталогах. Спасибі!
Avindra Goolcharan

4

У Linux є Findmnt доступний з часу util-linux 2.18.

findmnt -n -o FSTYPE -T /home
nfs4

Не працює для / home / subdir, тому це не допоможе ОП.
Елофф

Для мене він працює і для підкаталогів, використовуючи findmount від util-linux 2.23.
rudimeier

3

Не перевіряв, але df -Pповинен поводитись так само на більшості платформ.

Це працює в Linux.

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

Або розбивши його на багаторазові функції:

# 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 ' '
}

І виклик функції:

get_fs $(get_mount .)

Може бути переписаний, щоб бути трохи швидшим за допомогою sedабо awk, але цей спосіб, ймовірно, легше читати.

Якщо це не працює, ви можете спробувати щось подібне, але використовуючи, /etc/mtabа не вихідний mount.


PУ df -Pдля POSIX, тому він повинен вести себе таким же чином. Однак, шлях від файлової системи до точки монтування більш спритний.
Жил 'ТАК - перестань бути злим'

1
Схоже, ваше рішення не є безпечним, якщо каталог встановлено з -o циклом. Принаймні, у моїй системі df показано використаний циклічний пристрій, але в монтажі показано використаний файл зображення. Я думаю, що може бути ще більше випадків, коли df не показує такий самий пристрій, як mount. Зверніть увагу на цю цитату на головній сторінці mount "Режим лістингу підтримується лише для зворотної сумісності. Для більш надійного та визначеного виводу використовуйте findmnt (8), особливо у своїх сценаріях."
rudimeier
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.