Использование pipe (grep) в Cisco IOS

Posted: 2011-07-13 in Cisco
Tags: , , , ,
Добрый день! Сегодня хотел бы написать немного о такой опции в Cisco IOS, как “pipe“, которая позволяет выводить лишь необходимую нам информацию. В linux’е реализована с помощью команды “grep“. Речь пойдет об использовании регулярных выражений в IOS.
Зачем она? Если у Вас конфиг на 5 экранов, тогда ответ – она не нужна, но если нужно отсеять что-то из 20-50 экранного конфига, тогда без неё очень сложно. Использование регулярных выражений чаще всего можно встретить при конфигурации протокола BGP, диал-пиров для маршрутизации телефонного звонка или в случае большого количества правил трансляции номеров, когда нам необходимо найти использующееся правило.
Несколько слов о специальных символах регулярных выражений

+ предыдущий символ (группа) встречается 1 или больше раз
123+ (123, 1233, 12333, 123333 и т.д. будут подходить для выражения)
* предыдущий символ (группа) встречается 0 или больше раз
123* (12, 123, 1233, 12333, 123333 и т.д. будут подходить для выражения)
? предыдущий символ (группа) встречается 0 или 1 раз
123? (12 и 123 будут подходить)
() круглые скобки позволяют создать группу символов
1(23)* (1, 123, 12323, 1232323 и т.д. будут подходить для выражения)
. один любой символ
1(.)3 (123, 1d3, 1j3, 183, 1o3 и т.д.)
[] любой из символов в квадратных скобках
1[135] (11, 13, 15)
1[1-3] (11, 12, 13)

^ все что начинается с…
^5383…. (все что начинается с 5383)
$ все что заканчивается на …
….5383$ (все что заканчивается на 5383)
\ отменяет значение специального символа
^\+ (найти все что начинается на символ +)

Итак, давайте начнем с простого
show run | ?

append    Append redirected output to URL (URLs supporting append operation only)
begin     Begin with the line that matches
exclude   Exclude lines that match
format    Format the output using the specified spec file
include   Include lines that match
redirect  Redirect output to URL
section   Filter a section of output
tee       Copy output to URL

Вот что Вы увидите, когда введете show run (на роутере) с контекстной подсказкой.
Я использую begin, include, section (include, exclude).

begin (b)        выводить все начиная со строки которая совпала
include (i)        выводить только строку которая совпала
section (s)        в случае совпадения в команде входа в какой-то подрежим конфигурации выводить всю секцию для это подрежима (e.g. interface config)
e.g. interface fastethernet 0/0
ip address 1.1.1.1
description To ISP

Замечание!
В коммутаторах cisco команды section нет.

Часто бывает ситуация когда нужно посмотреть в таблицу маршрутизации и затем (глядя на небольшой вывод) что-то ввести в CLI. Я бы сделал это так

HQ-2#show ip route | b Gate

Gateway of last resort is not set

10.0.0.0/8 is variably subnetted, 28 subnets, 3 masks
S        10.0.250.201/32 [1/0] via 10.12.9.201
D        10.1.1.0/24 [90/2172416] via 10.12.1.101, 10:05:20, Serial0/1/0.111
D        10.1.2.0/24 [90/2172416] via 10.12.1.101, 10:05:20, Serial0/1/0.111
D        10.1.3.0/24 [90/2172416] via 10.12.1.101, 10:05:20, Serial0/1/0.111

Вместо этого….

HQ-2#show ip route

Codes: L – local, C – connected, S – static, R – RIP, M – mobile, B – BGP
D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area
N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2
E1 – OSPF external type 1, E2 – OSPF external type 2
i – IS-IS, su – IS-IS summary, L1 – IS-IS level-1, L2 – IS-IS level-2
ia – IS-IS inter area, * – candidate default, U – per-user static route
o – ODR, P – periodic downloaded static route, + – replicated route

Gateway of last resort is not set

10.0.0.0/8 is variably subnetted, 28 subnets, 3 masks
S        10.0.250.201/32 [1/0] via 10.12.9.201
D        10.1.1.0/24 [90/2172416] via 10.12.1.101, 10:06:08, Serial0/1/0.111
D        10.1.2.0/24 [90/2172416] via 10.12.1.101, 10:06:08, Serial0/1/0.111
D        10.1.3.0/24 [90/2172416] via 10.12.1.101, 10:06:08, Serial0/1/0.111
D        10.1.4.0/24 [90/2684416] via 10.12.1.101, 10:06:08, Serial0/1/0.111

Вывод, с уже надеюсь успевшей надоесть Вам легендой.

Логическое “И”

Немного сложнее… допустим нам нужно посмотреть интерфейсы на сконфигурированный тип (DCE/DTE) и частоту (clock rate). И для того чтобы понять зачем я трачу Ваше время, введите сначала команду

show controllers

IOS выдаст слишком много не нужной информации. Теперь попробуйте

show controllers | section (Seria|cloc)

В данном примере используется ISR2811 с двумя модулями WIC-2T установленными в нулевом слоте.

PSTN-1#show controllers | s (Serial|clock)

Serial Management Interface Registers (0xB4002000)
Serial Management Interface Registers (0xB4002000)
Interface Serial0/0/0
DCE V.35, clock rate 128000
Interface Serial0/0/1
DCE V.35, clock rate 128000
Interface Serial0/1/0
DCE V.35, clock rate 128000
Interface Serial0/1/1
DCE V.35, clock rate 128000

Несколько примеров для того чтобы увидеть правила в действии:
* Чтобы вывести все ip-адреса в конфиге

 sh run | i [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+

* Все интерфейсы в неактивном состоянии смотреть так…

show ip interface brief | include down

* Просмотр конфигурации ospf протокола

show running-config | section ospf

Теперь, давайте рассмотрим ситуацию, когда вывода слишком много даже при отсеивании с помощью одного правила.

Вы видели конфиги маршрутизаторов с использованием множества dial-peers, voice translation-rules, огромнейшей (BGP) таблицей маршрутизации или чего-то “многословного”. Поиск неисправностей в такой среде это очень муторное дело. Давайте пытаться облегчить себе жизнь.

Вы хотите узнать есть ли у роутера маршрут для сети 154.4.х.х/24 через интерфейс serial 0/1/1 (представте что маршрутов больше тысячи).

Тогда нужно ввести примерно следущее…

PSTN-1#show ip route | i 150\.4(.)*\/24(.)*Ser(.)*0/1/1

C        150.4.132.0/24 is directly connected, Serial0/1/1

Где (.)* значит ноль или больше любых символов
\ используеться для того чтобы указать что “.” точка или “/” (shash) в данном случае не является спец. символом, а должны встречаться в тексте “как есть”.
А “Ser(.)*” вместо Serial я сделал для того чтобы показать универсальный паттерн на случай, если не нужно точно писать слово.

И в завершение, если Вы постоянно конфигурируете какое-либо одно устройство полезным может стать словарь “элиасов” (alias dictionary).

conf t
alias exec sion show ip ospf neighbors
alias exec deltac show archive config differences system:running-config nvram:startup-config
alias exec sir show ip route | begin Gateway

! may be this scary

alias exec shrun show running-config | section exclude (voice translation-rule|voice translation-profile|dial-peer voice|telephony-service|ephone-dn|ephone|dial-peer cor|alias)
do sir
PSTN-1(confif)#do sir

Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 15 subnets, 3 masks
C        10.0.131.0/24 is directly connected, Serial0/0/1
L        10.0.131.1/32 is directly connected, Serial0/0/1

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s