ฉันพยายามดีบักแอปพลิเคชั่นบน Ubuntu - ฉันจำเป็นต้องฟังความพยายามในการเปิดไฟล์ (แม้กระทั่งไฟล์ที่ไม่มีอยู่)
Process Monitor (ชื่อเดิมคือFileMon ) มีให้บริการบน Windows - มีอะไรบ้างบนสายพานยูทิลิตี้ของ Ubuntu?
ขอบคุณ!
แอชลีย์
ฉันพยายามดีบักแอปพลิเคชั่นบน Ubuntu - ฉันจำเป็นต้องฟังความพยายามในการเปิดไฟล์ (แม้กระทั่งไฟล์ที่ไม่มีอยู่)
Process Monitor (ชื่อเดิมคือFileMon ) มีให้บริการบน Windows - มีอะไรบ้างบนสายพานยูทิลิตี้ของ Ubuntu?
ขอบคุณ!
แอชลีย์
คำตอบ:
คุณกำลังมองหา strace ดูที่นี่: https://wiki.ubuntu.com/Strace
ขึ้นอยู่กับสิ่งที่คุณต้องการ:
strace
เบื้องหน้าแอพพลิเคชั่นเริ่มต้นนั้นดีที่จะดูว่าแอพกำลังทำอะไรอยู่
lsof
ดีใจที่ได้เห็นไฟล์ที่แอพที่ใช้งานอยู่กำลังใช้งานอยู่
BTW:
lsof -ni:22
แสดงว่ากระบวนการใดกำลังใช้พอร์ต 22
SGI มีเครื่องมือที่คุณอาจต้องการลอง: http://oss.sgi.com/projects/fam/
นี่คือตัวอย่างของการใช้ strace เพื่อติดตามการเปลี่ยนแปลงไฟล์:
strace -f -e trace=file -p7546 -o /tmp/outputfile
-f
ตรวจสอบให้แน่ใจว่าเหตุการณ์จากกระบวนการลูกถูกจับ
-e trace=file
บอกว่าเราควรจะจับ syscalls ไฟล์ที่เกี่ยวข้อง (เช่นstat
, open
, futex
ฯลฯ )
-p
เป็นกระบวนการ ID (ที่ดึงมาจากps -aux
หรือวิธีการอื่น)
-o
ที่ระบุ outputfile (อาจจะมีข้อมูลจำนวนมากและคุณสามารถใช้แทน grep เป็นตัวกรอง
สิ่งนี้ขอความช่วยเหลือจาก Mortadelo http://gitorious.org/mortadelo
นี่เป็นรุ่นเก่า แต่ฉันคิดว่าเป็นความคิดที่ดีที่จะอัปเดตสำหรับความเป็นจริงในปัจจุบัน
สำหรับการดีบักเพียงกระบวนการเดียวและลูก ๆ ของพวกเขา strace ยังคงเป็นวิธีที่ดีที่สุด มันสามารถแสดงไฟล์ acess ทั้งหมดได้อย่างง่ายดายแม้ในไฟล์ที่หายไป
สำหรับการดีบักระบบทั่วไปคุณสมบัติการตรวจสอบในเคอร์เนลสามารถทำได้และเป็นวิธีที่แนะนำ มันไม่จำเป็นต้องมีการแก้ไขใด ๆ ในเมล็ดที่ผ่านมาเพียงแค่ชุดการตรวจสอบที่ติดตั้ง
นี่คือกุยง่ายๆสำหรับการใช้งาน:
สิ่งนี้ทำซ้ำ windows filemon ตรวจสอบ acess ไฟล์สำหรับทุกสถานที่กระบวนการ ฯลฯ
ตรวจสอบโพสต์นี้ด้วย
นี่คือสิ่งที่ทำงานได้ดีสำหรับฉัน (Linux Mint 19.1):
sudo lsof 2>&1 | grep programnamehere
ไม่แน่ใจว่าทำไมถึง2>&1
ต้องการ แต่มันไม่ได้กรองถ้าฉันใช้มัน