隨著這幾年網絡運維自動化技術的大熱,思科的CCIE EI考試中已經納入了有關Python的筆試和實驗試題。去年我寫了一篇《網絡工程師的Python之路 — 思科IOS-XE內置Python及其內置CLI模塊》的專欄文章,向大家介紹了怎么在思科IOS-XE設備中使用其內置的Python以及思科自家造的第三方模塊:CLI。
雖然由于一些政策性的原因,思科在國內的江湖地位大不如前,但是在我幾千名讀者中依然不乏有在日常工作中和思科設備打交道,以及有想法準備出國闖蕩準備重拾思科技術的,還有正在準備CCIE EI考試的。今天就帶大家回顧一下目前在思科接入層設備里比較主流的IOS-XE操作系統,以及順便介紹一個大多數曾經或者正在和思科設備打交道的讀者們不知道的干貨:如何在IOS-XE設備上啟用并輸入Linux命令,幫助我們配合Python更好的完成平時一些運維自動化需求。
眾所周知,作為思科大名鼎鼎的IOS操作系統的繼承者,思科的IOS-XE操作系統誕生至今已經有13年的歷史了。IOS-XE最早是搭配在思科ASR 1000系列的路由器和Catalyst 3850系列的交換機上發布的,后續的Catalyst 9200, 9300, 9400, 9500,9600交換機以及ISR 1000, ISR 4000, ASR 920等系列的路由器都沿用了IOS-XE這款操作系統。


搭載IOS-XE操作系統的思科Catalyst 9000系列交換機家族
IOS-XE(下面簡稱XE)和IOS最大的區別有如下幾點:
- XE采用的是一種分布式的軟件架構,這和IOS操作系統完全不同。在IOS年代,IOS process是整個網絡設備最最核心的進程,IOS process總覽大權掌控著一切,一旦IOS process出問題,那整個設備的操作系統就此癱瘓。而在XE中,所有重要的系統進程都被隔離開來,IOS process只是XE里12個重要進程中的一個。舉個例子,假如Logger這個進程出了問題,那它不會影響到IOS process。另外XE還支持在一個RP上同時運行兩個IOS process。
- IOS誕生于上世紀80年代初,那時甭說Netconf,Restconf這些API,就連Python這個語言都還沒誕生,什么JSON,XML, YAML, YANG之類的更是天方夜譚,更沒有什么思科自己研發的DNA, SDWAN,Streaming Telemetry,Devnet toolkit等等,所以IOS設備對Netdevops的支持是相當差的,XE則解決了IOS的這一痛點(好在思科的IOS設備確實老而彌堅,經典耐用,至今在現網中依然到處能看到使用IOS作為操作系統的思科設備的身影,這點從ntc-templates,netmiko,nornir,napalm等一些主流的Netdevops第三方庫和工具對IOS的支持程度上就知道了)。
- 最重要也是本文要討論的一點:XE是用Linux開發的,也就是說在XE設備上我們是能直接輸入一些常見的Linux命令的來完成一些我們需要通過Python才能完成的任務,甚至還能直接在XE上做一些簡單的shell編程!知道XE這個特點的用戶有,但是因為Linux shell在XE里不是默認開啟的,并且思科本身也沒有大肆宣傳過(相關的中文資料就更是稀缺了),因此真正上手用過這一特性,知道它”香”的國內網工很少很少。注:Linux Shell在IOS里也有,但是是從版本15才被引入的,老版里是沒有的。
本文就來介紹一下如何在XE設備里啟用Linux Shell,來看如何通過一些常見的linux命令以及shell編程來給我們平日的網絡運維自動化增光添彩。
在IOS-XE上啟用Linux Shell
前面講了,XE默認狀態下Linux Shell是關閉的,要啟用它很簡單,這里我以一臺思科Catalyst 9300交換機為例,進入特權模式后,直接輸入命令terminal shell即可:


terminal shell不是永久開啟的,每次SSH登陸設備開啟一個新的SSH會話后必須重新手動開啟,如果你想永久開啟的話需要做如下配置:


注意:永久開啟shell比較占內存和CPU,請謹慎使用。
使用man手冊命令
敢問當年入坑Linux的網工誰沒用過man來查閱和學習各種linux命令及其參數?比如這里我們要在XE設備上通過man命令來查詢grep命令相關的信息和參數,直接man grep就行了:


使用grep做過濾
如果你問我最有代表性的linux命令是什么?那grep肯定榜上有名。玩過思科設備的都知道,思科最常見的過濾命令就是管道符后面配上include, exclude, begin, section等基于正則表達式的命令,但是你試過在思科設備上用grep來做過濾嗎?
首先我們來看一下在沒有開啟linux shell情況下,使用grep會怎樣:


不出意外,默認狀態下我們是用不了grep的,接下來看下在開啟Linux Shell后怎么樣:


如果你是Linux老手的話,肯定知道grep能實現很多include, exclude, begin, section做不到的功能,比如在一臺路由器上通過grep給出多個條件來過濾OSPF的路由前綴:
R1#show ip route | grep (150) | grep (10003)
O 150.1.2.2 [110/10003] via 155.1.146.4, 15:51:41, GigabitEthernet1.146
O 150.1.3.3 [110/10003] via 155.1.146.4, 15:51:41, GigabitEthernet1.146
O IA 150.1.22.22 [110/10003] via 155.1.146.4, 1d11h, GigabitEthernet1.14
R1#show ip route | grep (150) | grep -v (10003)
150.1.0.0/32 is subnetted, 11 subnets
C 150.1.1.1 is directly connected, Loopback0
O 150.1.4.4 [110/2] via 155.1.146.4, 15:51:57, GigabitEthernet1.146
O 150.1.5.5 [110/3] via 155.1.146.4, 15:51:57, GigabitEthernet1.146
O 150.1.6.6 [110/2] via 155.1.146.6, 1d12h, GigabitEthernet1.146
O IA 150.1.7.7 [110/3] via 155.1.146.6, 1d12h, GigabitEthernet1.146
O IA 150.1.8.8 [110/4] via 155.1.146.4, 15:52:07, GigabitEthernet1.146
O IA 150.1.9.9 [110/4] via 155.1.146.6, 1d12h, GigabitEthernet1.146
O IA 150.1.10.10 [110/5] via 155.1.146.4, 15:52:07, GigabitEthernet1.146
使用nl給回顯內容添加行數
當年考過CCIE的思科老手們都知道show run這個命令后面可以接一個linenum來查看回顯內容總共有多少行,以防止被考官TR,如下:


不過遺憾的是,linenum這個命令只能接在show run后面,在其他常見的show ip int brief, show version, show logging等命令后面你是享受不了這個“福利”的:


現在我們開啟了Linux Shell后,可以用nl(number of line的簡寫)來實現這個目的:




不要小看這個功能,它能配合grep來完成一些我們需要通過Python才能實現的功能,比如說以上圖的show version的回顯內容為例,如果我們只想根據排數指定過濾出其中的某一排內容,這個時候你用傳統的include, exclude, begin, section等過濾方法就很難做到,比如說我們想過濾出show version回顯內容的第128排的內容,可以這么操作:


使用uname來快速查看設備的型號
uname這個常見的Linux命令是干什么的大家都懂,在開啟了Linux Shell的XE中,uname只會返回一個內容,即交換機的設備型號,通常來說,要查看思科設備的PID要輸入show inventory這個命令,但是show inventory命令的回顯內容很多,我們用Python的話還要配合re來做一些過濾,而使用uname的話就省事多了,因為它只給你返回一個值,方便我們快速通過Python腳本獲取設備的型號:


使用WC來統計回顯內容有多少字節,多少個換行符,多少個字母,多少個詞匯等等等等
這里就不一一解釋了,自己配合man來理解:


Head和Tail命令來過濾回顯內容排數
比如這里我只想看到show run回顯內容的前10排和最后10排:


shell編程
既然是Shell,那是不是可以直接編程?當然可以。
對shell編程熟悉的一看就懂,不熟的但是有Python功底的也應該都懂:
創建變量、變量賦值、調用變量:


for循環:


函數:


怎么樣?強不強大?是不是可以替代部分Python功能了?
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。