Гид по технологиям

Запись и воспроизведение терминальных сессий с помощью script

8 min read Терминал Обновлено 20 Nov 2025
Запись и воспроизведение терминала с script
Запись и воспроизведение терминала с script

Экран терминала Linux с выводом команд и подсветкой

Быстрые ссылки

  • Основное использование
  • Добавление в существующий файл
  • Сохранение временных данных
  • Воспроизведение сессий
  • Применение с интерактивными программами
  • Другие параметры
  • Когда script не подходит
  • Альтернативные подходы
  • Мини-методология записи сессий
  • Чек-листы по ролям
  • Критерии приёмки
  • Шпаргалка команд
  • Советы по безопасности и приватности
  • Сводка

Что такое script (одно предложение)

script — утилита, которая запускает интерактивную подсессию оболочки и сохраняет всё её содержимое в текстовый файл, а при необходимости — отдельный файл с таймингами для воспроизведения.

Основное использование

Запустить script без аргументов:

script

По умолчанию создаётся файл ./typescript в текущем каталоге. Чтобы задать имя файла, передайте его как аргумент:

script example_session

После запуска вы попадаете во внутреннюю интерактивную оболочку. Выполните команды, которые хотите записать. Чтобы завершить запись и выйти из подсессии, нажмите Ctrl+D или введите:

exit

Просмотреть получившийся лог:

cat example_session

В файле typescript вы увидите вывод команд и встроенные аннотации в квадратных скобках — эти метки отмечают управляющие события терминала (размер окна, специальные символы и т.д.). Поскольку лог — обычный текст, вы можете редактировать его в любом редакторе, удалять строки с чувствительными данными или лишними управляющими последовательностями.

Важно: script фиксирует ВСЁ — нажатия клавиш, backspace, управляющие символы. Часто нужно отредактировать файл перед публикацией.

Примечание: script выводит имя файла в начале и в конце сессии; чтобы отключить это, используйте тихий режим -q.

SHELL-переменная среды используется для выбора оболочки; если переменная не задана, script по умолчанию использует sh.

Добавление в существующий файл

Для того чтобы дописывать новую сессию к уже существующему typescript, используйте флаг -a. Без него файл будет перезаписан:

script -a example_session

Это удобно, когда вы хотите «пауза/возобновление» записи — завершили подсессию, позже открыли новую и дописали шаги в тот же файл.

Сохранение временных данных

Помимо текстового лога, script умеет записывать тайминги — промежутки времени между выводами/вводом символов. Файл таймингов содержит две колонки: первая — время, прошедшее с предыдущей записи (в секундах), вторая — количество символов для вывода. Эти данные позволяют воспроизвести сессию с приблизительно тем же темпом, что и при записи.

Пример команды, создающей файл таймингов и лог одновременно (тихий режим -q подавляет информационные строки):

script -q -t example_session_timings example_session

Формат таймингов пригоден для scriptreplay и других инструментов, которые интерпретируют два столбца: задержка и длина шага.

Воспроизведение сессий

Команда scriptreplay читает typescript и соответствующий файл таймингов и воспроизводит вывод в вашем терминале, соблюдая задержки:

scriptreplay -t example_session_timings example_session

Если воспроизведение идёт слишком медленно, используйте флаг -d, чтобы делить все интервалы на заданный коэффициент:

# Запустить в 4 раза быстрее
scriptreplay -d 4 -t example_session_timings example_session

Флаг -m позволяет задать максимальную задержку между обновлениями — если запись содержит слишком длинные паузы, их можно ограничить:

# Максимальная пауза 2 секунды
scriptreplay -m 2 -t example_session_timings example_session

Совет: для достоверного воспроизведения запускать scriptreplay в том же типе терминала (TERM) и с теми же размерами окна, которые использовались при записи.

Применение с интерактивными программами

Не рекомендуется использовать script с сильно интерактивными приложениями — текстовыми редакторами (vim, nano), программами на curses, диалоговыми утилитами. Эти программы активно управляют курсором и экраном и генерируют управляющие последовательности, результатом чего может быть «загрязнённый» лог, трудный для чтения или воспроизведения.

Также script не предназначен для неинтерактивных сценариев: его внутренняя оболочка по дизайну интерактивна и ожидает TTY. Проброс ввода через пайпы/редиректы обычно не даёт ожидаемого результата.

Другие параметры и режимы

  • -c <команда> — выполнить конкретную команду и записать её вывод, вместо запуска интерактивной оболочки. Это полезно, когда нужно захватить вывод программы, которая ведёт себя по‑разному при наличии/отсутствии TTY.
  • -f — немедленная запись: вывод сразу сбрасывается в файл после каждого события. Это повышает надёжность захвата и удобно для мониторинга в реальном времени.
  • --force — позволяет указывать путь, который является символической ссылкой; script по умолчанию отказывает в таком случае.

Пример: выполнить команду и записать её вывод:

script -c "ls -la /some/path" /tmp/ls-output

Когда script не подходит

  • При записи интерактивных пользовательских интерфейсов (ncurses, dialog) лог будет содержать много управляющих символов и беспорядок.
  • Если нужно автоматически запускать команды в неинтерактивной оболочке или в контейнере CI/CD, лучше использовать логирование вывода команд через перенаправление, запуск в эмуляторе терминала типа script может не подойти.
  • Для двоичных или неглавным образом текстово-ориентированных приложений требуется специальный захват вывода (например, запись сетевого трафика, дампы протокола).

Альтернативные подходы

  • Перенаправление вывода: command > out.txt 2>&1 — простая запись вывода и ошибок, но без интерактивных эффектов и без имитации ввода.
  • ttyrec / termrec — специализированные утилиты для записи терминала с акцентом на воспроизведение; иногда дают более чистое восстановление, особенно для сложных интерфейсов.
  • asciinema — современный инструмент для записи терминала и публикации на веб (записывает события и воспроизводит их в браузере). Он не сохраняет всё как plain text, но генерирует удобный для просмотра веб-формат.
  • Использовать контейнеризацию с записью команд в лог: для воспроизводимости запускайте контейнеры и записывайте шаги в CI-логи.

Когда выбирать альтернативу: если вам важна красивая веб-презентация — asciinema; если нужна максимально точная имитация TTY с минимальными искажениями — ttyrec; если достаточно stdout/stderr — обычное перенаправление.

Ментальные модели и эвристики

  • Запись = архив + коммуникация: используйте script, когда нужно зафиксировать именно последовательность действий человека, а не только конечный вывод.
  • Тайминги = динамика: если воспроизведение должно выглядеть живым (например, чтобы показать ввод по клавиатуре), сохраняйте timings (-t).
  • Редактируемость: ожидайте, что записанный файл потребует ручной правки перед публичной публикацией — особенно для удаления паролей и конфиденциальных данных.
  • Сопряжение терминалов: чем ближе тип и размер терминала при воспроизведении к оригиналу, тем достовернее результат.

Мини-методология записи сессий (шаги)

  1. Подготовка: очистите экран, закройте лишние вкладки, установите корректный размер окна и переменную TERM.
  2. Тестовый прого́н: быстро прогоните ключевые команды без записи, чтобы убедиться в ожидаемом выводе.
  3. Запись: запустите script с нужными флагами (-q, -t, -a при необходимости).
  4. Ведение: выполняйте команды, комментируйте устно или печатайте пояснения, если планируете публиковать.
  5. Завершение: выйдите из подсессии (exit или Ctrl+D).
  6. Очистка: отредактируйте файл — удалите секреты, лишние управляющие последовательности.
  7. Воспроизведение/публикация: проверьте scriptreplay и, при необходимости, конвертируйте в другой формат (asciinema, HTML).

Чек-листы по ролям

Разработчик

  • Убедиться, что переменная TERM корректна
  • Запустить script в каталоге проекта
  • Сохранять тайминги при демонстрации взаимодействия
  • Очистить лог от ключей и секретов

Учитель/ментор

  • Использовать -f для реального времени наблюдения
  • Попросить ученика запускать script -f и делиться файлами
  • Ограничивать максимальные паузы при воспроизведении

QA / Документация

  • Записывать стабильные прогоны сценариев
  • Версионировать typescript рядом с тест-кейсами
  • Прописывать команду воспроизведения и параметры ускорения

Критерии приёмки

  • Лог открывается как текстовый файл и содержит последовательность команд и вывод.
  • При наличии файлов таймингов scriptreplay воспроизводит логи без критических искажений (в рамках тех же размеров терминала).
  • В логе отсутствуют конфиденциальные данные или они помечены/удалены.
  • Все ключевые шаги демонстрации читаемы и не «слипшиеся» управляющими символами.

Тестовые сценарии и примеры приёмки

  1. Базовая запись: запустить script test, выполнить echo hello, выйти и проверить, что hello есть в файле.
  2. Добавление: создать script -a test, дописать ещё команду, проверить, что файл содержит обе сессии.
  3. Тайминги: script -t t.timings t.log, выполнить несколько команд с паузами, scriptreplay -t t.timings t.log — проверить, что паузы приблизительно соответствуют.
  4. Интерактивная программа: записать запуск nano и проверить, что лог содержит много управляющих последовательностей (ожидаемое поведение — причина для отказа в использовании script).

Шпаргалка команд (Cheat sheet)

# Обычная запись
script mysession

# Запись с таймингами и тихим режимом
script -q -t mysession.timings mysession

# Дописать в существующий файл
script -a mysession

# Выполнить конкретную команду
script -c "tar -tf archive.tar" /tmp/tarlog

# Немедленная запись (flush)
script -f live_session

# Воспроизведение с ускорением
scriptreplay -d 4 -t mysession.timings mysession

# Воспроизведение с ограничением максимально допустимой паузы
scriptreplay -m 2 -t mysession.timings mysession

Совместимость и миграция

  • script и scriptreplay входят в состав util-linux и доступны в большинстве дистрибутивов Linux. Названия и поведение в разных системах могут незначительно отличаться, особенно для старых версий.
  • Для публикации логов на веб лучше конвертировать в формат, поддерживаемый asciinema, или очистить управляющие последовательности при помощи утилит вроде col или sed.
  • Символические ссылки по умолчанию блокируются — используйте --force, если требуется записать в путь, являющийся ссылкой.

Безопасность и приватность

  • Никогда не записывайте сессии, содержащие пароли, ключи или другие секреты без их предварительного удаления.
  • Если вы храните typescript в системе контроля версий, убедитесь, что репозиторий приватный или добавьте файл в .gitignore после публикации только очищённой версии.
  • Для соответствия требованиям конфиденциальности (например, GDPR) убедитесь, что в логе нет персональных данных; при необходимости реализуйте процесс удаления и уведомления.

Important: всегда проверяйте и редактируйте лог перед распространением.

Когда использовать и когда избегать (контрпример)

Используйте script когда:

  • Нужно показать пошаговую процедуру, а не только итоговый результат.
  • Требуется воспроизведение с похожими интервалами ввода.

Избегайте script когда:

  • Вы хотите записывать GUI-приложение или бинарный протокол.
  • Вам нужно машинно-читаемое логирование stdout/stderr в pipeline без интерактивности.

Сводка

script — простой и надёжный инструмент для записи интерактивных терминальных сессий и создания текстовых typescript-файлов. Для воспроизведения используйте scriptreplay вместе с файлом таймингов. Перед публикацией обязательно очистите лог от конфиденциальных данных и учитывайте ограничения при работе с интерактивными программами.

Ключевые команды: script, script -a, script -t, scriptreplay -t, scriptreplay -d.

Если вы демонстрируете шаги другим — подготовьте мини-методологию: тестовый прогон, запись, очистка лога, проверка воспроизведения.


Сводка в одном предложении: script фиксирует интерактивную работу в терминале в виде текстового лога и опционального файла таймингов, что удобно для документации и воспроизведения шагов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Массовое скачивание изображений из браузера
Инструменты

Массовое скачивание изображений из браузера

Как включить Google SGE и начать пользоваться
Технологии

Как включить Google SGE и начать пользоваться

Как подключить контроллер Xbox к ПК
Гайды

Как подключить контроллер Xbox к ПК

Skype не запускается в Windows 10/11 — как исправить
Windows

Skype не запускается в Windows 10/11 — как исправить

Обслуживание электросамоката: безопасность и советы
Персональная мобильность

Обслуживание электросамоката: безопасность и советы

Что такое Spotify Daylist и как его найти
Музыка

Что такое Spotify Daylist и как его найти