Cách hiển thị mô tả tệp đang mở nhưng không sử dụng lệnh lsof


48

Xin chào Tôi đã đọc ở đây rằng lsof không phải là một cách chính xác để có được số lượng Trình mô tả tệp hiện đang mở. Ông đề nghị sử dụng lệnh này thay thế

 cat /proc/sys/fs/file-nr

Trong khi lệnh này hiển thị số lượng FD, làm thế nào để bạn hiển thị danh sách các mô tả tệp đang mở mà lệnh trên vừa tính?


4
Bạn có thể muốn biết nếu ulimit của bạn bị vượt quá, phải không? Tôi đã viết blog về điều này dưới linuxintro.org/wiki/Is_my_ulimit_exceeded ; quan trọng nhất, ulimit là một hạn chế theo quy trình mà bạn có thể tìm thấy dưới / Proc / PID / giới hạn và thay vì lsof tôi sẽ sử dụng ls / Proc / PID / fd để liệt kê các mô tả tệp của quy trình.
Thorsten Staerk

Câu trả lời:


60

Có hai lý do lsof | wc -lkhông tính mô tả tập tin. Một là nó liệt kê những thứ không mở tệp, chẳng hạn như các thư viện được liên kết động và các thư mục làm việc hiện tại; bạn cần lọc chúng ra Một cách khác là lsofmất một chút thời gian để chạy, vì vậy có thể bỏ lỡ các tệp được mở hoặc đóng trong khi nó đang chạy; do đó, số lượng các tập tin mở được liệt kê là gần đúng. Nhìn vào /proc/sys/fs/file-nrcung cấp cho bạn một giá trị chính xác tại một thời điểm cụ thể.

cat /proc/sys/fs/file-nrchỉ hữu ích khi bạn cần con số chính xác, chủ yếu để kiểm tra cạn kiệt tài nguyên. Nếu bạn muốn liệt kê các tệp đang mở, bạn cần gọi lsofhoặc sử dụng một số phương pháp tương đương như truy tìm /proc/*/fdthủ công.


1
Hi cảm ơn đã cho một lời giải thích tốt Gilles. Tôi đã thử ls / Proc / * / fd và nhận được tất cả các fd mở tại thời điểm đó. Nó tạo ra một đầu ra với một số mã màu, tôi sẽ chỉ cần xem hướng dẫn.
dimas

Các /proc/*/fdthư mục @dimas chứa các liên kết tượng trưng đến các tệp đang mở. Để kiểm tra trực quan, sử dụng ls -l. Để điều trị tự động, sử dụng readlinkđể trích xuất mục tiêu liên kết.
Gilles 'SO- ngừng trở nên xấu xa'

Chỉ cần sử dụng ls -l nhưng tôi sẽ thử nghiệm với readlink. Tôi đã thử các tùy chọn khác / Proc / PID / maps và các tùy chọn khác như được chỉ định ở đây kernel.org/doc/man-pages/online/pages/man5/proc.5.html . Cảm ơn một lần nữa cho các thông tin bổ sung.
dimas

1
/ Proc / sys / fs / file-nr cho tôi 3872 (và hai số khác). Làm thế nào đây có thể là số lượng tập tin tôi đã mở nếu ulimit -n hiển thị cho tôi 1024?
Thorsten Staerk

1
@ThorstenStaerk Tất cả các cài đặt của setrlimit(lệnh gọi hệ thống nằm dưới ulimitlệnh shell) là mỗi quy trình. Chúng chỉ ảnh hưởng đến quá trình thực hiện cuộc gọi (và gián tiếp các quá trình mà sau đó thực hiện).
Gilles 'SO- ngừng trở nên xấu xa'

25

Thông tin quy trình được lưu giữ động bởi hệ thống trong các thư mục dưới / Proc. Ví dụ, quá trình với PID 1234 sẽ có một thư mục có tên / Proc / 1234.

Có khá nhiều thông tin trong đó nhưng ngay bây giờ bạn quan tâm đến thư mục con / Proc / 1234 / fd .

LƯU Ý: Bạn cần có quyền root để xem hoặc mở tệp cho các quy trình mà bạn không sở hữu, cũng như cho các quy trình SetUID.

Thí dụ:

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

Ngoài ra, hãy xem phần còn lại của các tập tin trong / Proc ... rất nhiều thông tin hữu ích từ hệ thống nằm ở đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.