104

MRTGなどのツールは、eth0などの特定のインターフェイスでの現在のネットワーク使用率のネットワークスループット/帯域幅グラフを提供します。Linux / UNIXのコマンドラインでその情報を返すにはどうすればよいですか?

できれば、これは、システムで標準で利用可能なもの以外のものをインストールせずに行うことができます。

4

15 に答える 15

161

iftop does for network usage what top(1) does for CPU usage-- http://www.ex-parrot.com/~pdw/iftop/

iftop がどの程度「標準」なのかはわかりませんが、yum install iftopFedora ではインストールできました。

于 2009-03-23T17:29:27.870 に答える
111

サーを手に入れましたか?RHEL/CentOS を使用している場合は、おそらくそうです。

priv、ドーキー バイナリ、ハッキー スクリプト、libpcap などは必要ありません。

$ sar -n DEV 1 3
Linux 2.6.18-194.el5 (localhost.localdomain)    10/27/2010

02:40:56 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:57 PM      eth0  10700.00   1705.05 15860765.66 124250.51      0.00      0.00      0.00
02:40:57 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:57 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:58 PM      eth0   8051.00   1438.00 11849206.00 105356.00      0.00      0.00      0.00
02:40:58 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:58 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:59 PM      eth0   6093.00   1135.00 8970988.00  82942.00      0.00      0.00      0.00
02:40:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0   8273.24   1425.08 12214833.44 104115.72      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
于 2010-10-27T19:04:44.803 に答える
45

私はずっと前にこのばかげたスクリプトを書きました、それはPerlとLinux≥2.6だけに依存しています:

#!/usr/bin/perl

use strict;
use warnings;

use POSIX qw(strftime);
use Time::HiRes qw(gettimeofday usleep);

my $dev = @ARGV ? shift : 'eth0';
my $dir = "/sys/class/net/$dev/statistics";
my %stats = do {
    opendir +(my $dh), $dir;
    local @_ = readdir $dh;
    closedir $dh;
    map +($_, []), grep !/^\.\.?$/, @_;
};

if (-t STDOUT) {
    while (1) {
        print "\033[H\033[J", run();
        my ($time, $us) = gettimeofday();
        my ($sec, $min, $hour) = localtime $time;
        {
            local $| = 1;
            printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s',
            $dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s)
        }
        usleep($us ? 1000000 - $us : 1000000);
    }
}
else {print run()}

sub run {
    map {
        chomp (my ($stat) = slurp("$dir/$_"));
        my $line = sprintf '%-31.31s:%16.16s', $_, $stat;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0]) / 1)
            if @{$stats{$_}} > 0;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4]) / 5)
            if @{$stats{$_}} > 4;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14]) / 15)
            if @{$stats{$_}} > 14;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59]) / 60)
            if @{$stats{$_}} > 59;
        unshift @{$stats{$_}}, $stat;
        pop @{$stats{$_}} if @{$stats{$_}} > 60;
        "$line\n";
    } sort keys %stats;
}

sub slurp {
    local @ARGV = @_;
    local @_ = <>;
    @_;
}

/sys/class/net/$dev/statistics毎秒読み取り、現在の数値と平均変化率を出力します。

$ ./net_stats.pl eth0
rx_bytes                       :  74457040115259 4369093 4797875 4206554 364088
rx_packets                     :     91215713193   23120   23502   23234  17616
...
tx_bytes                       :  90798990376725 8117924 7047762 7472650 319330
tx_packets                     :     93139479736   23401   22953   23216  23171
...
eth0                           : 15:22:09.002216      1s      5s     15s     60s

                                ^ current reading  ^-------- averages ---------^
于 2009-02-27T22:40:53.580 に答える
26
  • dstat- vmstat、iostat、ifstat、netstat 情報などを統合
  • iftop- ethで実際に何が起こっているかを分析するための素晴らしいネットワーク帯域幅ユーティリティ
  • netio- TCP/IP 経由でネットワークの正味スループットを測定します
  • inq- ストレージ(通常は Symmetrix)に関する情報を表示する CLI トラブルシューティング ユーティリティ。デフォルトでは、INQ はデバイス名、Symmetrix ID、Symmetrix LUN、および容量を返します。
  • send_arp- 指定されたネットワーク デバイス (デフォルトは eth0) で arp ブロードキャストを送信し、古い IP アドレスと新しい IP アドレスのマッピングを MAC アドレスに報告します。
  • EtherApe- etherman をモデルにした Unix 用のグラフィカルネットワークモニターです。リンク層、IP および TCP モードを備え、ネットワーク アクティビティをグラフィカルに表示します。
  • iptraf- ネットワークを通過する IP トラフィックに関する情報を表示する IP トラフィック モニター。

詳細: http://felipeferreira.net/?p=1194

于 2013-11-22T16:30:43.550 に答える
16

そのための別のクイックアンドダーティbashスクリプトを入手しました:

#!/bin/bash
IF=$1
if [ -z "$IF" ]; then
        IF=`ls -1 /sys/class/net/ | head -1`
fi
RXPREV=-1
TXPREV=-1
echo "Listening $IF..."
while [ 1 == 1 ] ; do
        RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
        TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
        if [ $RXPREV -ne -1 ] ; then
                let BWRX=$RX-$RXPREV
                let BWTX=$TX-$TXPREV
                echo "Received: $BWRX B/s    Sent: $BWTX B/s"
        fi
        RXPREV=$RX
        TXPREV=$TX
        sleep 1
done

実際には正確に 1 秒続くと考えられていsleep 1ますが、これは真実ではありませんが、大まかな帯域幅評価には十分です。

@ephemient に感謝します/sys/class/net/<interface>。:)

于 2013-06-14T06:45:53.373 に答える
15

の出力を解析できますifconfig

于 2009-02-27T20:45:30.830 に答える
15

iftop と iptraf に加えて、以下も確認してください。

  • bwm-ng(帯域監視次世代)

および/または

  • cbm(カラー帯域幅メーター)

参照: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html

于 2010-05-07T00:00:33.000 に答える
7

値を取得するだけの場合は、次のように単純なシェルのワンライナーを使用できます。

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS

10 秒間の平均 "1 秒あたりの受信バイト数" が表示されます (パラメータを変更することで期間を変更でき、代わりS=10に を使用して受信 BPS の代わりに送信 BPS を測定できます)。監視するネットワーク デバイスに変更することを忘れないでください。tx_bytesrx_byteseth0

もちろん、平均レートを表示することに限定されているわけではありません (他の回答で述べたように、より良い出力を表示する他のツールがあります) が、このソリューションは他のことを行うために簡単にスクリプト化できます。

たとえば、次のシェル スクリプト (読みやすいように複数行に分割) は、5 分間の平均送信速度が 10kBPS を下回った場合 (おそらく、帯域幅を消費する他のプロセスが終了した場合) にのみ、offlineimap プロセスを実行します。

#!/bin/sh
S=300; F=/sys/class/net/eth0/statistics/tx_bytes
BPS=999999
while [ $BPS -gt 10000 ]
do
  X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))";
  echo BPS is currently $BPS
done
offlineimap

/sys/class/...これは Linux 固有のものであり (サブミッターがlinuxタグを選択したので問題ありません)、非古風なカーネルが必要であることに注意してください。シェル コード自体は /bin/sh と互換性があり (したがって、bash だけでなく、dash やその他の /bin/sh 実装も機能します)、/bin/sh は常にインストールされるものです。

于 2014-09-20T13:10:06.457 に答える
5

私は好きiptrafですが、おそらくそれをインストールする必要があり、それはもう積極的に維持されていないようです。

于 2009-02-27T20:44:32.223 に答える
2

iperf を使用して、ネットワーク パフォーマンスのベンチマークを実行できます (可能な最大スループット)。詳細については、次のリンクを参照してください。

http://en.wikipedia.org/wiki/Iperf

https://iperf.fr/

https://code.google.com/p/iperf/

于 2014-07-28T20:02:12.563 に答える
0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

(ifconfig -a) の出力が json 形式で必要な場合は、これを使用できます( python)

于 2014-12-08T13:31:01.327 に答える