jak sprawdzić format systemu plików

11

Chciałbym sprawdzić, w skrypcie bash, jaki typ systemu plików to katalog.

Pomysł jest podobny

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Dremor
źródło
Czy chcesz punkt montowania czy typ systemu plików? Jaka byłaby pożądana wydajność?
terdon

Odpowiedzi:

11

Zastosowanie df. Możesz przekazać mu ścieżkę, a otrzymasz informacje o systemie plików dla tej ścieżki. Jeśli potrzebujesz typu systemu plików, użyj -Tprzełącznika:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

Aby wyodrębnić typ systemu plików, możesz go przeanalizować (użyj -Pprzełącznika, aby uniknąć dfłamania linii, jeśli część urządzenia jest zbyt długa):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Możesz więc użyć tej wartości w takiej ifkonstrukcji:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Uważaj, że kolumna urządzenia może zawierać spacje (ale jest to rzadkie), w takim przypadku analiza nie powiedzie się.

marinus
źródło
12

W systemie z zainstalowaną komendą GNU stat (jak całkiem dobrze z każdą standardową dystrybucją Linuksa), możesz uzyskać typ fs dla danego pliku bez konieczności parsowania za pomocą statkomendy:

stat -f -c %T filename

-fkaże statpodać informacje o systemie plików zamiast pliku i -c %Tustawia format wyjściowy tak, aby zawierał tylko typ systemu plików czytelny dla człowieka ( %T).

Więc możesz użyć tego (w bash) jako:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat dostarczy więcej informacji.

rici
źródło
3

Z findmnt(częścią util-linux):

findmnt -no fstype -T /path/to/file

Podczas korzystania z opcji

-T, - ścieżka docelowa
jeśli ścieżka nie jest plikiem lub katalogiem punktu montowania, findmntsprawdza elementy ścieżki w odwrotnej kolejności, aby uzyskać punkt montowania. Pozostałe dwie opcje pomijają wiersz nagłówka: -n, --noheadingi wybierz kolumny do wyświetlenia:-o, --output


dffrom coreutilsma podobną opcję --output=drukowania tylko niektórych pól, takich jak fstypenp .:

df --output=fstype /path/to/file

nie ma opcji, aby usunąć nagłówek, więc będziesz musiał przesłać dane wyjściowe do np | sed 1d

don_crissti
źródło
Urocze findmntnarzędzie, nawet z wyjściem TUI do rysowania linii. Dzięki!
Incnis Mrsi