Komendy pipe w urządzeniach Cisco


 

W poprzednim artykule pokazywałem jak wyszukiwać wolne porty na switchu, wykorzystywaliśmy tam komendy wpisywane po znaku pipe „|” (po polsku znany również jako potok) aby odfiltrować sobie wyniki komendy. Dziś nieco więcej o komendach, których możemy używać za rurą. Zacznijmy od podstawy i sprawdzenia co umożliwia nam IOS. Za pipe użyć możemy komend pozwalających na zapisywanie wyników:

append – pozwala na doklejanie wyniku komendy do wskazanego poprzez URL, istniejącego już pliku. URL może wskazywać lokalnie lub na zdalny serwer ftp bądź tftp
redirect – przekierowuje komendę do pliku. Jeżeli pod wskazanym URL znajduje się już plik to jest on nadpisywany, jeżeli nie ma to jest tworzony nowy.
tee – działa podobnie jak poprzednie dwa, ale wynik pokazuje także w terminalu. Można używać go jak redirect, bądź dodać przełącznik /append i dopisywać dane do istniejących już plików
URL w tych komendach może kierować do lokalnych zasobów typu flash lub disk, lecz również do zdalnych lokalizacji jak ftp lub tftp.

Switch# sh run | redirect tftp://10.0.0.1/config1

przekieruje wynik komendy do pliku config1 na serwerze

Switch# sh run | append ftp://user:pass@10.0.0.1/config1

dołącza wynik komendy do istniejącego na serwerze FTP pliku

Switch# sh run | tee /append flash:config1

jednocześnie wyświetla wynik komendy na termianli oraz dołącza do pliku config1 w pamięci flash urządzenia

Drugim typem komend są te dzięki, którym da się filtrować wyniki, czyli:
include – wyświetli wszystkie linie, które zawierają wpisaną frazę
exclude – wyświetli wszystko oprócz tych, które zawierają frazę
begin – wynik komendy zostanie wyświetlony od miejsca w, którym po razy pierwszy pojawi się wpisany tekst
Należy zaznaczyć, że wielkości wpisywanych liter mają tu znaczenie.
Proste i na pierwszy rzut oka nie pozwala na wiele kombinacji. Tu jednak do gry wkraczają wyrażenia regularne (regex), dzięki którym mamy całe morze możliwości.
Interpreter regex w IOS-ie daje nam do dyspozycji takie symbole:
. – zastępuję, każdy możliwy znak
\ – określa dokładnie taki znak jaki znajduje się za nim, używa się aby móc wyszukiwać znaki specjalne takie jak np „.”
^ – pasuje do każdej frazy która zaczyna się od ciągu wpisanego za tym znakiem
$ – pasuje do wszystkich ciągów, które kończą się ciągiem wpisanym przed znakiem
? – może być pusty lub zawierać jeden znak po którym następuje. Znak ten jest szczególny ponieważ domyslnie powoduje natychmiastowe wyświetlenie pomocy. Aby go wstawić należy tuż przed wpisaniem użyć kombinacji ctrl+v
* – określa zero lub wielokrotność znaku poprzedzającego
+ – określa jedną lub więcej sekwencji składających się ze znaku poprzedzającego
[] – zawiera zbiór znaków pasujących do wyrażenia
() – pozwala na grupowanie lub zagnieżdżanie wyrażeń
| – jest operatorem OR
Za rurą nie możemy używać operatorów AND ale zamiast niego skorzystać można z kombinacji „.*„, która opisuje dowolną liczbę dowolnych znaków.
Nic tak nie uczy jak przykłady więc poniżej kilka zastosowań dla pipe:
Wyszukujemy wszystkie porty, które ustawione sa na half duplex i prędkość 10Mbps, na końcu komendy dodałem spacje,  gdyż w tej samej linii wystąpić może „10” w typie medium.

Switch#show interface status | include half.*10
Fa2/28 connected 100 a-half a-10 10/100BaseTX
Fa4/44 connected 100 a-half a-10 10/100BaseTX

 

Wyswietlenie wszystkich MAC adresów, które kończą się znakami „4a”. Kropka jest znakiem regex więc używamy kombinacji „\.” aby wskazać, że chodzi nam konkretnie o znak „.”. W zapytaniu określamy, że chcemy wyświetlić wszystkie linie zawierające frazę składającą się z kropki, dwóch jakichkolwiek znaków i „4a”

Switch#sh mac-address-table | in \…4a
100 0016.35a4.424a dynamic ip GigabitEthernet1/1
100 001b.787f.5a4a dynamic ip FastEthernet3/39
120 001b.387b.604a dynamic ip FastEthernet2/13
100 3cd9.2ba1.6d4a dynamic ip,other GigabitEthernet1/1

Poniżej ulepszony przykład z postu o odnajdywaniu nieużywanych portów. Tym razem znajdziemy porty nie używane dłużej niż 5 dni.

Switch#show interface link | include (weeks?|[5-7] days)
Fa2/6 5 days, 22 hours, 5 minutes 36 secs
Fa2/35 34 weeks, 2 days, 15 hours, 24 minutes 01 sec
Fa2/47 15 weeks, 1 day, 4 hours, 38 minutes 39 secs
Fa3/4 18 weeks, 6 days, 3 hours, 22 minutes 43 secs
Fa3/7 5 weeks, 1 day, 5 hours, 41 minutes 03 secs

Tutaj obcinamy wszystki procesy , które nie powodowały obciązenia CPU przez ostatnie 5min

Switch#show processes cpu sorted | exclude 0\.00.*0\.00.*0\.00
CPU utilization for five seconds: 39%/1%; one minute: 36%; five minutes: 35%
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
30 16060066001290393568 1244 20.00% 17.02% 16.75% 0 Cat4k Mgmt LoPri
29 24808531043720039696 0 14.87% 14.87% 14.65% 0 Cat4k Mgmt HiPri
49 298527704 348666738 856 1.91% 1.91% 1.91% 0 Spanning Tree
5 31943628 3499029 9129 0.79% 0.14% 0.12% 0 Check heaps
57 15493552 105515398 146 0.31% 0.29% 0.30% 0 CDP Protocol
96 5276832 472311030 11 0.07% 0.14% 0.15% 0 PM Callback
52 1565072 23562579 66 0.07% 0.03% 0.02% 0 UDLD
36 4295128 6406817 670 0.07% 0.05% 0.07% 0 Compute load avg
24 518744 39306991 13 0.00% 0.01% 0.00% 0 Net Background
28 8531072 540681 15778 0.00% 0.05% 0.00% 0 Per-minute Jobs
55 2203848 25873612 85 0.00% 0.01% 0.00% 0 IP Input

 

Na access liście szukamy wszystkich linii, które kontrolują dostęp do sieci 10.100.0.0 dla hostów których IP jest z określonego zakresu (na przykład cała podsieć)

Switch#sh access-lists | include host .*\.0\.[0-9]* 10.100.0.0
230 permit ip host 10.200.0.22 10.100.0.0 0.0.255.255
240 permit ip host 10.200.0.70 10.100.0.0 0.0.255.255
250 permit ip host 10.200.0.71 10.100.0.0 0.0.255.255
260 permit ip host 10.200.0.75 10.100.0.0 0.0.255.255
270 permit ip host 10.200.0.76 10.100.0.0 0.0.255.255
280 permit ip host 10.200.0.77 10.100.0.0 0.0.255.255
290 permit ip host 10.200.0.68 10.100.0.0 0.0.255.255
300 permit ip host 10.200.0.82 10.100.0.0 0.0.255.255
310 permit ip host 10.200.0.84 10.100.0.0 0.0.255.255
320 permit ip host 10.200.0.86 10.100.0.0 0.0.255.255
330 permit ip host 10.200.0.87 10.100.0.0 0.0.255.255

 

Kombinacji jest mnóstwo, a wszystko zależy od naszych potrzeb i fantazji. Nasze zapytanie będzie tym lepsze im mniej znaków będziemy potrzebować do otrzymania oczekiwanego rezultatu. Czasem to naprawdę niezłe ćwiczenie dla szarych komórek więc jeśli ktoś chciałby umysłowo nieco przypakować to polecam FINITRIS.


Podobne Tematy: