Linux / UNIX'te mevcut ağ arayüzü aktarım hızı istatistiklerini nasıl alabilirim? [kapalı]


94

MRTG gibi araçlar, eth0 gibi belirli arabirimlerde mevcut ağ kullanımı için ağ verim / bant genişliği grafikleri sağlar. Bu bilgiyi Linux / UNIX'te komut satırına nasıl döndürebilirim?

Tercihen bu, sistemde standart olarak bulunandan başka bir şey kurmadan olur.


İftop ayrıntıları verilen cevabınızı değiştirmeyi düşünün.
Gray

Bu sorunun kapatılması çok kötü, çünkü bmonyararlı olanı eklemek istedim . github.com/tgraf/bmon#screenshots
Daniel F

Yanıtlar:


17

Çıktısını ayrıştırabilirsiniz ifconfig


Bu, kök erişiminin mevcut olduğunu varsayar
Lionel

20
(genellikle) Bunu çalıştırmak için root
olmanıza

3
Tam olarak bunu yapan (ve BSD netstat (1) davranışını while true; do export `ifconfig p1p1 | grep packets | awk '{print $5, $3}' | xargs echo | sed -E -e "s/([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/rx=\1 rxp=\2 tx=\3 txp=\4/"` ; echo $rx $rxp $tx $txp `cat /tmp/netstat` | awk '{print $1-$5, $2-$6, $3-$7, $4-$8}';echo $rx $rxp $tx $txp > /tmp/netstat; sleep 5 ;done
özlememe neden olan

4
İfconfig çıktısının ayrıştırılması hataya açıktır, örneğin yukarıdaki tek -bash: export: satırlık aşmalara neden olur: 0 ': RHEL6'da benim için geçerli bir tanımlayıcı değil`. Ayrıştırma /sys/class/net/$dev/statistics(@ephemient yanıtındaki perl betiğine bakın) doğrudan çok daha iyi çalışıyor.
Nickolay

2
Hata yapmaya meyilli olduğu ve pratik olmadığı için kabul edilen cevap olmamalıdır. işi çok daha iyi yapan yardımcı programlar var, öğrenmek için aşağı kaydırın.
Eric

156

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

İftop'un ne kadar "standart" olduğunu bilmiyorum ama Fedora'ya yükleyebildim yum install iftop.


13
iftopTemiz bir Ubuntu yüklenebilir de kolayca yükleyin: apt-get install iftop.
Tom Marthenal

1
ve Arch Linux'tapacman -S iftop
Benjamin Kaiser

3
nefes Sanırım ayrıştırma öğrenme kapalı atıyorum bu araçları tahmin tcpdumptekrar çıkışa. Teşekkür ederim iftopve wiresharkbana bu tembel olmaya izin verdiği için.
Part Shot

3
Sorunun arabirim başına istatistikler için sorulduğunu, ancak iftopdaha ayrıntılı olduğunu ve bağlantı başına istatistikleri verdiğini unutmayın.
Joachim Breitner

1
Yönetici hakları olmayanlar için iftop, kurulum gerektirdiğini ( libpcapkurulmadan bile oluşturamayacağınızı) ve ana sayfasında altında çalıştırılması gerektiğini söylediğini unutmayın root.
Nickolay

109

Sar var mı? RHEL / CentOS kullanıyorsanız muhtemelen evet.

Özel, aptal ikili dosyalar, hacky betikleri, libpcap, vb. Gerek yok. Win.

$ 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

11
KB / s Gönderme ve Alma için: sar -n DEV 1 3 | grep $ IFACE | kuyruk -n1 | awk '{5 $, 6 $} yazdır'
Lionel

2
@Lionel - minor nit: Bu sırayla Al ve İlet'i kastettiniz. :-)
lacinato

Sar, çok güzel ve eski bir araçtır. Toplama için başka bir ikili ya da dört ve çeşitli cronjobs :)
XTL

1
Centos7 çalıştırılıyor, sar yok.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... hızlı bir Google araması birçok bilgiyi ortaya çıkaracaktır.
Mike S

44

Bu aptal betiği uzun zaman önce yazdım, Perl ve Linux≥2.6 dışında hiçbir şeye bağlı değildir:

#!/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 @_ = <>;
    @_;
}

Sadece /sys/class/net/$dev/statisticsher saniyeden itibaren okur ve mevcut sayıları ve ortalama değişim oranını yazdırır:

$ ./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 ---------^

5
Bu harika bir küçük senaryo, teşekkürler dostum!
Gui13

1
Numaraların sığması için "8s" ve "8.8s" i "16s" ve "16.16s" ile değiştirmek zorunda kaldım.
Nickolay

Doğru anlıyorsam, nihai sonucu doğru kılmak için (örneğin canlı istatistiklerde), her saniyede bir çalışmalı /proc/net/devveya verileri bir şekilde / saniye bazında hesaplamalı mı?
Ilia Rostovtsev

31

nload , bant genişliğini gerçek zamanlı olarak izlemek için harika bir araçtır ve sudo apt-get install nload ile Ubuntu veya Debian'a kolayca yüklenir.

Device eth0 [10.10.10.5] (1/2):
=====================================================================================
Incoming:


                               .         ...|    
                               #         ####|   
                           .. |#|  ...   #####.         ..          Curr: 2.07 MBit/s
                          ###.###  #### #######|.     . ##      |   Avg: 1.41 MBit/s
                         ########|#########################.   ###  Min: 1.12 kBit/s
             ........    ###################################  .###  Max: 4.49 MBit/s
           .##########. |###################################|#####  Ttl: 1.94 GByte
Outgoing:
            ##########  ###########    ###########################
            ##########  ###########    ###########################
            ##########. ###########   .###########################
            ########### ###########  #############################
            ########### ###########..#############################
           ############ ##########################################
           ############ ##########################################
           ############ ##########################################  Curr: 63.88 MBit/s
           ############ ##########################################  Avg: 32.04 MBit/s
           ############ ##########################################  Min: 0.00 Bit/s
           ############ ##########################################  Max: 93.23 MBit/s
         ############## ##########################################  Ttl: 2.49 GByte

Bir başka mükemmel araç da iftop'tur , aynı zamanda kolayca elde edilebilir:

             191Mb      381Mb                 572Mb       763Mb             954Mb     
└────────────┴──────────┴─────────────────────┴───────────┴──────────────────────
box4.local            => box-2.local                      91.0Mb  27.0Mb  15.1Mb
                      <=                                  1.59Mb   761kb   452kb
box4.local            => box.local                         560b   26.8kb  27.7kb
                      <=                                   880b   31.3kb  32.1kb
box4.local            => userify.com                         0b   11.4kb  8.01kb
                      <=                                  1.17kb  2.39kb  1.75kb
box4.local            => b.resolvers.Level3.net              0b     58b    168b
                      <=                                     0b     83b    288b
box4.local            => stackoverflow.com                   0b     42b     21b
                      <=                                     0b     42b     21b
box4.local            => 224.0.0.251                         0b      0b    179b
                      <=                                     0b      0b      0b
224.0.0.251           => box-2.local                         0b      0b      0b
                      <=                                     0b      0b     36b
224.0.0.251           => box.local                           0b      0b      0b
                      <=                                     0b      0b     35b


─────────────────────────────────────────────────────────────────────────────────
TX:           cum:   37.9MB   peak:   91.0Mb     rates:   91.0Mb  27.1Mb  15.2Mb
RX:                  1.19MB           1.89Mb              1.59Mb   795kb   486kb
TOTAL:               39.1MB           92.6Mb              92.6Mb  27.9Mb  15.6Mb

Eski * nix'teki klasik ve güçlü sar ve netstat yardımcı programlarını unutmayın!


2
bu kabul edilen cevap olmalı
Eric


25
  • dstat - vmstat, iostat, ifstat, netstat bilgileri ve daha fazlasını birleştirir
  • iftop - ET'nizde gerçekte neler olduğunu analiz etmek için harika ağ bant genişliği aracı
  • netio - TCP / IP aracılığıyla bir ağın net verimini ölçer
  • inq- Depolamayla ilgili bilgileri, tipik olarak Symmetrix'i görüntüleyen CLI sorun giderme yardımcı programı. Varsayılan olarak, INQ aygıt adını, Symmetrix ID'yi, Symmetrix LUN'u ve kapasiteyi döndürür.
  • send_arp - Belirtilen ağ cihazında (varsayılan eth0) bir arp yayını göndererek eski ve yeni bir IP adresi eşlemesini bir MAC adresine bildirir.
  • EtherApe- etherman'dan sonra modellenen Unix için bir grafik ağ monitörüdür. Bağlantı katmanı, IP ve TCP modları ile ağ aktivitesini grafiksel olarak gösterir.
  • iptraf - Ağınız üzerinden geçen IP trafiği hakkındaki bilgileri gösteren bir IP trafiği izleyicisi.

Daha fazla ayrıntı: http://felipeferreira.net/?p=1194


1
Basit liste için teşekkürler ve bunlar çoğunlukla varsayılan yardımcı programlar. Özellikle iftop'tan hiçbir şey yüklemeden çok güzel bir bant genişliği elde edebildim.
Foliovision

16

Bunun için başka bir quick'n'dirty bash betiğim var:

#!/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

Bunun sleep 1aslında tam olarak bir saniye süreceğini düşünüyor , bu doğru değil, ancak kaba bir bant genişliği değerlendirmesi için yeterince iyi.

İçin @ephemient'e teşekkürler /sys/class/net/<interface>! :)


3
Numaralarınızı MB / sn olarak biçimlendirmek istiyorsanız, "echo" satırını bununla değiştirin: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = 2/1024/1024; yazdır "Alındı" rx "MB / s, Gönderildi" tx "MB / s"} '
Michael Böckling

1
@BuddyCasino Bunu doğrudan şuradan yapabileceğine eminim let BWRX=($RX-$RXPREV)/1024(şimdi test edecek hiçbir şeyim olmasa da)
Matthieu 18'14

Görünüşe göre haklısın, bu şekilde yapmaya çalıştığımda bir nedenden dolayı işe yaramadı, bu yüzden awk için karar verdim, ama sanırım bu sadece bir yazım hatasıydı.
Michael Böckling


6

Sadece değeri elde etmek istiyorsanız, aşağıdaki gibi basit bir kabuk oneliner kullanabilirsiniz:

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

Bu 10 saniyelik süre için (eğer değiştirerek süreyi değiştirebilir size ortalama "saniyede alınan bayt" gösterecektir S=10parametresini ve kullanmakta AMS bulaşan yerine BPS alınan tedbirlerde olabilir tx_bytesyerine rx_bytes). İzlemek eth0istediğiniz ağ cihazına geçmeyi unutmayın .

Tabii ki, ortalama oranı göstermekle sınırlı değilsiniz (diğer cevaplarda belirtildiği gibi, size çok daha güzel çıktılar gösterecek başka araçlar da var), ancak bu çözüm başka şeyler yapmak için kolayca yazılabilir.

Örneğin, aşağıdaki kabuk betiği (okunabilirlik için birden çok satıra bölünür) çevrimdışı harita işlemini yalnızca 5 dakikalık ortalama iletim hızı 10kBPS'nin altına düştüğünde (muhtemelen bant genişliği tüketen başka bir işlem tamamlandığında) çalıştırır:

#!/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

Bunun /sys/class/...Linux'a özgü olduğunu (sunanın linuxetiketi seçtiği için sorun yoktur ) ve arkaik olmayan çekirdek gerektirdiğini unutmayın. Kabuk kodunun kendisi / bin / sh uyumludur (yani sadece bash değil, aynı zamanda dash ve diğer / bin / sh uygulamaları da çalışacaktır) ve / bin / sh gerçekten her zaman kurulu olan bir şeydir.


5

Hoşuma gitti iptrafama muhtemelen yüklemeniz gerekiyor ve artık aktif olarak bakımı yapılmıyor gibi görünüyor.


1
Bir iptraf-ng var, aralarındaki farklılıklar hakkında herhangi bir öneri var mı?
Felix Yan

1
iptraf-ng, orijinal projenin bir çatalı. Daha fazlasına sahip tüm orijinal özelliklere sahip olmalıdır.
Rudy Matela

2

Dstat'ı oldukça iyi buluyorum. Yine de yüklenmesi gerekiyor. Size ihtiyacınız olandan çok daha fazla bilgi verir. Netstat size paket oranları verir ancak bant genişliği de vermez. netstat -s



0

İfconfig komut dosyasını bir AMI'de benim için çalışacak şekilde ayrıştıramadım, bu yüzden bunu 10 saniyenin üzerinde ortalama alınan trafiği ölçmeye başladım

date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference / 10` bytes per sec"

Üzgünüm, çok ucuz ve iğrenç ama işe yaradı!


0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

Eğer (ifconfig -a) içinde json formatında çıktısını istiyorsanız kullanabilirsiniz bu (piton)


Bunların hiçbiri aktarım hızı istatistiklerini rapor etmiyor mu?
Dzamo Norton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.