web-dev-qa-db-ja.com

実行中のプロセスのネットワーク帯域幅とファイルアクセスを表示するトップライクなコマンドはありますか

たとえば、次のように表示します。

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はファイルアクセスのみを表示します。

私は現在、次のような2ステップのプロセスを実行しています。

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

もっと良い方法はありますか?

32
silvernightstar

私の知る限り、いいえ。あなたが達成しようとしていることは、現在行っているように複数のコマンドを組み合わせることが可能ですが、解析しやすいデータを提供する他のアプリは知りません(ed:別の回答が提案したiftopが追加したことを知らなかったパイプ可能な単一行テキスト出力モード)。いくつかの巧妙なシェルスクリプト、パイプ処理されたデータ、および少しの手動の書式設定を使用して、探している出力に少なくとも近づけることができます。

オペレーティングシステムの2つの異なる部分によって提供される、ネットワークとファイルの両方の統計を示すものの検索は、「UNIX哲学」の一部のテナントに反しているようです。

  • 各プログラムに1つのことをうまく行わせます。新しい仕事をするには、新しい機能を追加して古いプログラムを複雑にするのではなく、新しく構築します。
  • すべてのプログラムの出力が、まだ未知の別のプログラムへの入力になることを期待してください。無関係な情報で出力を乱雑にしないでください。

これは、lsofなどのテキストを出力するプログラムで特に顕著です。通常、* NIXコンソールプログラムは、他のプログラムにパイプされるデータと同じくらいのユーザーインターフェイスを提供していません。また、独自の特別に調整された出力を作成するために cut のようなシェルコマンドを利用するスクリプトもおそらくありません。

Doug McIlroyは、数年後の彼の以前の発言を要約しました。

1つのことを行うプログラムを作成し、それをうまく実行します。一緒に動作するプログラムを作成します。テキストストリームを処理するプログラムを作成します。これは、汎用インターフェイスであるためです。

あなたが探しているフォーマットされた出力を得るのに役立つことはないかもしれませんが、 The Art of UNIX Programming は良い読みです、そして私がそれらの引用のソースを見つけた場所です。

6
aquafunk

sysstat のネットワークとpidstatに対して iftop を試してください。

どちらもおそらく、選択したディストリビューションの簡単なインストール(apt-getなど)です。

22
jelle foks

atopは、I/Oをファイルハンドルで分解するほど具体的ではありませんが、あなたが望むものをあなたに与えるいくつかの方法を提供します。完全なネットワーク統計を取得するには、カーネルパッチを適用する必要があります。

6
Flup

iptraf は非常に有用で、帯域幅の占有率を見つけることができます。

2
NinjaTec