Обзор
Команда `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` больше не сможет получать ввод.