是否有一个工具作为服务可以监控每个进程的网络流量。以便我可以使用命令行来分析使用情况?
答案1
根据您的评论,您不需要在驱动器上保存日志,并且希望在系统启动时将网络监视器作为系统服务运行。让我们这样做。
安装nethogs
实用程序:
sudo apt install nethogs
在您的主目录中创建 bash 脚本(您可以用其他目录替换它),假设您的用户名是bob
:
touch /home/bob/nethogs.sh
使创建的脚本可执行:
chmod +x /home/bob/nethogs.sh
在文本编辑器中打开脚本并复制并粘贴其代码:
#!/bin/bash
pipe=/tmp/nethogs_pipe
trap "rm -f $pipe" EXIT
if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi
exec 3<>$pipe
nethogs -t -a >&3 2>&1
exit 0
保存更改并关闭文本编辑器。接下来创建另一个脚本来读取nethogs.sh
脚本创建的命名管道:
touch /home/bob/netmon.sh
使脚本可执行:
chmod +x /home/bob/netmon.sh
复制并粘贴到netmon.sh
代码中:
#!/bin/bash
pipe="/tmp/nethogs_pipe"
while true
do
if read line; then
echo $line
fi
done <"$pipe"
exit 0
下一步,我们必须将nethogs.sh
bash 脚本转换为系统服务。在编辑器中创建/打开文件:
sudo nano /etc/systemd/system/nethogs.service
并复制/粘贴代码(替换bob
为ExecStart
您的用户名):
[Unit]
After=network.target
[Service]
ExecStart=/home/bob/nethogs.sh
[Install]
WantedBy=default.target
保存更改并关闭文件。使创建的服务在系统启动时启用:
sudo systemctl enable nethogs.service
启动nethogs
服务:
sudo systemctl start nethogs.service
并检查其状态:
sudo systemctl status nethogs.service
最后cd
到脚本所在的主目录netmon.sh
并执行该脚本:
./netmon.sh
要退出监控请按CTRL+C
。就这样。
如果要将监控数据保存到驱动器,请将脚本内容替换nethogs.sh
为如下代码:
#!/bin/bash
log="/var/log/nethogs.log"
err="/var/log/nethog.err"
nethogs -t -a > $log 2> $err
exit 0
并重启服务:
sudo systemctl restart nethogs.service
通过命名管道的实时监视器将被禁用,并且脚本的输出将保存到/var/log/nethogs.log
文件 - 只需使用less
或打开它tail
,例如:
tail -f /var/log/nethogs.log
所有错误都将保存到/var/log/nethogs.log
文件中。/var/log/nethogs.log
每次计算机重新启动/服务重新启动时都会清理这些错误,要禁用文件清理并启用输出附加,请nethogs.sh
用另一个代码替换脚本内容:
#!/bin/bash
log="/var/log/nethogs.log"
err="/var/log/nethog.err"
nethogs -t -a >> $log 2>> $err
exit 0
评论。在 nethogs 命令选项-t
和-a
内部脚本中,可以根据您安装的版本进行替换。在 Ubuntu 18.04 nethogs 版本中,选项-t
表示tracemode
,选项-a
为listen all interfaces
。