Linux服務(wù)器網(wǎng)卡流量查看方法 shell和Python各一枚
有時(shí)我們需要較為實(shí)時(shí)的查看服務(wù)器上的網(wǎng)卡流量,這里我寫(xiě)了兩個(gè)小腳本,一個(gè)用shell(先寫(xiě)的,一次只能查看一個(gè)網(wǎng)卡),另一個(gè)用Python(后寫(xiě)的,一次可查看多個(gè)網(wǎng)卡)。
腳本中都用了while true“死循環(huán)”,每隔10s從“/proc/net/dev”中取一次值并根據(jù)10s內(nèi)的差值計(jì)算10s內(nèi)的平均帶寬;按ctrl+c停止執(zhí)行。腳本兼容centos6和7
兩個(gè)腳本都不太復(fù)雜,而且腳本中注釋也比較細(xì)致,所以我就不過(guò)多解釋腳本內(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這一步為了同時(shí)兼容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使用方法:請(qǐng)跟上網(wǎng)卡名稱,可接"單個(gè)網(wǎng)卡"/"多個(gè)網(wǎng)卡,以空格分開(kāi)".\n') sys.exit(100) else: print('start monitoring,press "ctrl+c" to stop\n') for arg in sys.argv[1:]: #輸出標(biāo)頭 header = '------{} bandwidth(Mb/s)------'.format(arg) print(header.ljust(35),end='') print() #global values_dic values_dic = {} #定義空字典,用來(lái)在下面函數(shù)中存放各網(wǎng)卡的各項(xià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-----")
這倆腳本使用起來(lái)都還是很方便實(shí)用的,共享出來(lái)希望能給朋友們工作中帶來(lái)一點(diǎn)方便。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何把python項(xiàng)目部署到linux服務(wù)器
- Pycharm使用遠(yuǎn)程linux服務(wù)器conda/python環(huán)境在本地運(yùn)行的方法(圖解))
- Linux服務(wù)器上安裝Python3的兩種方式
- python 讀取Linux服務(wù)器上的文件方法
- python和shell監(jiān)控linux服務(wù)器的詳細(xì)代碼
- 詳解Python下ftp上傳文件linux服務(wù)器
- Linux下安裝Python3和django并配置mysql作為django默認(rèn)服務(wù)器方法
- Linux下將Python的Django項(xiàng)目部署到Apache服務(wù)器
- python下paramiko模塊實(shí)現(xiàn)ssh連接登錄Linux服務(wù)器
- Python 代替 xftp 從 Linux 服務(wù)器下載文件的操作方法
相關(guān)文章
教大家?guī)追N在Linux系統(tǒng)中查看時(shí)區(qū)的方法
Linux 包含多種可用的時(shí)間管理工具,比如 date 或 timedatectlcommands,你可以用它們來(lái)獲取當(dāng)前系統(tǒng)時(shí)區(qū),也可以將系統(tǒng)時(shí)間與 NTP 服務(wù)器同步,來(lái)自動(dòng)地、更精確地進(jìn)行時(shí)間管理。下面通過(guò)這篇文章來(lái)一起看看在Linux系統(tǒng)中查看時(shí)區(qū)的幾種不同方法。2017-01-01Linux上創(chuàng)建、列出、刪除Docker容器方法總結(jié)
在本篇文章中小編給大家整理了一篇關(guān)于Linux上創(chuàng)建、列出、刪除Docker容器方法和技巧,需要的朋友們學(xué)習(xí)參考下。2019-03-03Linux/Unix關(guān)于時(shí)間和時(shí)間戳的命令行
這篇文章主要介紹了Linux/Unix關(guān)于時(shí)間和時(shí)間戳的命令行以及輸出的樣式區(qū)別,一起來(lái)學(xué)習(xí)下吧。2017-12-12Linux學(xué)習(xí)第二篇 Java環(huán)境安裝配置教程
這篇文章主要為大家詳細(xì)介紹了Linux學(xué)習(xí)第二篇,Java環(huán)境安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05CentOS7 下安裝telnet服務(wù)的實(shí)現(xiàn)方法
這篇文章主要介紹了CentOS7 下安裝telnet服務(wù)的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣功能的方法,需要的朋友可以參考下2017-10-10Linux設(shè)置虛擬內(nèi)存的教學(xué)與實(shí)戰(zhàn)教程
這篇文章主要給大家介紹了關(guān)于Linux設(shè)置虛擬內(nèi)存教學(xué)與實(shí)戰(zhàn)的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03linux服務(wù)器磁盤(pán)擴(kuò)容的方法(圖)
如果你的linux服務(wù)器磁盤(pán)不夠用了,那就需要給磁盤(pán)擴(kuò)容了,下面我們介紹一下linux服務(wù)器磁盤(pán)擴(kuò)容的方法,大家參考使用吧2014-01-01