回答:
以下のようステファンは言う「と普遍的なUnixの答えはありません」。
私の質問に私が見つけた最良の解決策:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
ファイルシステムのタイプを返します。例:nfs
またはext3
。
この-T
オプションは標準ではないため、他のUnix / Linuxシステムでは動作しない可能性があります...
以下のGillesのコメントによると:「これは、組み込みLinux以外で動作しますが、BusyBox、* BSDなどでは動作しません。」
/etc/mtab
たり結果を表示したりmount
するdf
こともできます。
/proc/mounts
mount
、も/etc/mtab
、でもない/proc/mounts
...標準装備されていないので、そこに見つけることができるかについての保証はありません
-T
ここでは異なる意味を持っているため、
GNUを使用できますstat
。
%m
マウントポイントを見つけます。
$ stat --format=%m /usr/src/linux
/usr/src
%T
(ファイルシステムモードで)ファイルシステムの名前を確認します。
$ stat --file-system --format=%T /usr/src/linux
reiserfs
したがって/usr/src/linux
、私のシステムでは、にマウントされ/usr/src
、ファイルシステムタイプがのファイルシステムに格納されていることがわかりますreiserfs
。
man stat
詳細なリファレンスについても参照してください。これは非常に用途のgrep | awk
広いコマンドであり、ファイルに関する情報が必要で、病みつきになりたくない場合にほぼ常に役立ちます。
stat
は(Debian Squeeze、coreutils 8.5を使用する)%m
オプションがありません--format
。したがって、このソリューションはあまり信頼性が高くないと思います。
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file
。それはほぼ3年前です。Debianにはまだこれがないのは驚くべきことです。
mount -l
、、またはを使用してgrep
、問題のディレクトリを参照する行を見つけます。sed
awk
/my/path/to/the/directory
が実際にマウントポイントから何か/my/path
があなたの答えであると理解するのは複雑に見えます。たぶん、あなたはについてのいくつかの詳細を与えることができgrep
、sed
、awk
あなたは(完全な答えを)提案するコマンド?。
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'
システム上のすべてのnfsマウントポイントのリストが表示されます。
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The
。mount`コマンドは、すべてのマウントポイントを<device> on <mountpoint> type <type>
形式で出力します。これを理解stat --printf
するために、on <mountpoint> type
パーツを生成しました。
残念ながら、それに対する普遍的なUnixの答えはありません。
特定のファイルに対してできることの1つ/a/b/c/d
は、パスをたどることです。
...そしてstat(2)
、st_dev
変更まで各レベルでa を行います。そうすれば、マウントポイントの場所がわかります。次に、ファイルシステムタイプを見つけるため/etc/mtab
に、またはその出力でそのマウントポイントの正規パスmount
を検索できます。次に、何がリモートで何がリモートであるかを見つけることは、特にヒューズタイプの場合には注意が必要です。たとえば、nfs
、cifs
、fuse.sshfs
、fuse.davfs
明白ですが、何について例えばfuse.gvfs-fuse-daemon
またはfuse.avfsd
その両方のネットワークと非ネットワークファイルを持つことができますか?
stat(2)
は、C関数を参照していると思いますが、シェルを使用しています。しかし、st_dev
メジャーとマイナーのデバイスIDを参照し、シェルコマンド(Linuxは、特定の?ということである)stat(1)
(非標準)を持つ%t
と%T
して--format
、それぞれメジャー番号とマイナー番号のオプション、しかし、それは常に(ローカルおよびNFSを「0」を返します)。Debian SqueezeとLennyを試しました。
--file-system
オプションを使用して、または使用せずにこれを試行していますか?
--file-system
ます。
df(1)の「-l」は、ローカル以外のファイルシステムではエラーで失敗するため、この動作を使用して、ファイルシステムがリモートであるかどうかを確認できます。
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
df
失敗する他のあらゆる種類の理由があり、それだけではあまり良い答えではありませんが、質問に答えようとしているので、なぜ「答えではない」と呼ぶのかわかりません。
私は個人的に使用しますmountpoint
(Linuxで非常にポータブルです!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
またはshowmount
、実際にNFS
共有(nfs-common
パッケージの一部)をマウントするシステムにインストールする必要があります:
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
別のオプションは次のようなものです:
$ mount -l -t nfs | grep 'my mount point'
mountpoint
が、この場合は標準です。
find . -type d -name nfs -exec mountpoint {} \; | grep not
マウントされている場合、「nfs」という名前のすべてのフォルダーをチェックします
nfs
。