lsof:警告:fuse.gvfsd-fuseファイルシステムをstat()できません


25

ここで何が起きているのでしょうか?

root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec  4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

lsof|grep なしで)発行するだけでこの警告が表示されますか?
スリー14

どちらの方法でも同じ警告が発生しますlsofが、開いているファイルの大きなリストが出力されるだけです。副次的な問題だと思います。プロセスによってファイルが開かれたままになっている可能性があり、それがルートがファイルを移動できなかった理由かもしれないと考えましたが、そうではないようです。したがって、混乱。
jmunsch

1
ええ、can't stat...別の問題のように見えます。本当の問題はNo such file or directoryあなたが得ているエラーだと思います。これはばかげているように聞こえるかもしれませんが、場所/ home / bob / Desktopは存在しますか?
スリー

回答:


30

FUSEとそのアクセス権

lsofデフォルトでは、FUSE(Linuxで特別なアクセス権を持つユーザー空間に実装されたファイルシステム)を含む、マウントされたすべてのファイルシステムをチェックします。

Ask Ubuntuのこの回答でわかるように、マウントされたGVFSファイルシステム(FUSEの特殊なケース)は通常、それをマウントしたユーザー(の所有者gvfsd-fuse)のみがアクセスできます。でもrootアクセスできません。この制限を無効にするために、マウントオプションallow_rootとを使用できますallow_other。オプションは、この回答の例で説明されているFUSEデーモンでも有効にする必要がありますが、アクセス権を変更する必要はありません(変更すべきではありません)。

lsofからファイルシステムを除外する

あなたの場合lsof、GVFSファイルシステムをチェックする必要はありませんのでstat()-eオプションを使用してそれらの呼び出しを除外できます(または、警告を無視することができます):

lsof -e /run/user/1000/gvfs

lsofによる特定のファイルの確認

lsofシステムで実行されているすべてのプロセスに関する情報を取得するために使用している場合にのみ、を使用して完全な出力をフィルタリングしますgrep。特定のファイルだけをチェックする場合、関連するプロセスが-fオプションを使用し、その直後に値がない場合は、「オプションの終わり」セパレーターの後にファイルのリストを指定します--。これはかなり速くなります。

lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv

一般的な解決策

stat()失敗したすべてのマウントされたファイルシステムを除外するには、次のようなものを実行できます(bash):

x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv

または、必ず使用してくださいstat()test -e別の方法で実装できます):

x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done

11

lsof引数がたまたま特定のファイルシステムから結果が得られないことを意味する場合でも、すべてのファイルシステムに関する基本的な情報を常に取得しようとします。ファイルシステムにアクセスできない場合(具体的にstatは、メッセージが示すようにマウントポイントで呼び出すため)、文句を言います。

通常、ルートとして、ファイルシステムにアクセスする権限があります。ただし、FUSEの内部動作により、rootはFUSEファイルシステムのすべての機能を自動的に持つわけではありません。これはセキュリティ機能ではありません(rootはファイルシステムを所有するユーザーになり、その方法でアクセスできます)。これは技術的な制限です。

GVFS-FUSEは、GnomeアプリケーションがGnomeプラグインによって実装された仮想ファイルシステムにアクセスすることを可能にするメカニズムであるGVFSへのFUSE インターフェースです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.