如何監(jiān)控 Linux 上進(jìn)程的網(wǎng)絡(luò)使用情況
在計(jì)算機(jī)上,互聯(lián)網(wǎng)訪問(wèn)是必不可少的,但您可能會(huì)想知道哪些Linux進(jìn)程在您的計(jì)算機(jī)上使用了最多的連接。幸運(yùn)的是,通過(guò)一些常見(jiàn)的Linux工具,監(jiān)視使用帶寬的進(jìn)程變得很容易。以下是其中一些工具:
1、nethogs
nethogs 是一個(gè)為互聯(lián)網(wǎng)連接提供類似于 htop 或 top 的 CPU 和內(nèi)存使用情況的程序。它會(huì)顯示哪些進(jìn)程正在訪問(wèn)網(wǎng)絡(luò)的快照。
與 top、htop 或 atop 類似,nethogs 是一個(gè)全屏程序,每隔幾秒鐘更新一次,以顯示當(dāng)前由進(jìn)程產(chǎn)生的網(wǎng)絡(luò)連接。
安裝 nethogs 很簡(jiǎn)單,只需通過(guò)您的包管理器進(jìn)行安裝。
例如,在Debian和Ubuntu上:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo apt install nethogs
在 Arch Linux 上:
sudo pacman -S nethogs
在 Red Hat 系列上:
sudo dnf install nethogs
要運(yùn)行 nethogs,您需要以 root 身份運(yùn)行:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo nethogs
您可以通過(guò)以下命令將其設(shè)置為可以以普通用戶身份運(yùn)行 nethogs:
sudo setcap "cap_net_admin,cap_net_raw+pe" /path/to/nethogs
您應(yīng)該將“/path/to/nethogs”替換為 nethogs 的絕對(duì)路徑名。您可以使用 which 命令找到它:
which nethogs
2、lsof
雖然 lsof 是一個(gè)用于列出打開(kāi)文件的實(shí)用程序,但它也可以列出打開(kāi)的網(wǎng)絡(luò)連接。-i 選項(xiàng)列出了系統(tǒng)上正在運(yùn)行的進(jìn)程所附加的互聯(lián)網(wǎng)連接。畢竟,在 Linux 中,一切都是文件。
要查看當(dāng)前的互聯(lián)網(wǎng)連接,使用以下命令:
linuxmi@linuxmi ~/www.linuxmi.com
% lsof -i
lsof會(huì)顯示具有打開(kāi)的互聯(lián)網(wǎng)連接的任何命令的名稱、PID、文件描述符、互聯(lián)網(wǎng)連接類型、大小、協(xié)議以及連接的正式文件名。
使用 -i4 和 -i6 選項(xiàng),您可以查看使用 IPv4 或 IPv6 的連接。
很有可能您已經(jīng)安裝了 lsof。如果沒(méi)有安裝,在主要的 Linux 發(fā)行版上安裝也很容易。
在 Debian 和 Ubuntu 上,輸入:
sudo apt install lsof
而在 Arch 上:
sudo pacman -S lsof
在 Red Hat 系列的發(fā)行版上:
sudo dnf install lsof
3、netstat
netstat 是一個(gè)強(qiáng)大的程序,可以讓您查看系統(tǒng)上的網(wǎng)絡(luò)連接。但它不會(huì)顯示網(wǎng)絡(luò)連接附加到哪些進(jìn)程。與 lsof 類似,您可以使用命令行選項(xiàng)來(lái)查看這些信息。
netstat 是 net-tools 包的一部分。您可以使用默認(rèn)的軟件包管理器在大多數(shù) Linux 發(fā)行版上安裝它。
例如,在 Debian 或 Ubuntu 上:
sudo apt install net-tools
在 Arch Linux 上:
sudo pacman -S net-tools
要在 Fedora、CentOS 和 RHEL 上安裝 netstat,請(qǐng)運(yùn)行:
sudo dnf install net-tools
您可以在命令行上運(yùn)行 netstat。默認(rèn)情況下,它會(huì)顯示連接的協(xié)議、地址和狀態(tài),但 -p 選項(xiàng)會(huì)添加一列顯示進(jìn)程 ID 和命令名稱。
linuxmi@linuxmi ~/www.linuxmi.com
% netstat -p
當(dāng)您運(yùn)行 netstat 時(shí),它將只列出所有網(wǎng)絡(luò)連接,然后退出。使用 -c 選項(xiàng),您可以看到一個(gè)持續(xù)更新的連接列表:
linuxmi@linuxmi ~/www.linuxmi.com
% netstat -pc
這與使用像 nethogs 這樣的面向屏幕的程序類似,但以這種方式進(jìn)行的優(yōu)點(diǎn)是您可以將輸出管道傳輸?shù)搅硪粋€(gè)程序,如 grep 或分頁(yè)程序,以便檢查它:
linuxmi@linuxmi ~/www.linuxmi.com
% netstat -p | grep 'systemd'
要查看系統(tǒng)上具有網(wǎng)絡(luò)連接的所有進(jìn)程,您可能需要以 root 身份運(yùn)行 netstat:
linuxmi@linuxmi ~/www.linuxmi.com
% sudo netstat
現(xiàn)在您可以看到哪些 Linux 應(yīng)用程序在占用您的帶寬
與許多現(xiàn)代操作系統(tǒng)一樣,Linux 與互聯(lián)網(wǎng)緊密連接。有時(shí)候很難追蹤哪些進(jìn)程在使用您的帶寬。通過(guò)使用 nethogs、lsof 和 netstat 等工具,您可以找到具有打開(kāi)連接的進(jìn)程。