Відповіді:
Використовуйте df
. Ви можете пройти йому шлях, і він дасть вам інформацію про файлову систему для цього шляху. Якщо вам потрібен тип файлової системи, використовуйте -T
перемикач так:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
Щоб витягти тип файлової системи, ви можете її проаналізувати (використовуйте -P
перемикач, щоб уникнути df
розривів ліній, якщо частина пристрою занадто довга):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Таким чином, ви можете використовувати це значення в if
такій конструкції:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
Слідкуйте за тим, що стовпець пристрою може містити пробіли (але це рідко), і в цьому випадку розбір не вдасться.
У системі із встановленою командою GNU stat (як і в будь-якому стандартному дистрибутиві Linux) ви можете отримати тип fs для даного файлу, не вимагаючи розбору за допомогою stat
команди:
stat -f -c %T filename
-f
Вказує stat
надати інформацію про файлову систему замість файлу та -c %T
встановлює вихідний формат, щоб він включав лише тип файлової системи, що читається людиною ( %T
).
Таким чином, ви можете використовувати це (в bash) як:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat
надасть більше інформації.
З findmnt
(частина util-linux
):
findmnt -no fstype -T /path/to/file
При використанні опції
-T, --цільовий шляхякщо шлях не є файлом або каталогом монтажу,
findmnt
перевіряє елементи контуру в зворотному порядку, щоб отримати точку монтування. Інші два варіанти придушують рядок заголовка: -n, --noheading
і вибирають стовпець (и), які потрібно вказати:-o, --output
df
з coreutils
має подібний варіант --output=
друкувати лише певні поля, наприклад, fstype
наприклад:
df --output=fstype /path/to/file
однак немає можливості видалити заголовок, тому вам доведеться передавати вихід, наприклад | sed 1d
findmnt
інструмент, навіть з TUI-висновком для малювання ліній. Спасибі!