मैं लिनक्स / यूनिक्स पर वर्तमान नेटवर्क इंटरफ़ेस थ्रूपुट आँकड़े कैसे प्राप्त कर सकता हूँ? [बन्द है]


94

MRTG जैसे उपकरण विशिष्ट इंटरफेस पर मौजूदा नेटवर्क के उपयोग के लिए नेटवर्क थ्रूपुट / बैंडविड्थ ग्राफ प्रदान करते हैं, जैसे कि eth0। मैं लिनक्स / यूनिक्स पर कमांड लाइन पर उस जानकारी को कैसे वापस कर सकता हूं?

अधिमानतः यह मानक के रूप में सिस्टम पर उपलब्ध के अलावा कुछ भी स्थापित किए बिना होगा।


Iftop विवरण दिए गए अपने उत्तर को बदलने पर विचार करें।
ग्रे

बहुत बुरा यह सवाल बंद कर दिया गया है, क्योंकि मैं जोड़ना चाहता था bmonजो मददगार है। github.com/tgraf/bmon#screenshots
डेनियल एफ

जवाबों:


18

आप के आउटपुट को पार्स कर सकते हैं ifconfig


यह माना जाता है कि रूट एक्सेस उपलब्ध है
लायनेल

20
(आमतौर पर) आपको इसे चलाने के लिए रूट होने की आवश्यकता नहीं है ...
13

3
एक बुरा बैश वन-लाइनर जो वास्तव में ऐसा करता है (और मुझे बीएसडी 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
नेटस्टैट

4
उदाहरण के लिए ifconfig आउटपुट पार्स करने में त्रुटि होती है, उदाहरण के -bash: export: लिए ओवररन में उपरोक्त वन-लाइनर परिणाम : 0 ': RHEL6 पर मेरे लिए मान्य पहचानकर्ता नहीं है। पार्सिंग /sys/class/net/$dev/statistics(@ephemient उत्तर में पर्ल स्क्रिप्ट देखें) सीधे बहुत बेहतर काम करता है।
निकोलय

1
यह स्वीकृत उत्तर नहीं होना चाहिए क्योंकि यह त्रुटि प्रवण है और व्यावहारिक नहीं है। ऐसी उपयोगिताएँ हैं जो काम को बहुत बेहतर करती हैं, यह जानने के लिए नीचे स्क्रॉल करें।
एरिक

156

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

मैं नहीं जानता कि कैसे "मानक" iftop है, लेकिन मैं इसे yum install iftopफेडोरा पर स्थापित करने में सक्षम था ।


13
iftopएक साफ Ubuntu स्थापित करने पर आसानी से स्थापित किया जा सकता है apt-get install iftop:।
टॉम मार्थेनल

1
और आर्क लिनक्स परpacman -S iftop
बेंजामिन कैसर

3
आह ठीक है, मैं इस का मतलब है मैं पार्स करने के लिए सीखने के लिए रवाना डाल रहा हूं लगता है कि tcpdumpफिर से उत्पादन। धन्यवाद iftopऔर wireshark, मुझे इस आलसी होने की अनुमति देने के लिए।
पार्थियन शॉट

1
ध्यान दें कि प्रश्न प्रति इंटरफ़ेस आँकड़ों के लिए पूछा गया था, लेकिन iftopअधिक विस्तृत है, और प्रति कनेक्शन आँकड़े देता है।
जोआचिम ब्रेइटनर 10

1
बिना अधिकार वाले लोगों के लिए, ध्यान दें कि iftopस्थापना की आवश्यकता है (आप इसे libpcapस्थापित किए बिना भी नहीं बना पाएंगे ) और इसका मुखपृष्ठ कहता है कि इसे चलाना आवश्यक है root
निकोले

109

समझ गए सर? शायद हाँ अगर आप RHEL / CentOS का उपयोग कर रहे हैं।

निजी, डॉर्की बायनेरी, हैकी स्क्रिप्ट, लिबपैक, आदि के लिए कोई ज़रूरत नहीं है। जीत।

$ 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 ट्रांसमिट और रिसीव के लिए: sar -n DEV 1 3 | grep $ IFACE | पूँछ -n1 | awk '{प्रिंट $ 5, $ 6}'
लियोनेल

2
@ लियोनेल - माइनर नाइट: आपका मतलब उस क्रम में प्राप्त और संचारित है। :-)
लसिकातो

सर एक प्यारा पुराना औजार है। यह एक और द्विआधारी या चार और इकट्ठा करने के लिए मिश्रित क्रोनोजर है, हालांकि :)
XTL

1
रनिंग सेंटोस 7, नो सर।
जोश उस्रे

google.com/webhp?q=sar%20centos%207 ... एक त्वरित Google खोज बहुत सारी जानकारी को बदल देगी।
माइक एस

44

मैंने बहुत समय पहले यह गूंगा स्क्रिप्ट लिखी थी, यह पर्ल और लिनक्स.62.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 ---------^

5
यह एक भयानक छोटी स्क्रिप्ट है, धन्यवाद आदमी!
गुई

1
मुझे "8s" और "8.8s" को "16s" और "16.16s" के साथ संख्याओं के लिए फिट करना था।
निकोले

अगर मुझे सही समझ में आता है, तो अंतिम परिणाम को सटीक बनाने के लिए (उदाहरण के लिए लाइव स्टैटिस्टिक्स में), इसे हर सेकंड चलाना होगा /proc/net/devया प्रति / सेकंड बेसिक पर डेटा की गणना किसी और तरह से करनी होगी ?
इलिया रोस्तोवत्सेव

31

nload वास्तविक समय में बैंडविड्थ की निगरानी के लिए एक महान उपकरण है और आसानी से उबंटू या डेबियन में sudo apt-get install nload के साथ स्थापित होता है।

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

एक और उत्कृष्ट उपकरण है iftop , भी आसानी से apt-get'able:

             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

क्लासिक और शक्तिशाली सर और नेटस्टैट उपयोगिताओं के बारे में पुराने * निक्स के बारे में मत भूलना!


2
इसका उत्तर स्वीकृत होना चाहिए
एरिक

28

3
/ खरीद हर यूनिक्स पर मौजूद नहीं है।
मेहरदाद अफशरी

31
सही है, बस लिनक्स टैग के कारण, ओपी को केवल लिनक्स में दिलचस्पी थी।
कोडेलॉजिक

3.17 कर्नेल पर ऐसी कोई फ़ाइल नहीं है
टॉमस टोमसेक

4
ऐसा लगता है /sys/class/net/$dev/statisticsजैसे कि इपीमिएंट की स्क्रिप्ट में पार्सिंग के बराबर है ।
निकोले

25
  • dstat - vmstat, iostat, ifstat, netstat जानकारी और बहुत कुछ जोड़ती है
  • iftop - आश्चर्यजनक नेटवर्क बैंडविड्थ उपयोगिता का विश्लेषण करने के लिए कि वास्तव में आपके एथ पर क्या हो रहा है
  • netio - टीसीपी / आईपी के माध्यम से एक नेटवर्क के शुद्ध प्रवाह को मापता है
  • inq- CLI समस्या निवारण उपयोगिता जो भंडारण पर जानकारी प्रदर्शित करती है, आमतौर पर Symmetrix। डिफ़ॉल्ट रूप से, INQ डिवाइस का नाम, सिमेट्रिक्स आईडी, सिमेट्रिक्स LUN और क्षमता देता है।
  • send_arp - निर्दिष्ट नेटवर्क डिवाइस (eth0 के डिफॉल्ट) पर एक arp प्रसारण भेजता है, एक मैक पते पर एक पुराने और नए आईपी एड्रेस मैपिंग की सूचना देता है।
  • EtherApe- एथिक्स के बाद यूनिक्स के लिए एक ग्राफिकल नेटवर्क मॉनिटर है। लिंक परत, आईपी और टीसीपी मोड की विशेषता, यह नेटवर्क गतिविधि को ग्राफिक रूप से प्रदर्शित करता है।
  • iptraf - एक आईपी ट्रैफिक मॉनिटर जो आपके नेटवर्क पर गुजरने वाले आईपी ट्रैफ़िक की जानकारी दिखाता है।

अधिक जानकारी: http://felipeferreira.net/?p=1194


1
सरल सूची के लिए धन्यवाद और यह कि ज्यादातर डिफ़ॉल्ट उपयोगिताओं हैं। विशेष रूप से मैं कुछ भी स्थापित किए बिना iftop से बाहर बहुत अच्छी चोटी बैंडविड्थ प्राप्त करने में सक्षम था।
फलोविज़न

16

मुझे उस के लिए एक और quick'n'dirty बैश स्क्रिप्ट मिली:

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

यह उस पर विचार कर रहा है sleep 1 वास्तव में वास्तव में एक सेकंड तक चलेगा, जो सच नहीं है, लेकिन किसी न किसी बैंडविड्थ मूल्यांकन के लिए पर्याप्त है।

@Ephemient के लिए धन्यवाद /sys/class/net/<interface>! :)


3
यदि आप अपनी संख्याओं को MB / s के रूप में प्रारूपित करना चाहते हैं, तो इसके साथ "इको" लाइन स्वैप करें: इको $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; प्रिंट "प्राप्त" आरएक्स "एमबी / एस, भेजा गया" टीएक्स "एमबी / एस"} '
माइकल बोकलिंग

1
@BuddyCasino मुझे यकीन है कि आप इसे सीधे में कर सकते हैं let BWRX=($RX-$RXPREV)/1024(हालांकि मेरे पास अभी इसका परीक्षण करने के लिए कुछ भी नहीं है)
Matthieu

ऐसा लगता है कि आप सही हैं, यह किसी कारण से काम नहीं करता था जब मैंने इसे इस तरह से करने की कोशिश की थी, इसलिए मैं awk के लिए बस गया, लेकिन मुझे लगता है कि यह सिर्फ एक टाइपो था।
माइकल बोकलिंग

15

Iftop और iptraf के अलावा, यह भी जाँच करें:

  • bwm-ng (बैंडविड्थ मॉनिटर नेक्स्ट जनरेशन)

और / या

  • cbm (रंग बैंडविड्थ मीटर)

रेफरी: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


2
बीडब्ल्यूएम-एनजी चट्टानें: इसे चलाने के लिए किसी विशेष अनुमति की आवश्यकता नहीं होती है।
रूडी मटेला

मैं इसे पहले से ही उपयोग कर रहा हूं और ज्यादातर उपयोग के मामलों में मुझे इसका इंटरफ़ेस बहुत स्पष्ट लगता है उदाहरण के लिए iftop's।
डॉ। जन-फिलिप गेर्के

6

यदि आप केवल मूल्य प्राप्त करना चाहते हैं, तो आप इस तरह के सरल शेल ऑनलाइनर का उपयोग कर सकते हैं:

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 सेकंड की अवधि के लिए "प्राप्त बाइट्स प्रति सेकंड" औसत दिखाएगा (आप S=10पैरामीटर बदलकर अवधि बदल सकते हैं , और आप प्राप्त बीपीएस के बजाय प्रेषित बीपीएस को माप सकते हैं ) के tx_bytesबजाय उपयोग करके rx_bytes। उस eth0नेटवर्क डिवाइस को बदलना न भूलें जिसे आप मॉनिटर करना चाहते हैं।

बेशक, आप औसत दर प्रदर्शित करने तक सीमित नहीं हैं (जैसा कि अन्य उत्तरों में उल्लेख किया गया है, ऐसे अन्य उपकरण हैं जो आपको बहुत अच्छा आउटपुट दिखाते हैं), लेकिन यह समाधान आसानी से अन्य चीजों को करने के लिए स्क्रिप्ट योग्य है।

उदाहरण के लिए, निम्न शेल स्क्रिप्ट (पठनीयता के लिए कई लाइनों में विभाजित) केवल ऑफलाइन -मैप प्रक्रिया को निष्पादित करेगा जब 5-मिनट की औसत संचारित गति 10kBPS से नीचे चली जाएगी (संभवतः, जब कुछ अन्य बैंडविड्थ-खपत प्रक्रिया खत्म हो जाती है):

#!/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टैग का चयन करें ), और गैर-आर्कटिक कर्नेल की आवश्यकता है। शेल कोड स्वयं / बिन / श संगत है (इसलिए न केवल बैश, बल्कि डैश और अन्य / बिन / श कार्यान्वयन लागू होंगे) और / बिन / श एक ऐसी चीज है जो वास्तव में हमेशा स्थापित होती है।


5

मुझे पसंद है iptrafलेकिन आपको शायद इसे स्थापित करना होगा और यह सक्रिय रूप से अब भी बनाए नहीं रखा जा सकता है।


1
वहाँ एक iptraf एनजी है, उन दोनों के बीच मतभेदों पर कोई सुझाव?
फेलिक्स यान

1
iptraf-ng मूल परियोजना का एक कांटा है। इसमें अधिक के साथ सभी मूल विशेषताएं होनी चाहिए।
रूडी मटेला

2

मुझे dstat काफी अच्छा लगता है। हालांकि स्थापित किया जाना है। आपको जरूरत से ज्यादा जानकारी देता है। नेटस्टैट आपको पैकेट रेट देगा लेकिन बैंडविथ भी नहीं। netstat -s



0

मैं एएमसी पर मेरे लिए काम करने के लिए ifconfig स्क्रिप्ट को पार्स नहीं प्राप्त कर सका इसलिए 10 सेकंड से अधिक औसत प्राप्त ट्रैफ़िक को मापने के लिए इसे मिला।

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"

क्षमा करें, यह कभी इतना सस्ता और गंदा है लेकिन यह काम कर गया!


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

आप (ifconfig -a) में json प्रारूप के उत्पादन में चाहते हैं तो आप उपयोग कर सकते हैं इस (अजगर)


इनमें से कोई भी रिपोर्ट थ्रूपुट के आँकड़ों की नहीं है?
डेज़ामो नॉर्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.