Mengapa ia mengeluh tentang jejak?

11

Setiap eksekusi lsofmasalah peringatan tentang TraceFS:

$ lsof any-file
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.

$ mount | grep trace
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)

(Ini di Ubuntu 15.10, sepenuhnya diperbarui)

Apakah normal bagi TraceFS untuk dipasang selama operasi normal?
Jika demikian, bagaimana saya bisa meminta lsofuntuk melewatinya?

Zilk
sumber

Jawaban:

12

Jawaban atas pertanyaan Anda ada dalam izin file:

mencoba:

$ ls -l /sys/kernel/debug/tracing
ls: cannot access '/sys/kernel/debug/tracing': Permission denied
$ ls -l /sys/kernel
total 0
...
drwx------  31 root root    0 2016-06-15 11:06:47 debug
...

Jadi, pengguna normal tidak diizinkan mengakses /sys/kernel/debug/tracingdan sepertinya tidak ada cara untuk meminta lsofuntuk tidak mengaksesnya.

Kami kemudian dapat mendiskusikan apakah ini bug atau tidak, tetapi jawaban untuk pertanyaan Anda sampai di sini.

EnzoR
sumber
Apa maksudmu "bug"? "lsof" perlu dieksekusi dengan "sudo" atau sebagai "root".
Rinzwind
1
Tidak perlu dijalankan sebagai root. Kita dapat membahas tentang keamanannya (lihat man lsof) tetapi jelas tidak perlu dijalankan hanya dengan hibah superuser. Itu duduk di / usr / bin tidak di / usr / sbin.
EnzoR
"Tidak ada cara untuk menghindarinya" adalah jawaban yang bisa diterima. Selain itu, tampaknya TraceFS tidak lagi di-mount secara default pada Ubuntu 16.04; peringatan saat dijalankan lsofsebagai pengguna biasa kini telah hilang.
Zilk
3
Saya menggunakan 16,04, itu belum hilang - masih menjadi masalah.
TenLeftFingers
@TenLeftFingers Ini berfungsi di Kubuntu 16.04 saya yang terbaru!
EnzoR
3

Saya memiliki masalah yang sama dan jawaban ini membantu saya untuk memahami masalah sedikit lebih baik.

Saya telah menemukan bahwa salah satu cara untuk menghapus peringatan yang mengganggu adalah dengan umount debugfs

mount | grep debugfs 
none on /sys/kernel/debug type debugfs (rw,_netdev)

sudo umount $(mount | grep debugfs | awk '{print $3}')

Jika Anda sekarang menjalankan lsoftidak ada peringatan.

damko
sumber
2
inilah mengapa saya datang mencari. Saya tidak begitu peduli mengapa kesalahan itu muncul. Saya benar-benar hanya ingin pergi. Terima kasih damko!
cjac
umount: /sys/kernel/debug: target is busy.
msangel
2

Masalahnya adalah Anda tidak memiliki izin untuk mengakses direktori debugfs. Direktori tracefs dibuat untuk memungkinkan orang memasang direktori tracing secara langsung di / sys / kernel / tracing dan tidak memerlukan debugf yang diaktifkan. Tetapi untuk kompatibilitas, ketika memasang direktori debugfs, ia akan secara otomatis me-mount tracefs di direktori "tracing" dari debugfs.

Sekarang ketika Anda menjalankan lsof, ia akan melihat file / proc / filesystems dan / proc / mounts. Ia melihat bahwa tracefs di-mount di / sys / kernel / debug / tracing, dan dengan demikian mencoba untuk membuatnya stat. Sayangnya, karena / sys / kernel / debug tidak akan membiarkan pengguna non-root melihat di dalamnya, Anda mendapatkan pesan kesalahan ketika mencoba untuk stat direktori "tracing" dari dalam / sys / kernel / debug. Jika Anda melepas direktori debugfs, peringatan itu akan hilang.

nevets
sumber
0

Peringatan ini ditulis untuk stderr. Anda selalu bisa mengarahkan ini ke / dev / null:

lsof <any-file> 2>/dev/null

Bersulang,

Prototipe cepat
sumber