วิธีแสดงตัวอธิบายไฟล์ที่เปิด แต่ไม่ได้ใช้คำสั่ง lsof


48

สวัสดีฉันได้อ่านที่นี่ว่า lsof ไม่ใช่วิธีที่ถูกต้องในการรับจำนวน File Descriptors ที่เปิดอยู่ในปัจจุบัน เขาแนะนำให้ใช้คำสั่งนี้แทน

 cat /proc/sys/fs/file-nr

ในขณะที่คำสั่งนี้แสดงจำนวนของ FD คุณจะแสดงรายการตัวอธิบายไฟล์ที่เปิดซึ่งคำสั่งข้างต้นเพิ่งนับได้อย่างไร


4
คุณอาจต้องการทราบว่า ulimit ของคุณเกินใช่ไหม ฉัน blogged เกี่ยวกับเรื่องนี้ภายใต้linuxintro.org/wiki/Is_my_ulimit_exceeded ; สิ่งสำคัญที่สุดคือ ulimit คือข้อ จำกัด ต่อกระบวนการที่คุณสามารถค้นหาได้ภายใต้ / proc / PID / จำกัด และแทนที่จะเป็น lsof ฉันจะใช้ ls / proc / PID / fd เพื่อแสดงรายการตัวอธิบายไฟล์ของกระบวนการ
Thorsten Staerk

คำตอบ:


60

มีสองเหตุผลที่lsof | wc -lไม่นับตัวอธิบายไฟล์ หนึ่งคือมันแสดงรายการสิ่งที่ไม่ได้เปิดไฟล์เช่นโหลดไลบรารีที่ลิงก์แบบไดนามิกและไดเรกทอรีการทำงานปัจจุบัน คุณต้องกรองพวกมันออก อีกอย่างคือlsofใช้เวลาในการรันจึงสามารถพลาดไฟล์ที่เปิดหรือปิดในขณะที่ทำงานอยู่ ดังนั้นจำนวนของไฟล์ที่เปิดที่แสดงนั้นเป็นค่าโดยประมาณ การดูที่/proc/sys/fs/file-nrให้คุณค่าที่แน่นอน ณ เวลาใดเวลาหนึ่ง

cat /proc/sys/fs/file-nrมีประโยชน์เฉพาะเมื่อคุณต้องการตัวเลขที่แน่นอนส่วนใหญ่เพื่อตรวจสอบความอ่อนล้าของทรัพยากร หากคุณต้องการแสดงรายการไฟล์ที่เปิดอยู่คุณจะต้องโทรlsofหรือใช้วิธีการที่เทียบเท่าเช่น trawling /proc/*/fdด้วยตนเอง


1
สวัสดีขอบคุณที่ให้คำอธิบายที่ดี Gilles ฉันลอง ls / proc / * / fd และรับ fd ที่เปิดอยู่ทั้งหมดในเวลานั้น มันสร้างเอาท์พุตพร้อมการใส่รหัสสีผมแค่ต้องดูคู่มือ
dimas

/proc/*/fdไดเร็กทอรี@dimas มีลิงก์สัญลักษณ์ไปยังไฟล์ที่เปิดอยู่ ls -lสำหรับการตรวจสอบภาพการใช้งาน สำหรับการรักษาแบบอัตโนมัติใช้readlinkเพื่อแยกเป้าหมายลิงก์
Gilles 'หยุดชั่วร้าย'

เพียงใช้ ls -l แต่ฉันจะทดลองใช้ readlink ฉันพยายามอื่น ๆ / proc / PID / แผนที่และตัวเลือกอื่น ๆ ตามที่ระบุไว้ที่นี่kernel.org/doc/man-pages/online/pages/man5/proc.5.html ขอบคุณอีกครั้งสำหรับข้อมูลเพิ่มเติม
dimas

1
/ proc / sys / fs / file-nr ให้ฉัน 3872 (และอีกสองตัวเลข) นี่จะเป็นจำนวนไฟล์ที่ฉันเปิดได้อย่างไรถ้า ulimit -n แสดง 1024 ฉัน
Thorsten Staerk

1
@ThorstenStaerk การตั้งค่าทั้งหมดของsetrlimit(การเรียกระบบที่อยู่ภายใต้ulimitคำสั่งเชลล์) เป็นแบบต่อกระบวนการ พวกเขาส่งผลกระทบเฉพาะกระบวนการที่ทำให้การโทร (และกระบวนการทางอ้อมในภายหลังส้อม)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

25

ข้อมูลกระบวนการจะถูกเก็บไว้แบบไดนามิกโดยระบบในไดเรกทอรีภายใต้ / proc ตัวอย่างเช่นกระบวนการที่มี PID 1234 จะมีไดเรกทอรีชื่อ / proc / 1234

มีข้อมูลค่อนข้างน้อยอยู่ในนั้น แต่ตอนนี้คุณสนใจไดเรกทอรีย่อย/ proc / 1234 / fd

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

ตัวอย่าง:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

ดูที่ส่วนที่เหลือของไฟล์ภายใต้ / proc ... ข้อมูลจำนวนมากที่เป็นประโยชน์จากระบบอยู่ที่นี่

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