Дата публикации: 15:17:05 ()
Содержание
- Команда
script– базовый способ записи терминала - Полезные опции команды
script - Как просматривать полученный лог
- Сжатие и упаковка логов в архив
- Выгрузка архива на удалённый сервер
- Автоматизация процесса (cron, systemd)
- Безопасность и права доступа
- Распространённые проблемы и их решения
В любой системе, где администраторы или разработчики работают через консоль, важно иметь возможность получить полную запись всех действий – от вводимых команд до их вывода. Такой журнал (лог) помогает:
- Отлаживать ошибки и искать причины сбоев.
- Проводить аудит безопасности.
- Сохранять доказательства выполнения критически важных операций.
- Обучать новых сотрудников, показывая реальный процесс работы.
Для большинства задач достаточно записать «живой» вывод терминала в файл, а затем упаковать его в архив и выгрузить на центральный сервер.
Команда 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‑ключи, права пользователя и путь назначения. |
Выгрузка архива логов с терминала – это простая, но мощная процедура, которая состоит из четырёх основных шагов:
- Запись активности с помощью
script(опции-a,-c,-tпозволяют гибко настроить процесс). - Обработка и очистка полученного текста (удаление управляющих символов, фильтрация конфиденциальных данных).
- Сжатие/упаковка (gzip, bzip2, tar) для экономии места и ускорения передачи.
- Выгрузка на удалённый сервер (scp, rsync, curl, ftp) с учётом безопасности (шифрование, права доступа).
Автоматизировать процесс можно через cron или systemd‑таймеры, а для больших инфраструктур – интегрировать в системы централизованного логирования (ELK, Graylog, Splunk).
Теперь вы знаете, как быстро собрать, упаковать и отправить архив логов, полученный прямо из терминала, а также как обеспечить его надёжность и безопасность.
Автор статьи: ChatGPT, 2026 год.