現在の作業ディレクトリのfsタイプを確認するにはどうすればよいですか?


19

プラットフォームに依存しない軽量な方法でCWDのマウントタイプを検出する必要があります。具体的には、CWDがSSHFS、NFS、CIFS、SMB、またはローカルブロックストアマウントにあるかどうかを判断する必要があります。

Mac OSX 10.6、10.7、およびRHEL5(少なくとも)でこれを行う必要があります。

dfを使用する可能性はありますが、dfはこれら2つのプラットフォームでまったく異なる動作をします。さらに、私はawkで出力をCLIでスクレイピングする必要がありますが、これは実行可能ですが、壊れやすいです。

この情報はあるレベルで利用可能でなければなりません。私がこの情報を提供してくれることを知らないツールはありますか?

回答:


17

ファイルシステムのタイプは、OSに依存しない方法で簡単にアクセスできるものではありません。ファイルシステムのタイプ名はOSに依存しているため、標準的な方法を確立するインセンティブはありません。

非組み込みLinuxシステムでstat -f -c %T .は、現在のディレクトリのファイルシステムタイプが表示されます。OSXのstatコマンドには、このようなものはありません。

知りたいのはファイルシステムのタイプが有限リストにあるかどうかだけなので、Linuxでは、情報を印刷するパスのセットとファイルシステムのタイプのセットの両方を制限できます。現在のディレクトリのファイルシステムタイプがリストにない場合、エラー(「df:処理されたファイルシステムなし」)が表示されます。

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

OSXでは同じ構文が機能する場合と機能しない場合があります。そうでない場合は、を試してくださいdf -T sshfs,nfs,cifs .


これはまさに私が必要としたものです。あなたは素晴らしいです!
ARX


4

Linuxでは、util-linux 2.18以降でfindmntを使用できます。

findmnt -n -o FSTYPE -T /home
nfs4

/ home / subdirでは機能しないため、OPの助けにはなりません。
エロフ

私にとっては、util-linux 2.23のfindmountを使用して、サブディレクトリでも機能します。
ルディミエ

3

テストはしていdf -Pませんが、ほとんどのプラットフォームで同じように動作するはずです。

これはLinuxで機能します。

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

または、再利用可能な関数に分割します:

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

そして、関数を呼び出す:

get_fs $(get_mount .)

sedまたはを使用して少し速くなるように書き直すこともできますがawk、おそらくこの方法の方が読みやすいでしょう。

これが機能しない場合は、同様のことを試してみてください。ただし/etc/mtab、の出力ではなくを使用しますmount


P中には、df -Pそれは同じように動作する必要がありますので、POSIXのためです。ただし、ファイルシステムパスからマウントポイントへの移動はより面倒です。
ジル「SO-悪であるのをやめる」

1
ディレクトリが-oループでマウントされている場合、ソリューションは安全ではないようです。少なくとも私のシステムでは、dfは使用されているループデバイスを示していますが、mountは使用されているイメージファイルを示しています。dfがmountのような同じデバイスを表示しない場合がさらにあると思います。mountのmanページからのこの引用に注意してください。「リストモードは後方互換性のためにのみ維持されています。より堅牢で定義可能な出力を得るには、特にスクリプトでfindmnt(8)を使用します。」
rudimeier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.