Geçerli çalışma dizinimin fs türünü nasıl belirleyebilirim?


19

CWD'm montaj tipini tespit etmek için platformdan bağımsız ve hafif bir yola ihtiyacım var. Özellikle, benim CWD bir SSHFS, NFS, CIFS, SMB veya yerel blok mağaza montaj olup olmadığını belirlemek gerekir.

Bunu Mac OSX 10.6, 10.7 ve RHEL5'te (en azından) yapmam gerekiyor.

Df kullanma olasılığı vardır, ancak df bu iki platformda oldukça farklı davranır. Ayrıca, CLI çıktısını awk ile kazımak zorunda kalacağım, bu da uygulanabilirken kırılgan.

Bu bilgi bir düzeyde mevcut olmalıdır. Bu bilgiyi bana sağlayabileceğinden habersiz olduğum bir araç var mı?

Yanıtlar:


17

Dosya sistemi türü, işletim sisteminden bağımsız bir şekilde kolayca erişebileceğiniz bir şey değildir. Dosya sistemi türü adları işletim sistemine bağlıdır, bu nedenle standart bir yöntem oluşturmak için herhangi bir teşvik olmamıştır.

Gömülü olmayan Linux sistemlerinde, stat -f -c %T .geçerli dizinin dosya sistemi türünü gösterir. OSX'in statkomutunda böyle bir şey yok.

Bilmek istediğiniz tek şey dosya sistemi türünün sonlu bir listede olup olmadığıdır, Linux altında, hem bilgi yazdırmak için yol kümesini hem de dosya sistemi türü kümesini sınırlayabilirsiniz. Geçerli dizinin dosya sistemi türü listede yoksa bir hata alırsınız (“df: dosya sistemi işlenmez”).

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

Aynı sözdizimi OSX üzerinde çalışabilir veya çalışmayabilir; değilse, deneyin df -T sshfs,nfs,cifs ..


Tam da ihtiyacım olan şey bu. Gilles harikasın!
ARX

7

Linux'ta GNU statünü kullanabilirsiniz:

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

Bu harika çünkü alt dizinlerde çalışıyor. Teşekkürler!
Avindra Goolcharan

4

Linux'ta util-linux 2.18'den beri findmnt mevcut.

findmnt -n -o FSTYPE -T /home
nfs4

/ Home / subdir için çalışmaz, bu nedenle OP'ye yardımcı olmaz.
Eloff

Benim için util-linux 2.23'ten findmount kullanarak alt dizinler için de çalışır.
Rudimeier

3

Test etmedim, ancak df -Pçoğu platformda aynı şekilde davranmalıdır.

Bu Linux üzerinde çalışır.

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

Veya yeniden kullanılabilir işlevlere bölmek:

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

Ve işlevi çağırmak:

get_fs $(get_mount .)

sedVeya kullanarak biraz daha hızlı olacak şekilde yeniden yazılabilir awk, ancak bu yolun okunması muhtemelen daha kolaydır.

Bu işe yaramazsa, benzer bir şey deneyebilirsiniz, ancak /etc/mtabçıktısını kullanmak yerine mount.


Pİçinde df -Paynı şekilde davranması gerektiğini, böylece POSIX içindir. Ancak, dosya sistemi yolundan bağlama noktasına gitmek daha zordur.
Gilles 'SO- kötü olmayı kes

1
Dizin -o döngüsüyle bağlanmışsa çözümünüz güvenli görünmüyor. En azından benim sistemimde df kullanılan döngü aygıtını gösterir, ancak mount kullanılan görüntü dosyasını gösterir. Sanırım df'nin mount gibi aynı cihazı göstermediği daha da fazla durum olabilir. Bağlantının man sayfasındaki bu alıntıya dikkat edin "Liste modu yalnızca geriye dönük uyumluluk için korunur. Daha sağlam ve tanımlanabilir çıktı için özellikle komut dosyalarınızda findmnt (8) kullanın."
rudimeier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.