Пагинация в терминале: как не притащить мусор в конфиг

Обложка

Есть такой классический сетевой ритуал: зайти на железку, снять конфиг, сохранить в файл, потом когда-нибудь использовать его для восстановления или сверки.

Звучит просто.
Но есть один нюанс, который регулярно портит людям жизнь: пагинация в терминале.

Это когда устройство не вываливает весь конфиг сразу, а показывает его кусками:

--More--

или:

....press ENTER to next line, CTRL_C to break, other key to next page....

На экране это выглядит нормально: нажал Enter или Space, поехали дальше.
А вот если в этот момент логируется сессия или копируется вывод, эта служебная строка может попасть прямо в файл с конфигом.

Потом кто-то берёт этот файл, вставляет обратно в устройство, и железка начинает честно выполнять вот это:

....press ENTER to next line....

Спойлер: такой команды обычно нет.

В итоге получаем:

% Unrecognized command, and error detected at '^' marker.

и небольшую экскурсию в мир грусти.


Главное правило

Перед снятием большого конфига нужно отключить постраничный вывод.

Пагинация — это не часть конфигурации.
Это мусор интерфейса терминала, который очень убедительно притворяется командами.


Huawei / Huawei-like GPON / коммутаторы

Для Huawei и похожих CLI обычно помогает:

screen-length 0 temporary
display current-configuration

или, если на конкретной модели команда короче:

screen-length 0 temporary
display current-config

Ключевое слово здесь — temporary.
Оно отключает пагинацию только на текущую сессию, без изменения постоянных настроек.


Cisco IOS / IOS-XE

terminal length 0
show running-config

После этого конфиг выводится целиком, без --More--.


Cisco ASA

terminal pager 0
show running-config

На ASA используется именно terminal pager 0, а не terminal length 0.


Juniper JunOS

Можно отключить длину экрана в CLI:

set cli screen-length 0
show configuration

Или использовать вариант на одну команду:

show configuration | no-more

Второй способ удобен, когда не хочется менять параметры текущей CLI-сессии.


MikroTik RouterOS

Обычно экспорт нормально уходит без классической терминальной пагинации:

/export

Для более компактного вывода:

/export terse

Если надо сохранить сразу в файл на самом устройстве:

/export file=backup

Потом файл можно скачать с роутера.


Тут всё зависит от модели и версии прошивки. Часто встречаются варианты:

terminal length 0
terminal datadump
disable clipaging

После этого уже:

show running-config

или аналогичная команда просмотра конфигурации.

Если команда не сработала — лучше посмотреть ? в CLI, потому что у одного и того же вендора синтаксис может отличаться от линейки к линейке.


Linux-серверы и системные команды

На Linux проблема обычно не в сетевом CLI, а в pager’ах вроде less.

Для systemctl:

systemctl --no-pager status nginx

Для journalctl:

journalctl --no-pager -u nginx

Можно принудительно заменить pager на cat:

PAGER=cat команда

Что чистить, если уже попало

Если конфиг уже снят с мусором, ищем и удаляем строки вида:

--More--
---- More ----
....press ENTER to next line, CTRL_C to break, other key to next page....

А также управляющие хвосты терминала, которые могут выглядеть как странные символы или ANSI-последовательности.

Перед применением такого конфига лучше хотя бы быстро поискать:

grep -Ei "more|press ENTER|next page|CTRL_C" backup.cfg

Если что-то нашлось — это не конфиг, это привет от терминала.


Мини-чек-лист перед сохранением конфига

Особенно это важно на устройствах, где конфиг состоит из профилей. Например, на Huawei GPON внутри line-profile, vlan-profile, rule-profile, specific-profile команды commit и quit могут быть не мусором, а нормальной частью применения настроек.


Короткий вывод

Отключить пагинацию — это 5 секунд.

Не отключить — это потом полчаса смотреть на:

% Unrecognized command

и думать, почему железка пытается выполнить человеческую просьбу «press ENTER to next line».


#network #lifehacks