Главная > Управление файлами и каталогами > tee

tee -a -i: Добавление стандартного ввода в файл и игнорирование прерываний

Команда `tee` — это утилита, которая читает стандартный ввод и одновременно записывает его в стандартный вывод и один или несколько файлов. Эта конкретная комбинация (`-a -i`) добавляет содержимое в файл вместо его перезаписи и игнорирует сигналы прерывания (SIGINT, обычно Ctrl+C), чтобы процесс `tee` не был остановлен. Эта функция очень полезна для непрерывной записи журналов длительных скриптов или когда необходимо сохранять важный вывод.

Обзор

Команда `tee` перехватывает данные в середине конвейера, сохраняет их в файл и одновременно передает следующей команде. Опция `-a` сохраняет существующее содержимое файла и добавляет новое содержимое в конец файла, а опция `-i` предотвращает принудительное завершение процесса `tee` пользовательским прерыванием, обеспечивая надежную запись журналов.

Основные функции

Основные функции этой комбинации включают:

  • Одновременная запись содержимого стандартного ввода в стандартный вывод и указанный файл
  • Добавление содержимого в файл вместо перезаписи (-a)
  • Игнорирование сигналов прерывания (SIGINT) (-i)
  • Подходит для надежной записи журналов процессов, выполняющихся в течение длительного времени

Основные опции

Команда `tee` предлагает различные опции, но здесь мы объясним основные опции, используемые в комбинации `tee -a -i`.

Управление выводом файла и поведением

Сгенерированная команда:

Комбинируйте команды.

Описание:

`tee` Запускает команду.

Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.

Примеры использования

Реальные примеры использования команды `tee -a -i`.

Добавление вывода команды в файл журнала

ls -l | tee -a -i output.log

Вывод команды `ls -l` добавляется в файл `output.log` и одновременно выводится на терминал. Нажатие Ctrl+C не приведет к завершению `tee`.

Непрерывная запись результатов выполнения скрипта

while true; do echo "$(date): Running..."; sleep 1; done | tee -a -i script_log.txt

Вывод скрипта с бесконечным циклом непрерывно добавляется в файл `script_log.txt`. Благодаря опции `-i`, `tee` не подвержен влиянию сигналов прерывания.

Запись вывода команды sudo

sudo sh -c 'apt update && apt upgrade -y | tee -a -i /var/log/apt_updates.log'

При записи вывода команды, выполняемой с помощью `sudo`, в файл, безопаснее использовать `sh -c`, чтобы получить вывод фактической команды, а не самого `sudo`.

Советы и меры предосторожности

Полезные советы и моменты, на которые следует обратить внимание при использовании комбинации `tee -a -i`.

Советы по использованию

  • **Запись фоновых задач**: При записи вывода фоновых процессов, выполняющихся в течение длительного времени, в файл, вы можете создать надежную среду записи журналов, используя что-то вроде `nohup command | tee -a -i logfile.log &`.
  • **Решение проблем с разрешениями**: При использовании `sudo command | tee file` `tee` может выполняться с разрешениями обычного пользователя, что может привести к проблемам с разрешениями на запись в файл. В этом случае вам может потребоваться выполнить сам `tee` с `sudo`, например, `sudo sh -c 'command | tee -a -i file'` или `command | sudo tee -a -i file`.
  • **Отладка**: При необходимости проверки промежуточного вывода в сложных конвейерах вы можете использовать `command1 | tee -a -i debug.log | command2` для отладки.

Меры предосторожности

  • **Управление размером файла**: Непрерывное добавление содержимого в файл с помощью опции `-a` может привести к бесконечному увеличению размера файла. Рассмотрите возможность использования инструментов для периодического резервного копирования или ротации файлов журналов (например, `logrotate`).
  • **Значение игнорирования прерываний**: Опция `-i` предотвращает завершение самого процесса `tee`, но не завершение предыдущей команды, переданной через `tee`. Если предыдущая команда завершается в ответ на прерывание, `tee` больше не сможет получать ввод.

Те же команды в категории