web-dev-qa-db-ja.com

フォルダーがマウントされたリモートファイルシステムかどうかを確認する

シェルスクリプト内のマウントされたリモート(nfs)ファイルシステムに特定のフォルダーが存在するかどうかを確認するための最良の方法(信頼性、移植性など)は何ですか?

次のようなコマンドを探しています。

chk-remote-mountpoint /my/path/to/folder 
44
Totor

Stephaneが言うように、「それに対する普遍的なUnixの答えはありません」。

私の質問に対して見つけた最良の解決策:

df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'

ファイルシステムのタイプを返します。例:nfsまたはext3

-Tオプションではない 標準なので、他のUnix/Linuxシステムでは機能しない可能性があります...

以下のGillesのコメントによれば、「これは組み込みでないLinuxでは機能しますが、BusyBox、* BSDなどでは機能しません。」

34
Totor

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 | awkwardnessにフォールバックしたくない場合に、ほとんど常に役立ちます。

13
frostschutz

mount -lおよびgrepsed、またはawkを使用して、問題のディレクトリを参照する行を見つけます。

5
jayhendren

Df(1)の "-l"は、ローカル以外のファイルシステムではエラーで失敗するため、この動作を使用して、ファイルシステムがリモートかどうかを確認できます。

df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fi

しかし -lオプションは 標準ではない です。

2
rsone1

残念ながら、それに対する普遍的なUnixの答えはありません。

あなたができることの一つは、与えられたファイルに対して_/a/b/c/d_がパスをたどることです:

  • / a/b/c /。
  • / a/b/c/..
  • /a/b/c/../ ..
  • ...

..._st_dev_が変更されるまで、各レベルでstat(2)を実行します。次に、マウントポイントの場所がわかります。次に、_/etc/mtab_またはmountの出力でそのマウントポイントの正規パスを検索して、ファイルシステムタイプを確認できます。次に、特にFuseタイプのリモートでは、リモートと非リモートを見つけるのが難しくなります。たとえば、nfscifs、_Fuse.sshfs_、_Fuse.davfs_は明白ですが、たとえば、_Fuse.gvfs-Fuse-daemon_または_Fuse.avfsd_ネットワークと非ネットワークの両方のファイル?

2

df /pathは、マウントポイントが/pathではないと言う場合、/がマウントポイントであることを通知します。

1
pgen

行う:

df /me/path/to/folder

最初のフィールド(ファイルシステム)の形式がHost:/ pathの場合、NFSであることがわかります。

そう:

df /my/path/to/folder | awk 'NR==1{next};$1~/:[/]/{print "yes";exit(0)};{print "No";exit(1)}'

次に、「ifchk-remote-mountpoint」という名前のbashファイルに入れます。

使用法:

if ifchk-remote-mountpoint  /my/path/to/folder >/dev/null; then
    ...do something...
fi

または:

ISNFS=$(ifchk-remote-mountpoint  /my/path/to/folder)
1
Udi

df -t Linuxおよびdf -T BSDシステムの場合。

から man df

-t、-type = TYPE

リストをタイプTYPEのファイルシステムに制限する

if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi
0
codeforester