Добрый день! Сегодня хотел бы написать немного о такой опции в 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)
\ отменяет значение специального символа
^\+ (найти все что начинается на символ +)
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. Я бы сделал это так
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
Вместо этого....
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
Вывод, с уже надеюсь успевшей надоесть Вам легендой.
IOS выдаст слишком много не нужной информации. Теперь попробуйте
В данном примере используется ISR2811 с двумя модулями WIC-2T установленными в нулевом слоте.
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-адреса в конфиге
* Все интерфейсы в неактивном состоянии смотреть так...
* Просмотр конфигурации ospf протокола
Теперь, давайте рассмотрим ситуацию, когда вывода слишком много даже при отсеивании с помощью одного правила.
Вы видели конфиги маршрутизаторов с использованием множества dial-peers, voice translation-rules, огромнейшей (BGP) таблицей маршрутизации или чего-то "многословного". Поиск неисправностей в такой среде это очень муторное дело. Давайте пытаться облегчить себе жизнь.
Вы хотите узнать есть ли у роутера маршрут для сети 154.4.х.х/24 через интерфейс serial 0/1/1 (представте что маршрутов больше тысячи).
Тогда нужно ввести примерно следущее...
Где (.)* значит ноль или больше любых символов
\ используеться для того чтобы указать что "." точка или "/" (shash) в данном случае не является спец. символом, а должны встречаться в тексте "как есть".
А "Ser(.)*" вместо Serial я сделал для того чтобы показать универсальный паттерн на случай, если не нужно точно писать слово.
И в завершение, если Вы постоянно конфигурируете какое-либо одно устройство полезным может стать словарь "элиасов" (alias dictionary).
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
Зачем она? Если у Вас конфиг на 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 set10.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 - BGPD - 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 set10.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
есть еще одно значение \
ReplyDeleteнапример можно сделать такое регулярное выражение:
# show run | in ([A-z])\1\1
и оно выведет все строки содержащие 3 одинаковые буквы подряд:
enable password BBB
no aaa new-model
Спасибо. Мне очень пригодится. Не терял надежду, что фильтровать вывод можно не только begin,include,exclude и т.д. ))
ReplyDelete