Запись терминальных сессий в Linux: команда script, сжатие логов и автоматизация

Узнай, как простым командой script поймать всё, что происходит в терминале, сжать логи, упаковать в архив, отправить на сервер и автоматизировать процесс.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Дата публикации: 15:17:05 ()

Содержание

  1. Команда script – базовый способ записи терминала
  2. Полезные опции команды script
  3. Как просматривать полученный лог
  4. Сжатие и упаковка логов в архив
  5. Выгрузка архива на удалённый сервер
  6. Автоматизация процесса (cron, systemd)
  7. Безопасность и права доступа
  8. Распространённые проблемы и их решения

В любой системе, где администраторы или разработчики работают через консоль, важно иметь возможность получить полную запись всех действий – от вводимых команд до их вывода. Такой журнал (лог) помогает:

  • Отлаживать ошибки и искать причины сбоев.
  • Проводить аудит безопасности.
  • Сохранять доказательства выполнения критически важных операций.
  • Обучать новых сотрудников, показывая реальный процесс работы.

Для большинства задач достаточно записать «живой» вывод терминала в файл, а затем упаковать его в архив и выгрузить на центральный сервер.

Команда script – базовый способ записи терминала

Самый простой и одновременно мощный инструмент в Linux – это script. Он перехватывает весь ввод‑вывод текущей сессии и сохраняет его в файл.

Запуск без параметров

yuriy@yuriy:~$ script
Скрипт запущен, файл ⎼ typescript

По умолчанию создаётся файл typescript в текущей директории (pwd). Если такой файл уже существует, он будет перезаписан.

Указание собственного имени файла

yuriy@bum:~$ script myterminal.log
Скрипт запущен, файл ౼ myterminal.log

Завершение записи

Запись прекращается после ввода команды exit или сочетания клавиш Ctrl +D. При завершении появится сообщение:

Скрипт выполнен, файл ౼ myterminal.log

Полезные опции команды script

Помимо базового режима, script поддерживает ряд опций, которые делают процесс более гибким.

  • -a – append. Добавляет вывод в конец уже существующего файла, не стирая прежнее содержимое.
    script my.log -a
  • -c <команда> или —command=<команда> – выполнить одну команду и сразу записать её вывод.
    script my.log -c ls -l /var/log
  • -t [сек] – добавить тайм‑стемпы к каждому выводу (полезно для последующего анализа).
    script -t 2 mylog.log
  • -q – «quiet», подавляет стартовое сообщение «Скрипт запущен…».
    script -q session.log
  • -f – «flush», принудительно сбрасывать буфер после каждой записи (важно при работе с удалёнными системами).

Как просматривать полученный лог

Полученный файл – обычный текст, его можно открыть любой программой:

  • cat myterminal.log – быстрый вывод в консоль.
  • less -R myterminal.log – постраничный просмотр с поддержкой управляющих последовательностей.
  • vim -R myterminal.log – просмотр в режиме «только чтение».

Если в лог включены управляющие символы (цвета, курсоры), их можно удалить с помощью sed:

sed -r 's/[[0-9;]*[mK]//g' myterminal.log > clean.log

Сжатие и упаковка логов в архив

Для экономии места и удобства передачи логов обычно их сжимают.

gzip

gzip -9 myterminal.log # создаст myterminal.log.gz

bzip2 (лучшее сжатие, но медленнее)

bzip2 -9 myterminal.log # myterminal.log.bz2

tar + gzip (удобно, если нужно собрать несколько файлов)

tar -czvf logs_$(date +%F).tar.gz myterminal.log other.log

Выгрузка архива на удалённый сервер

После упаковки логов их обычно отправляют в центральный репозиторий. Ниже перечислены самые популярные способы.

scp (Secure Copy)

scp logs_2026-07-11.tar.gz user@remote.example.com:/var/logs/archives/

rsync (инкрементальная синхронизация)

rsync -avz logs_2026-07-11.tar.gz user@remote.example.com:/var/logs/archives/

curl (HTTP/HTTPS загрузка)

curl -T logs_2026-07-11.tar.gz https://logs.example.com/upload 
 -H "Authorization: Bearer YOUR_TOKEN"

FTP (если требуется legacy‑поддержка)

ftp remote.example.com

put logs_2026-07-11.tar.gz
quit

Автоматизация процесса (cron, systemd)

Ручной запуск подходит для разовых задач, но в продакшене обычно используют автоматизацию.

Пример задания cron, которое каждые сутки собирает и выгружает логи

# /etc/cron.d/log_backup
0 2 * * * root /usr/local/bin/collect_logs.sh

Скрипт collect_logs.sh может выглядеть так:

#!/bin/bash

LOGDIR=/var/log/myapp
ARCHIVE=/tmp/logs_$(date +%F).tar.gz

script -q -a $LOGDIR/session_$(date +%H%M%S).log -c "your_command_here"

tar -czf $ARCHIVE $LOGDIR/.log

scp $ARCHIVE user@remote.example.com:/var/backups/logs/

find $LOGDIR -type f -name ".log" -mtime +30 -delete

systemd‑таймер как альтернатива cron

Создаём unit‑файл /etc/systemd/system/log-collector.service:

[Unit]
Description=Collect and upload terminal logs

[Service]
Type=oneshot
ExecStart=/usr/local/bin/collect_logs.sh

И таймер /etc/systemd/system/log-collector.timer:

[Unit]
Description=Run log collector daily at 02:00


[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Активируем:

systemctl enable --now log-collector.timer

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

  • Логи часто содержат чувствительные данные (пароли, токены). Устанавливайте строгие права:
    chmod 600 myterminal.log
  • При передаче используйте шифрование (scp, sftp, HTTPS).
  • Не храните логи в публичных директориях без ограничения доступа.
  • Регулярно проверяйте, что в логах нет «засоряющих» данных, и при необходимости применяйте sed для их удаления.

Распространённые проблемы и их решения

Проблема Возможная причина Решение
Файл лога пустой Запись завершилась до ввода команд (например, сразу exit) Убедитесь, что после script действительно вводите команды, а завершение происходит только после нужных действий.
Лог содержит «мусорные» управляющие символы Терминал использует цветные выводы Очистите их через sed -r 's/[[0-9;]*[mK]//g' или используйте script -q -t и потом col -b.
Скрипт не завершает запись после Ctrl+D Запущен в режиме «pipe» (например, через ssh) Явно выполните exit или завершите процесс kill командой script.
Ошибка «Permission denied» при выгрузке Недостаточно прав на удалённом сервере Проверьте SSH‑ключи, права пользователя и путь назначения.

Выгрузка архива логов с терминала – это простая, но мощная процедура, которая состоит из четырёх основных шагов:

  1. Запись активности с помощью script (опции -a, -c, -t позволяют гибко настроить процесс).
  2. Обработка и очистка полученного текста (удаление управляющих символов, фильтрация конфиденциальных данных).
  3. Сжатие/упаковка (gzip, bzip2, tar) для экономии места и ускорения передачи.
  4. Выгрузка на удалённый сервер (scp, rsync, curl, ftp) с учётом безопасности (шифрование, права доступа).

Автоматизировать процесс можно через cron или systemd‑таймеры, а для больших инфраструктур – интегрировать в системы централизованного логирования (ELK, Graylog, Splunk).

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


Автор статьи: ChatGPT, 2026 год.