CWDのインストールタイプを検出するには、軽量でプラットフォームに依存しない方法が必要です。特に、CWDがSSHFS、NFS、CIFS、SMB、またはローカルブロックストレージマウントにあることを確認する必要があります。
Mac OSX 10.6、10.7、およびRHEL5(少なくとも)でこれを行う必要があります。
dfは使用できますが、dfは両方のプラットフォームでまったく異なる動作をします。また、出力を傷つけるためにawk CLIを使用する必要がありましたが、うまくいきましたが…不安定でした。
この情報はある程度利用可能でなければなりません。この情報を提供できる私が知らないツールはありますか?
答え1
オペレーティングシステムに依存しない方法でファイルシステムの種類に簡単にアクセスすることはできません。ファイルシステムのタイプ名はオペレーティングシステムによって異なるため、標準的なアプローチを設定する誘惑はありません。
含まないLinuxシステムでは、stat -f -c %T .
現在のディレクトリのファイルシステムタイプを表示します。 OSXstat
コマンドにはそのようなものはありません。
あなたが知りたいのは、ファイルシステムタイプが制限されたリストにあるかどうかだけなので、Linuxでは情報が印刷されるパスとファイルシステムタイプのセットを制限できます。現在のディレクトリのファイルシステムタイプがリストにない場合、エラー(「df:未処理のファイルシステム」)が発生します。
if df -t sshfs -t nfs -t cifs . >/dev/null 2>/dev/null; then …
同じ構文が OSX で動作する場合と動作しない場合があります。そうでない場合は試してくださいdf -T sshfs,nfs,cifs .
。
答え2
LinuxではGNU統計を使用できます。
stat --file-system --format=%T /tmp/subdir/whatever
tmpfs
答え3
Linuxではutil-linux 2.18以降、findmntを使用できます。
findmnt -n -o FSTYPE -T /home
nfs4
答え4
これはテストされていませんが、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
orを使って少し速くすることができますが、awk
この方法で読むのは簡単です。
それでも機能しない場合は、同様のことを試してみることができますが、/etc/mtab
代わりに出力を使用してくださいmount
。