
Проверка и изменение размера scrollback-буфера в эмуляторе терминала

В Windows Terminal параметр задаётся в файле settings.json через поле historySize. Значение указывается в строках, стандартное – 9001. Для работы с длинными сессиями имеет смысл увеличить его до 50000–100000, после чего перезапустить терминал для применения изменений.
Просмотр ранее выведенных данных с помощью прокрутки и сочетаний клавиш

При активном полноэкранном приложении, таком как less, top или текстовые редакторы, стандартная прокрутка терминала блокируется. В таких случаях необходимо выйти из программы или использовать её встроенные клавиши навигации. Для временного обхода ограничения в некоторых эмуляторах поддерживается удержание Shift при прокрутке мышью.
На практике команды используются через конвейер. Базовый синтаксис выглядит так:
- ls -la | less – просмотр списка файлов с возможностью прокрутки вверх и вниз
- dmesg | less – анализ системных сообщений без их потери
- ps aux | more – последовательный просмотр процессов постранично
Команда less предпочтительнее, так как поддерживает двунаправленную навигацию и поиск. Внутри less доступны следующие действия:
- PageUp и PageDown – постраничное перемещение
- ↑ и ↓ – прокрутка по строкам
- /текст – поиск по содержимому с переходом по n и N
- q – выход без очистки экрана терминала
Базовое использование выглядит следующим образом:
- script session.log – запуск записи с сохранением в указанный файл
- exit или Ctrl + D – завершение сессии и закрытие лога
- script -q session.log – отключение служебных сообщений
- script -f session.log – принудительная запись без буферизации
- script -a session.log – добавление данных в существующий файл
Для удобного чтения полученного лога применяется команда less с фильтрацией управляющих символов:
- less -R session.log – корректное отображение цвета и форматирования
- sed -r ‘s/\x1B\[[0-9;]*[A-Za-z]//g’ session.log – удаление escape-последовательностей
Базовые операторы перенаправления работают на уровне оболочки и применимы к любой команде. Запись выполняется либо с перезаписью файла, либо с добавлением данных в конец, что важно при накоплении истории.
| Пример команды | Результат |
|---|---|
| command > out.log | Запись stdout в файл с полной перезаписью |
| command >> out.log | Добавление stdout в конец файла |
| command 2> err.log | Запись только stderr |
| command > all.log 2>&1 | Объединение stdout и stderr в одном файле |
Для длительных операций предпочтительно использовать добавление >>, чтобы не потерять предыдущие данные. При анализе ошибок полезно разделять потоки и сохранять stderr в отдельный файл, особенно при сборке проектов или запуске скриптов.
В tmux используется режим копирования (copy mode), который активируется сочетанием клавиш Ctrl + B, [. В этом режиме доступна:
- Построчная и постраничная прокрутка стрелками или PageUp/PageDown
- Поиск текста через / с переходом по n и N
- Выделение и копирование текста в буфер tmux
В screen активировать режим просмотра истории можно через Ctrl + A, [. Навигация аналогична tmux, однако размер буфера настраивается в конфигурационном файле .screenrc параметром defscrollback. Рекомендуется устанавливать значение не менее 5000 строк для длительных сессий.
- Использовать script для записи всей сессии в лог-файл
- Перенаправлять stdout и stderr команд в файл с помощью >> и 2>&1
- Работать внутри tmux или screen, так как их буфер сохраняется до завершения сессии мультиплексора
Вопрос-ответ:
Можно ли просмотреть вывод команд после закрытия терминала без предварительной настройки записи?
После закрытия терминала стандартный буфер scrollback недоступен. Восстановить вывод напрямую невозможно, так как он не сохраняется на диск. Единственный вариант — использовать системные логи, например dmesg для сообщений ядра или journalctl для журналов служб, чтобы получить часть информации, которая могла быть выведена командой.
Как увеличить количество строк в буфере tmux или screen для долгих сессий?
В tmux размер буфера настраивается параметром history-limit в файле ~/.tmux.conf. Например, строка set-option -g history-limit 50000 задаст буфер на 50 тысяч строк. В screen аналогичная настройка делается через defscrollback в .screenrc, например defscrollback 50000. После изменения конфигурации нужно перезапустить сессию для применения новых значений.
В чем разница между сохранением вывода через script и перенаправлением stdout/ stderr?
Команда script записывает весь терминальный сеанс, включая управляющие символы, команды и результаты их выполнения. Файл сохраняется до завершения сессии. Перенаправление потоков stdout и stderr сохраняет только вывод конкретной команды, разделяя стандартный вывод и ошибки. При этом необходимо явно указывать оператор перенаправления для каждого потока, и запись начинается с момента запуска команды.
Можно ли просматривать вывод, который был прокручен за пределы scrollback-буфера терминала?
Если буфер терминала достиг максимального размера, строки, которые вышли за его предел, теряются. Для контроля больших объёмов данных рекомендуется использовать постраничные просмотрщики, например less или more, либо запускать команду внутри tmux или screen с увеличенным буфером. Также можно перенаправлять вывод в файл для последующего анализа.
