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

Есть такой классический сетевой ритуал: зайти на железку, снять конфиг, сохранить в файл, потом когда-нибудь использовать его для восстановления или сверки.
Звучит просто.
Но есть один нюанс, который регулярно портит людям жизнь: пагинация в терминале.
Это когда устройство не вываливает весь конфиг сразу, а показывает его кусками:
--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
Потом файл можно скачать с роутера.
Eltex / Edge-Core / D-Link и похожие CLI
Тут всё зависит от модели и версии прошивки. Часто встречаются варианты:
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
Если что-то нашлось — это не конфиг, это привет от терминала.
Мини-чек-лист перед сохранением конфига
- [ ] Отключили пагинацию.
- [ ] Сняли конфиг.
- [ ] Проверили, что нет
--More--,press ENTER,next page. - [ ] Сохранили оригинальный файл.
- [ ] Для восстановления используем очищенный файл.
- [ ] Не удаляем служебные команды типа
commit/quit, если они являются частью CLI-логики устройства.
Особенно это важно на устройствах, где конфиг состоит из профилей. Например, на Huawei GPON внутри line-profile, vlan-profile, rule-profile, specific-profile команды commit и quit могут быть не мусором, а нормальной частью применения настроек.
Короткий вывод
Отключить пагинацию — это 5 секунд.
Не отключить — это потом полчаса смотреть на:
% Unrecognized command
и думать, почему железка пытается выполнить человеческую просьбу «press ENTER to next line».