Linuxでプロセスのネットワーク使用状況を監視する方法

インターネットアクセスは不可欠ですが、どのLinuxプロセスがコンピュータで最も多く接続を使用しているのか疑問に思うかもしれません。幸い、一般的なLinuxユーティリティを使用すると、どのプロセスが帯域幅を使用しているかを簡単に監視できます。以下にいくつか紹介します。

1. nethogs

nethogsは、htopやtopがCPUとメモリの使用状況に対して行うことをインターネット接続に対して行うプログラムです。ネットワークにアクセスしているプロセスをスナップショットで表示します。

top、htop、atopと同様に、nethogsは数秒ごとに更新されてプロセスによる現在のネットワーク接続を表示するフルスクリーンプログラムです。

nethogsのインストールは簡単です。パッケージマネージャーで実行するだけです。

たとえば、DebianとUbuntuの場合:

sudo apt install nethogs

Arch Linuxの場合:

sudo pacman -S nethogs

Red Hatファミリーの場合:

sudo dnf install nethogs

nethogsを実行するには、rootである必要があります:

sudo nethogs

次のコマンドを使用して、通常のユーザーとしてnethogsを実行できるように設定できます:

sudo setcap "cap_net_admin,cap_net_raw+pe" /path/to/nethogs

/path/to/nethogs」をnethogsの絶対パス名に置き換える必要があります。これはwhichコマンドで検索できます:

which nethogs

2. lsof

lsofは開いているファイルを表示するためのユーティリティですが、開いているネットワーク接続も表示できます。-iオプションは、システム上で実行中のプロセスに接続されたインターネット接続をリストします。結局のところ、Linuxではすべてがファイルです。

現在のインターネット接続を確認するには、次のコマンドを使用します:

lsof -i

lsofは、開いているインターネット接続を持つコマンドの名前、PID、ファイル記述子、インターネット接続の種類、サイズ、プロトコル、接続の正式なファイル名を表示します。

-i4および-i6オプションを使用すると、IPv4またはIPv6を使用した接続を表示できます。

lsofはすでにインストールされている可能性が高いです。インストールされていない場合は、主要なLinuxディストリビューションに簡単にインストールできます。

DebianとUbuntuの場合は、次のように入力します:

sudo apt install lsof

Archの場合は:

sudo pacman -S lsof

Red Hatファミリーのディストリビューションの場合は:

sudo dnf install lsof

3. netstat

netstatはそれ自体が強力なプログラムであり、システム上のネットワーク接続を確認できます。ネットワーク接続がどのプロセスに接続されているかは表示されません。lsofと同様に、コマンドラインオプションで確認できます。

netstatはnet-toolsパッケージの一部です。デフォルトのパッケージマネージャーを使用して、ほとんどのLinuxディストリビューションにインストールできます。

たとえば、DebianまたはUbuntuの場合:

sudo apt install net-tools

Arch Linuxの場合:

sudo pacman -S net-tools

Fedora、CentOS、RHELにnetstatをインストールするには、次を実行します:

sudo dnf install net-tools

コマンドラインでnetstatを実行できます。デフォルトでは、プロトコル、アドレス、接続の状態などの情報が表示されますが、-pオプションは、プロセスIDとコマンド名を示す列を追加します。

netstat -p

実行すると、netstatはすべてのネットワーク接続を一覧表示して終了します。-cオプションを使用すると、継続的に更新される接続のリストを表示できます:

netstat -pc

これは、nethogsのような画面指向のプログラムを使用することと似ていますが、この方法の利点は、出力をgrepやページャなどの別のプログラムにパイプして調べることができることです:

netstat -p | grep 'systemd'

システム上のネットワーク接続を持つすべてのプロセスを確認するには、rootとしてnetstatを実行する必要がある場合があります:

sudo netstat

これで、どのLinuxアプリが帯域幅を消費しているかを確認できます

Linuxは、多くの最新のOSと同様に、インターネットと密接に関連しています。どのプロセスが帯域幅を使用しているかを追跡することは、時々困難になることがあります。nethogs、lsof、netstatなどのツールを使用すると、開いている接続を持つプロセスを追跡できます。

プロセスは、接続があったとしても、時々暴走することがあります。Linuxでは、不正なプロセスを簡単に終了できます。