FUSE dan hak aksesnya
lsof
secara default memeriksa semua sistem file yang dipasang termasuk FUSE - sistem file yang diterapkan di ruang pengguna yang memiliki hak akses khusus di Linux.
Seperti yang Anda lihat dalam jawaban ini pada Ask Ubuntu, sistem file GVFS yang terpasang (kasus khusus FUSE) biasanya hanya dapat diakses oleh pengguna yang memasangnya (pemilik gvfsd-fuse
). Bahkan root
tidak dapat mengaksesnya. Untuk mengesampingkan pembatasan ini, dimungkinkan untuk menggunakan opsi mount allow_root
dan allow_other
. Opsi ini juga harus diaktifkan di daemon FUSE yang dijelaskan sebagai contoh dalam jawaban ini ... tetapi dalam kasus Anda, Anda tidak perlu (dan tidak boleh) mengubah hak akses.
Tidak termasuk sistem file dari lsof
Dalam kasus Anda, Anda lsof
tidak perlu memeriksa sistem file GVFS sehingga Anda dapat mengecualikan stat()
panggilan pada mereka menggunakan -e
opsi (atau Anda bisa mengabaikan waring):
lsof -e /run/user/1000/gvfs
Memeriksa file tertentu oleh lsof
Anda menggunakan lsof
untuk mendapatkan informasi tentang semua proses yang berjalan pada sistem Anda dan hanya kemudian Anda memfilter output lengkap menggunakan grep
. Jika Anda ingin memeriksa hanya file tertentu dan proses terkait menggunakan -f
opsi tanpa nilai langsung mengikutinya maka tentukan daftar file setelah pemisah "akhir opsi" --
. Ini akan jauh lebih cepat.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
Solusi umum
Untuk mengecualikan semua sistem file yang terpasang yang stat()
gagal, Anda dapat menjalankan sesuatu seperti ini bash
:
x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv
Atau pasti menggunakan stat()
( test -e
bisa diterapkan dengan cara yang berbeda):
x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done
lsof
(tanpa|
dan grep)?