cara memeriksa format sistem file

11

Saya ingin memeriksa, dalam skrip bash, pada tipe filesystem apa sebuah direktori.

Idenya adalah sesuatu seperti

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Dremor
sumber
Apakah Anda ingin mount point atau tipe sistem file? Akan seperti apa output yang Anda inginkan?
terdon

Jawaban:

11

Gunakan df. Anda dapat melewatinya lintasan, dan itu akan memberi Anda informasi sistem file untuk lintasan itu. Jika Anda memerlukan tipe sistem file, gunakan -Tswitch, seperti:

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

Untuk mengekstrak jenis sistem file, Anda dapat menguraikannya (gunakan -Psakelar untuk menghindari dfterputusnya jalur jika bagian perangkat terlalu panjang):

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

Jadi Anda bisa menggunakan nilai itu dalam ifkonstruk seperti:

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

Berhati-hatilah karena kolom perangkat dapat berisi spasi (tetapi jarang), dalam hal ini penguraian akan gagal.

marinus
sumber
12

Pada sistem dengan perintah stat GNU terinstal (seperti halnya dengan semua distro Linux standar), Anda bisa mendapatkan jenis fs untuk file yang diberikan tanpa memerlukan penguraian menggunakan statperintah:

stat -f -c %T filename

-fmemberitahu statuntuk memberikan informasi tentang sistem file dan bukan file, dan -c %Tmengatur format output untuk menyertakan hanya tipe sistem file yang dapat dibaca manusia ( %T).

Jadi Anda bisa menggunakannya (dalam bash) sebagai:

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

man stat akan memberikan informasi lebih lanjut.

rici
sumber
3

Dengan findmnt(bagian dari util-linux):

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

Saat menggunakan opsi

-T, jalur --target
jika path bukan file atau direktori mountpoint, findmntperiksa elemen path dalam urutan terbalik untuk mendapatkan mountpoint. Dua opsi lainnya menekan baris header: -n, --noheadingdan pilih kolom yang akan dicantumkan:-o, --output


dfdari coreutilsmemiliki opsi serupa --output=untuk hanya mencetak bidang tertentu, seperti fstypemisalnya:

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

tidak ada opsi untuk menghapus header, jadi Anda harus mem-pipe output ke mis | sed 1d

don_crissti
sumber
findmntAlat yang lucu , bahkan dengan output TUI garis-gambar. Terima kasih!
Incnis Mrsi