ここで何が起こっているのでしょうか?
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.
ベストアンサー1
FUSEとそのアクセス権
lsof
デフォルトでは、以下を含むマウントされたすべてのファイルシステムがチェックされます。ヒューズ- Linuxで特別なアクセス権を持つユーザースペースに実装されたファイルシステム。
あなたが見たようにAsk Ubuntuへの回答インストール済み重力加速度センサーファイルシステム(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