ตรวจสอบไฟล์ที่เปิด / เข้าถึงอย่างต่อเนื่องโดยกระบวนการ


25

lsof -p 12345 จะแสดงรายการไฟล์ทั้งหมดที่เปิดโดยกระบวนการซึ่งมีหมายเลข pid คือ 12345 แต่สำหรับช่วงเวลาหนึ่งโดยเฉพาะ

เราจะตรวจสอบกระบวนการอย่างต่อเนื่องตั้งแต่ต้นจนจบ (จนกว่ากระบวนการจะถูกยกเลิก) เพื่อแสดงรายการ / แสดงทุกไฟล์ที่เข้าถึงได้โดยกระบวนการในช่วงอายุการใช้งานทั้งหมด?


คำตอบ:


31

ลองด้วยstrace -p 12345; มันควรทำสิ่งที่คุณพยายามจะบรรลุ

เอาต์พุตสามารถถูกกรองเพื่อแสดงไฟล์ที่เปิดเท่านั้น ( ความคิดเห็นของ Dan D. ):

strace -e open -p 12345

หมายเหตุ:strace -e open <command>คุณยังสามารถติดตามได้อย่างรวดเร็วกระบวนการทำงานกับ


การส่งออกไม่เป็นมิตรและสิ่งที่มากเกินไป
MA1

คุณสามารถแก้ไขได้โดยการวางท่อ - strace -p {pid} | grep -i "Open" | tee files_opened.log. กุญแจคือgrepซึ่งช่วยให้คุณกรองเอาท์พุทสำหรับการโทรของระบบที่คุณต้องการ (เช่นopen())

11
@Ninefingers จริงstraceสามารถทำได้ดีกว่าgrepด้วย-eตัวเลือก:strace -e open
แดน D.

@DanD oh yeah, ofc :)

เมื่อฉันฆ่าคำสั่ง strace มันจะฆ่าสิ่งที่กำลังติดตาม ทำไมสิ่งนี้จึงเกิดขึ้น (cygwin)
CMCDragonkai

6

ยูทิลิตี้ใหม่ของfatraceจะทำสิ่งนี้: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

อย่าใช้ตัวเลือก -p หมายถึงตรงกันข้ามกับความหมายใน lsof หรือยูทิลิตี้อื่น ๆ


3

นี่จะวนซ้ำการรันคำสั่งของคุณและล้างหน้าจอทุกครั้ง:

watch "lsof -p 12345"

คำเตือน: การทำเช่นนี้จะทำให้พลาดการเข้าถึงไฟล์อย่างรวดเร็วและเหมาะสำหรับการดูไฟล์ที่มีมานานเท่านั้น


2
นี้จะค่อนข้างเงอะงะเมื่อเทียบกับคำตอบอื่น ๆ straceที่ใช้
David Foerster

1
นั่นเป็นวิธีที่ไม่ถูกต้อง - กระบวนการอาจใช้ไฟล์ระหว่างการประมวลผลของlsof
Dor

@ หรือคุณสามารถตั้งเวลาของ lsof ไปที่ sub 1 วินาทีและเพิ่มความแม่นยำ ในขณะที่มันเงอะงะเมื่อเทียบกับคนอื่นคุณผิดที่เป็นวิธีที่ไม่ถูกต้อง
Jordon Bedwell

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