Apa sebenarnya yang terjadi di sini?
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.
privileges
lsof
fuse
Jonunsch
sumber
sumber
lsof
(tanpa|
dan grep)?lsof
menampilkan daftar besar file yang terbuka. Saya pikir ini adalah masalah sampingan. Saya pikir mungkin file itu ditahan terbuka oleh suatu proses dan itu mungkin menjadi alasan mengapa root tidak dapat memindahkan file, tetapi sepertinya bukan itu masalahnya. Karena itu kebingungan.can't stat...
ini masalah lain. Saya berasumsi masalah sebenarnya adalahNo such file or directory
kesalahan yang Anda dapatkan. Ini mungkin terdengar konyol, tetapi apakah lokasi / home / bob / Desktop ada?Jawaban:
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
). Bahkanroot
tidak dapat mengaksesnya. Untuk mengesampingkan pembatasan ini, dimungkinkan untuk menggunakan opsi mountallow_root
danallow_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 mengecualikanstat()
panggilan pada mereka menggunakan-e
opsi (atau Anda bisa mengabaikan waring):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 menggunakangrep
. 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.Solusi umum
Untuk mengecualikan semua sistem file yang terpasang yang
stat()
gagal, Anda dapat menjalankan sesuatu seperti inibash
:Atau pasti menggunakan
stat()
(test -e
bisa diterapkan dengan cara yang berbeda):sumber
lsof
selalu berusaha untuk mendapatkan beberapa informasi dasar tentang semua sistem file, bahkan jika argumennya menyiratkan bahwa tidak ada hasil yang akan datang dari sistem file tertentu. Jika tidak dapat mengakses sistem file (khususnya, untuk memanggilstat
pada titik mountnya, seperti pesan tersebut katakan), ia mengeluh.Sebagai root, Anda biasanya memiliki izin untuk mengakses sistem file. Namun, karena inner FUSE , root tidak secara otomatis memiliki semua kekuatan pada sistem file FUSE. Ini bukan fitur keamanan (root dapat menjadi pengguna yang memiliki sistem file dan mendapatkan akses seperti itu), ini adalah batasan teknis.
GVFS-FUSE adalah antarmuka FUSE ke GVFS , yang merupakan mekanisme yang memungkinkan aplikasi Gnome untuk mengakses sistem file virtual yang diterapkan oleh plugin Gnome: GVFS memberikan akses aplikasi non-Gnome ke sistem file virtual ini melalui antarmuka sistem file biasa.
sumber