ทำไม lsof ถึงบ่นเกี่ยวกับ tracefs?


11

การดำเนินการทุกครั้งจะlsofมีคำเตือนเกี่ยวกับ 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)

(นี่คือ Ubuntu 15.10, อัปเดตอย่างสมบูรณ์)

เป็นเรื่องปกติหรือไม่ที่จะต้องติดตั้ง TraceFS ระหว่างการทำงานปกติ
ถ้าเป็นเช่นนั้นฉันlsofจะบอกให้ข้ามได้อย่างไร

คำตอบ:


12

คำตอบสำหรับคำถามของคุณอยู่ในการอนุญาตของไฟล์:

ลอง:

$ 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
...

ดังนั้นผู้ใช้ปกติจะไม่ได้รับอนุญาตให้เข้าถึง/sys/kernel/debug/tracingและดูเหมือนว่าจะไม่มีทางขอlsofให้หลีกเลี่ยงการเข้าถึง

จากนั้นเราสามารถพูดคุยกันว่านี่เป็นข้อผิดพลาดหรือไม่ แต่คำตอบสำหรับคำถามของคุณจะลดลงไปเรื่อย ๆ


คุณหมายถึง "บั๊ก" หมายถึงอะไร "lsof" ต้องดำเนินการด้วย "sudo" หรือ "root"
Rinzwind

1
lsof ไม่จำเป็นต้องถูกเรียกใช้ในฐานะรูท เราสามารถพูดคุยเกี่ยวกับความปลอดภัยของมัน (ดู man lsof) แต่แน่นอนว่ามันไม่จำเป็นที่จะต้องทำงานกับ superuser ที่มอบให้ มันอยู่ใน / usr / bin ไม่ได้อยู่ใน / usr / sbin
EnzoR

"วิธีหลีกเลี่ยงไม่ได้" เป็นคำตอบที่ยอมรับได้อย่างสมบูรณ์ นอกจากนี้ดูเหมือนว่า TraceFS จะไม่ถูกเมานท์เป็นค่าเริ่มต้นตั้งแต่ Ubuntu 16.04 อีกต่อไป คำเตือนเมื่อทำงานlsofในฐานะผู้ใช้ปกติในขณะนี้ได้หายไป
Zilk

3
ฉันอยู่ที่ 16.04 มันไม่ได้หายไป - ยังเป็นปัญหาอยู่
TenLeftFingers

@TenLeftFingers มันทำงานได้ดีใน Kubuntu ล่าสุดของฉัน 16.04!
EnzoR

3

ฉันมีปัญหาเดียวกันและคำตอบนี้ช่วยให้ฉันเข้าใจปัญหาได้ดีขึ้นเล็กน้อย

ฉันพบว่าวิธีหนึ่งในการลบคำเตือนที่น่ารำคาญคือการเพิ่มจำนวน debugfs

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

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

หากคุณเรียกใช้ตอนนี้lsofจะไม่มีการเตือน


2
นี่คือเหตุผลที่ฉันมาดู ฉันไม่สนใจเลยว่าทำไมข้อผิดพลาดจึงปรากฏขึ้น ฉันแค่อยากให้มันหายไป ขอบคุณ damko!
cjac

umount: /sys/kernel/debug: target is busy.
msangel

2

ปัญหาคือคุณไม่ได้รับอนุญาตให้เข้าถึงไดเรกทอรี debugfs ไดเร็กทอรี tracefs ถูกสร้างขึ้นเพื่ออนุญาตให้ผู้ใช้เมาต์ไดเร็กทอรีการติดตามโดยตรงที่ / sys / kernel / tracing และไม่ต้องการเปิดใช้งาน debugfs แต่สำหรับความเข้ากันได้แบบย้อนหลังเมื่อติดตั้งไดเรกทอรี debugfs มันจะทำการติดตั้ง tracefs โดยอัตโนมัติในไดเรกทอรี "ติดตาม" ของ debugfs

ตอนนี้เมื่อคุณทำ lsof มันจะดูที่ไฟล์ / proc / filesystems เช่นเดียวกับ / proc / mounts จะเห็นว่ามีการติดตั้ง tracefs ที่ / sys / kernel / debug / ติดตามและจึงพยายามที่จะสถิติมัน น่าเสียดายเนื่องจาก / sys / kernel / debug ไม่อนุญาตให้ผู้ใช้ที่ไม่ใช่รูทเห็นข้างในคุณจะได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามสถิติไดเรกทอรี "tracing" จากภายใน / sys / kernel / debug หากคุณ unmount ไดเรกทอรี debugfs คำเตือนจะหายไป


0

คำเตือนถูกเขียนไปยัง stderr คุณสามารถเปลี่ยนเส้นทางไปยัง / dev / null ได้ตลอดเวลา:

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

ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.