Dalam lingkungan umum unix modern (katakanlah, GNU / Linux, GNU / Solaris, atau Mac OS X), apakah ada cara yang baik untuk menentukan tipe mountpoint dan sistem file mana path file absolut tertentu aktif?
Saya kira saya bisa menjalankan mount
perintah dan secara manual mem-parsing keluaran itu dan membandingkannya dengan jalur file saya, tetapi sebelum saya melakukannya saya bertanya-tanya apakah ada cara yang lebih elegan.
Saya sedang mengembangkan skrip BASH yang menggunakan atribut diperluas, dan ingin membuatnya Melakukan Hal yang Benar (sebagian kecil dimungkinkan) untuk berbagai sistem file dan lingkungan host.
sumber
df -P
harus menghasilkan keluaran terstandardisasi pada sistem yang sesuai dengan POSIX. Beberapa sistem konyol mungkin memerlukan variabel lingkungan ajaib, seperti POSIXLY_CORRECT, yang harus ditetapkan juga.df /path-to-the-directory
akan memberi Anda partisi berisi direktori ituAnda bisa menggunakan stat . Perintah stat --printf '% d' filename.txt akan mengembalikan nomor perangkat sebagai hex / desimal.
sumber
stat --printf "%d"
tidak memberitahu Anda sejumlah kecil perangkat, tetapi masih ada banyak pekerjaan yang harus dilakukan untuk mendapatkan nama perangkat dan sistem file yang terpasang.stat --format '%m' $file
akan memberi Anda titik mount, danstat --file-system --format '%T' $mount
akan memberikan nama jenis sistem file.Untuk file tertentu saja semudah
sumber
Hm Untuk titik mount, Anda dapat naik hierarki sampai st_dev berubah (maka Anda baru saja melewati batas mount); ada GNU
stat
untuk skrip bash; Namun, saya tidak tahu bagaimana Anda bisa menebak tipe sistem file tanpa penguraian/proc/mounts
atau dengan coba-coba (yaitu menangani kegagalan setelah mengatur atribut yang diperluas)sumber
Salah satu yang perlu digunakan
df
adalah bahwa jika nama perangkat dalam output panjang, baris akan dibungkus sehingga Anda tidak bisa hanya mengambil baris terakhir. Alih-alih menghapus baris pertama dan kemudian ambil baris pertama yang baru dan kemudian cetak bidang pertama:sumber
Tampaknya ada masalah dengan df dan btrfs di Linux. Ketika Anda meminta df untuk menemukan titik mount untuk volume btrf yang terpasang, itu akan melakukan hal yang benar. Dalam hal ini, joe adalah sub-direktori dari / m / whale / backup.
Tetapi jika direktori yang direferensikan adalah sub-volume, itu tidak akan memberi tahu Anda titik pemasangan lagi.
/ A / whale / backup adalah satu-satunya titik pemasangan menurut kernel.
FWIW, stat melakukan hal yang sama:
sumber
Dari /programming/2167558/give-the-mount-point-of-a-path :
bekerja di mana saja saya telah menguji, untuk * BSD dan sysVs, dan untuk direktori automacked aneh. Saya akan senang mendengar kasus di mana ia gagal.
sumber
os.path.splitunc()
hanya berfungsi untuk jalur UNC dan hanya tersedia di Windows .