web-dev-qa-db-ja.com

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

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

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

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

この情報は、ある程度のレベルで利用できる必要があります。この情報を私に提供できるとは知らないツールはありますか?

18
Chris R

ファイルシステムのタイプは、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 .

LinuxではGNU statを使用できます。

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

Linuxでは、util-linux 2.18以降で使用可能なfindmntがあります。

findmnt -n -o FSTYPE -T /home
nfs4
4
rudimeier

まだテストしていませんが、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の出力。

3
Mikel