sil*_*tar 41 networking process process-management bandwidth files
例如,我们希望看到:
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
Run Code Online (Sandbox Code Playgroud)
这可能吗?nethogs 只显示 TX/RX,而 lsof 只显示文件访问。
我目前正在做一个像这样的两步过程:
sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
据我所知,没有。您正在尝试完成的工作是可以像您目前正在做的那样组合多个命令,尽管我不知道其他应用程序可以为您提供更易于解析的数据(编:另一个我不知道的答案建议 iftop 添加了一个管道式单行文本输出模式)。通过一些巧妙的 shell 脚本、管道数据和一些手动格式化,您至少可以接近您正在寻找的输出。
您搜索的内容同时显示网络和文件统计信息(由操作系统的两个不同部分提供)似乎与“UNIX 哲学”的某些租户背道而驰:
- 让每个程序做好一件事。要完成一项新工作,请重新构建而不是通过添加新功能使旧程序复杂化。
- 期望每个程序的输出成为另一个未知程序的输入。不要用无关信息混淆输出。
这在输出文本的程序中尤为明显,例如 lsof。您通常不会看到 *NIX 控制台程序提供的用户界面与要通过管道传输到另一个程序的数据一样多,也可能看不到脚本使用诸如cut 之类的 shell 命令来创建自己的专门定制的输出。
道格麦克罗伊几年后总结了他早先的声明:
编写只做一件事并把它做好的程序。编写程序以协同工作。编写程序来处理文本流,因为这是一个通用接口。
虽然它可能无法帮助您获得所需的格式化输出,但The Art of UNIX Programming是一本很好的读物,我在其中找到了这些引文的来源。
归档时间: |
|
查看次数: |
40724 次 |
最近记录: |