як перевірити формат файлової системи


11

Я хотів би в скрипті bash перевірити, яка файлова система вводить каталог.

Ідея чимось схожа

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

Ви хочете точку монтування або тип файлової системи? Яким буде бажаний вихід?
terdon

Відповіді:


11

Використовуйте 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

Слідкуйте за тим, що стовпець пристрою може містити пробіли (але це рідко), і в цьому випадку розбір не вдасться.


12

У системі із встановленою командою 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 надасть більше інформації.


3

З 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-висновком для малювання ліній. Спасибі!
Incnis Mrsi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.