Linux服務(wù)器網(wǎng)卡流量查看方法 shell和Python各一枚
有時我們需要較為實時的查看服務(wù)器上的網(wǎng)卡流量,這里我寫了兩個小腳本,一個用shell(先寫的,一次只能查看一個網(wǎng)卡),另一個用Python(后寫的,一次可查看多個網(wǎng)卡)。
腳本中都用了while true“死循環(huán)”,每隔10s從“/proc/net/dev”中取一次值并根據(jù)10s內(nèi)的差值計算10s內(nèi)的平均帶寬;按ctrl+c停止執(zhí)行。腳本兼容centos6和7
兩個腳本都不太復(fù)雜,而且腳本中注釋也比較細致,所以我就不過多解釋腳本內(nèi)容了。
直接上圖上腳本:
shell版–使用截圖:
shell版代碼:
#!/bin/sh #by ljk 20160526 if [ "$1" = "" ];then #判斷后面是否有跟參數(shù) echo -e "\n use interface_name after the script,like \"script eth0\"...\n" exit -1 fi echo -e "\n start monitoring the $1,press \"ctrl+c\" to stop" echo ---------------------------------------------------------- file=/proc/net/dev #內(nèi)核網(wǎng)卡信息文件 while true do RX_bytes=`cat $file|grep $1|sed 's/^ *//g'|awk -F'[ :]+' '{print $2}'` #這里sed這一步為了同時兼容centos6和7 TX_bytes=`cat $file|grep $1|sed 's/^ *//g'|awk -F'[ :]+' '{print $10}'` sleep 10 RX_bytes_later=`cat $file|grep $1|sed 's/^ *//g'|awk -F'[ :]+' '{print $2}'` TX_bytes_later=`cat $file|grep $1|sed 's/^ *//g'|awk -F'[ :]+' '{print $10}'` #B*8/1024/1024=Mb speed_RX=`echo "scale=2;($RX_bytes_later - $RX_bytes)*8/1024/1024/10"|bc` speed_TX=`echo "scale=2;($TX_bytes_later - $TX_bytes)*8/1024/1024/10"|bc` printf "%-3s %-3.1f %-10s %-4s %-3.1f %-4s\n" IN: $speed_RX Mb/s OUT: $speed_TX Mb/s done
Python版–使用截圖:
Python版代碼:
#!/bin/env python3 #by ljk 20160526 import os,re,sys,time if len(sys.argv) == 1: print('\n使用方法:請跟上網(wǎng)卡名稱,可接"單個網(wǎng)卡"/"多個網(wǎng)卡,以空格分開".\n') sys.exit(100) else: print('start monitoring,press "ctrl+c" to stop\n') for arg in sys.argv[1:]: #輸出標頭 header = '------{} bandwidth(Mb/s)------'.format(arg) print(header.ljust(35),end='') print() #global values_dic values_dic = {} #定義空字典,用來在下面函數(shù)中存放各網(wǎng)卡的各項需要用到的值 def get_values(orders): try: with open('/proc/net/dev') as f: lines=f.readlines() #內(nèi)容不多,一次性讀取較方便 for arg in sys.argv[1:]: for line in lines: line=line.lstrip() #去掉行首的空格,以便下面split if re.match(arg,line): values = re.split("[ :]+",line) #以空格和:作為分隔符 values_dic[arg+'r'+orders]=values[1] #1為接收值 values_dic[arg+'t'+orders]=values[9] #9為發(fā)送值 #return [values[1],values[9]] #可返回列表 except (FileExistsError,FileNotFoundError,PermissionError): print('open file error') sys.exit(-1) try: while True: get_values('first') #第一次取值 time.sleep(10) get_values('second') #10s后第二次取值 for arg in sys.argv[1:]: r_bandwidth = (int(values_dic[arg+'r'+'second']) - int(values_dic[arg+'r'+'first']))/1024/1024/10*8 t_bandwidth = (int(values_dic[arg+'t'+'second']) - int(values_dic[arg+'t'+'first']))/1024/1024/10*8 print('IN: '+str(round(r_bandwidth,2)).ljust(8)+' OUT: '+str(round(t_bandwidth,2)).ljust(16),end='') print() values_dic = {} #清空本次循環(huán)后字典的內(nèi)容 except KeyboardInterrupt: print("\n-----bye-----")
這倆腳本使用起來都還是很方便實用的,共享出來希望能給朋友們工作中帶來一點方便。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何把python項目部署到linux服務(wù)器
- Pycharm使用遠程linux服務(wù)器conda/python環(huán)境在本地運行的方法(圖解))
- Linux服務(wù)器上安裝Python3的兩種方式
- python 讀取Linux服務(wù)器上的文件方法
- python和shell監(jiān)控linux服務(wù)器的詳細代碼
- 詳解Python下ftp上傳文件linux服務(wù)器
- Linux下安裝Python3和django并配置mysql作為django默認服務(wù)器方法
- Linux下將Python的Django項目部署到Apache服務(wù)器
- python下paramiko模塊實現(xiàn)ssh連接登錄Linux服務(wù)器
- Python 代替 xftp 從 Linux 服務(wù)器下載文件的操作方法
相關(guān)文章
教大家?guī)追N在Linux系統(tǒng)中查看時區(qū)的方法
Linux 包含多種可用的時間管理工具,比如 date 或 timedatectlcommands,你可以用它們來獲取當前系統(tǒng)時區(qū),也可以將系統(tǒng)時間與 NTP 服務(wù)器同步,來自動地、更精確地進行時間管理。下面通過這篇文章來一起看看在Linux系統(tǒng)中查看時區(qū)的幾種不同方法。2017-01-01Linux上創(chuàng)建、列出、刪除Docker容器方法總結(jié)
在本篇文章中小編給大家整理了一篇關(guān)于Linux上創(chuàng)建、列出、刪除Docker容器方法和技巧,需要的朋友們學(xué)習(xí)參考下。2019-03-03Linux學(xué)習(xí)第二篇 Java環(huán)境安裝配置教程
這篇文章主要為大家詳細介紹了Linux學(xué)習(xí)第二篇,Java環(huán)境安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05CentOS7 下安裝telnet服務(wù)的實現(xiàn)方法
這篇文章主要介紹了CentOS7 下安裝telnet服務(wù)的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣功能的方法,需要的朋友可以參考下2017-10-10Linux設(shè)置虛擬內(nèi)存的教學(xué)與實戰(zhàn)教程
這篇文章主要給大家介紹了關(guān)于Linux設(shè)置虛擬內(nèi)存教學(xué)與實戰(zhàn)的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03