是否有类似top的命令来显示正在运行的进程的网络带宽和文件访问权限


31

例如,我们希望看到:

PROCESS       IF       TX       RX       FILE(regular) R/W
prog1         eth0     200kB/s  12kB/s   --            --
              wlan0    12kB/s   100kB/s  --            --
              --       --       --       file1         R
              --       --       --       file2         R
              --       --       --       file3         W
prog2         eth0     0kB/s    200kB/s  --            --
              --       --       --       file4         W
              --       --       --       file5         W

这可能吗?nethogs仅显示TX / RX,而lsof仅显示文件访问。

我目前正在执行一个两步过程,如下所示:

sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /

有没有更好的办法?

Answers:


5

据我所知,没有。您正在尝试完成的操作可能会像您目前正在执行的那样组合多个命令,尽管我不知道其他应用程序会为您提供更易于解析的数据(ed:另一个答案建议了iftop,我不知道该添加了一个管道式单行文字输出模式)。借助一些巧妙的Shell脚本,管道数据和一些手动格式设置,您至少可以接近所需的输出。

您搜索的内容既显示网络统计信息又显示文件统计信息(这将由操作系统的两个不同部分提供),似乎与“ UNIX哲学:”的某些租户背道而驰。

  • 使每个程序都做好一件事。要进行新工作,请重新构建而不是通过添加新功能使旧程序复杂化。
  • 期望每个程序的输出都将成为另一个程序(尚未知道)的输入。不要将多余的信息弄乱。

这在输出文本的程序(例如lsof)中尤其明显。您通常看不到* NIX控制台程序提供的用户界面与要通过管道传递到另一个程序的数据一样多,或者可能看不到使用诸如cut之类的shell命令来创建自己的特制输出的脚本。

道格·麦克罗伊(Doug McIlroy)在数年后总结了他早先的声明:

编写可以做一件事并且做得很好的程序。编写程序以协同工作。编写程序来处理文本流,因为这是一个通用接口。

尽管它可能无法帮助您获得所需的格式化输出,但《 UNIX编程的艺术》是一本不错的书,在这里我找到了这些引文的来源。


7
这不能为问题提供答案。

这可能吗?-我相信您要完成的工作可能是最好的(而且据我所知)可能与您目前正在执行的多个命令组合。 - 有没有更好的办法?我相信您正在尝试的方法可能是最好的,并且只有说服多个命令才能实现……通过一些巧妙的Shell脚本和管道数据,您可以以所需的格式获得输出。-我想念什么问题?提及管道外壳脚本可能会更好,但是您的有用反馈没有提到:p是工作脚本的正确答案?
overprescribed

我相信您要完成的工作最好用“回答问题”来形容;不给人讲授哲学。
加德纳·比克福德

虽然没有哲学课,但是没人会明白答案为什么不这样,并且可能会回到互联网上来,从不理解Linux Torvalds的明智之言。“ Linux哲学是'面对危险而笑!' 糟糕,错了,“你自己做。” 而已。”
overprescribed


6

atop可以通过某种方式为您提供所需的内容,尽管它不像通过文件句柄分解I / O那样具体。要获取完整的网络统计信息,您必须应用内核补丁。


2

iptraf可能非常有用,并且可以发现带宽消耗。


5
添加更多信息/说明将使您的答案更好。
mtk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.