Bagaimana saya bisa menentukan tipe fs dari direktori kerja saya saat ini?


19

Saya membutuhkan cara yang bebas platform dan ringan untuk mendeteksi tipe mount CWD saya. Khususnya, saya perlu menentukan apakah CWD saya berada di SSHFS, NFS, CIFS, SMB, atau mount block store lokal.

Saya perlu melakukan ini pada Mac OSX 10.6, 10.7, dan RHEL5 (minimal).

Ada kemungkinan menggunakan df, tetapi df berperilaku sangat berbeda pada kedua platform ini. Plus, saya harus mengikis keluarannya dengan awk, yang walaupun bisa diterapkan ... rapuh.

Info ini harus tersedia pada tingkat tertentu. Apakah ada alat yang tidak saya sadari yang dapat memberikan informasi ini kepada saya?

Jawaban:


17

Jenis sistem file bukanlah sesuatu yang dapat Anda akses dengan mudah dengan cara yang bebas OS. Nama tipe filesystem tergantung pada OS, jadi belum ada insentif untuk membuat metode standar.

Pada sistem Linux yang tidak tertanam, stat -f -c %T .menunjukkan tipe sistem file dari direktori saat ini. statPerintah OSX tidak memiliki yang seperti ini.

Karena yang ingin Anda ketahui adalah apakah tipe sistem file ada dalam daftar terbatas, di Linux, Anda dapat membatasi kumpulan path untuk mencetak informasi dan kumpulan tipe sistem file. Anda akan mendapatkan kesalahan ("df: tidak ada sistem file yang diproses") jika jenis sistem file dari direktori saat ini tidak ada dalam daftar.

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

Sintaks yang sama mungkin atau mungkin tidak berfungsi pada OSX; jika tidak, coba df -T sshfs,nfs,cifs ..


Inilah yang saya butuhkan. Gilles kamu hebat!
ARX

7

Anda dapat menggunakan stat GNU di Linux:

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

Ini bagus karena berfungsi pada subdirektori. Terima kasih!
Avindra Goolcharan

4

Di Linux ada findmnt tersedia sejak util-linux 2.18.

findmnt -n -o FSTYPE -T /home
nfs4

Tidak bekerja untuk / home / subdir, jadi tidak akan membantu OP.
Eloff

Bagi saya ini juga berfungsi untuk subdir, menggunakan findmount dari util-linux 2.23.
rudimeier

3

Belum mengujinya, tetapi df -Pharus berperilaku sama di sebagian besar platform.

Ini berfungsi di Linux.

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

Atau memecahnya menjadi fungsi yang dapat digunakan kembali:

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

Dan memanggil fungsi:

get_fs $(get_mount .)

Bisa ditulis ulang menjadi sedikit lebih cepat menggunakan sedatau awk, tetapi cara ini mungkin lebih mudah dibaca.

Jika ini tidak berhasil, Anda dapat mencoba sesuatu yang serupa, tetapi menggunakan /etc/mtabdaripada output mount.


The Pdalam df -Padalah untuk POSIX, sehingga harus berperilaku dengan cara yang sama. Namun, mendapatkan dari jalur filesystem ke titik mount lebih fiddly.
Gilles 'SANGAT berhenti menjadi jahat'

1
Solusi Anda tampaknya tidak aman jika direktori di-mount dengan -o loop. Setidaknya pada sistem saya df menunjukkan perangkat loop yang digunakan tetapi mount menunjukkan file gambar yang digunakan. Saya kira mungkin ada lebih banyak kasus di mana df tidak menunjukkan perangkat yang sama seperti mount. Perhatikan kutipan ini dari halaman manual mount "Mode listing dipertahankan hanya untuk kompatibilitas. Untuk output yang lebih kuat dan dapat didefinisikan gunakan findmnt (8), terutama di skrip Anda."
rudimeier
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.