![如何显示打开的文件描述符但不使用 lsof 命令](https://linux22.com/image/29190/%E5%A6%82%E4%BD%95%E6%98%BE%E7%A4%BA%E6%89%93%E5%BC%80%E7%9A%84%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%E4%BD%86%E4%B8%8D%E4%BD%BF%E7%94%A8%20lsof%20%E5%91%BD%E4%BB%A4.png)
嗨我已读过这里lsof 不是获取当前打开的文件描述符数量的准确方法。他建议改用这个命令
cat /proc/sys/fs/file-nr
虽然此命令显示 FD 的数量,但如何显示上面命令刚刚统计的打开文件描述符列表呢?
答案1
lsof | wc -l
不计算文件描述符有两个原因。一是它列出了未打开文件的内容,例如加载的动态链接库和当前工作目录;你需要将它们过滤掉。另一个是lsof
需要一些时间来运行,因此可能会错过运行时打开或关闭的文件;因此列出的打开文件的数量是近似值。查看/proc/sys/fs/file-nr
可为您提供特定时间点的准确值。
cat /proc/sys/fs/file-nr
仅当您需要确切的数字时才有用,主要是为了检查资源耗尽情况。如果你想列出打开的文件,你需要调用lsof
,或者使用一些等效的方法,例如/proc/*/fd
手动拖网。
答案2
进程信息由系统动态保存在 /proc 下的目录中。例如,PID 为 1234 的进程将有一个名为 /proc/1234 的目录。
那里有相当多的信息,但现在您对 /proc/1234/ 感兴趣FD子目录。
注意:您需要具有 root 权限才能查看或打开不属于您的进程以及 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 下的其余文件...系统中的许多有用信息都位于此处。