FUSE และสิทธิ์การเข้าถึง
lsof
โดยค่าเริ่มต้นจะตรวจสอบระบบไฟล์ที่เมาท์ทั้งหมดรวมถึงFUSE - ระบบไฟล์ที่ใช้ในพื้นที่ผู้ใช้ซึ่งมีสิทธิ์การเข้าถึงพิเศษใน Linux
อย่างที่คุณเห็นในคำตอบนี้บน Ubuntu ถามว่าระบบไฟล์GVFS ที่ติดตั้ง(กรณีพิเศษของ FUSE) นั้นเข้าถึงได้โดยผู้ใช้ที่เมานท์ (เจ้าของgvfsd-fuse
) แม้root
ไม่สามารถเข้าถึงได้ เมื่อต้องการแทนที่ข้อ จำกัด นี้ก็เป็นไปได้ที่จะใช้ตัวเลือก mount และallow_root
allow_other
ตัวเลือกจะต้องเปิดใช้งานใน FUSE daemon ซึ่งอธิบายไว้ในคำตอบนี้... แต่ในกรณีของคุณคุณไม่จำเป็นต้อง (และไม่ควร) เปลี่ยนสิทธิ์การเข้าถึง
ไม่รวมระบบไฟล์จาก 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
lsof
(โดยไม่ต้อง|
และ grep)?