Команда tee в Linux: примеры использования

Введение

Название команды tee прямая отсылка к тройнику водопроводных труб (T-образному разветвлению): она принимает поток данных с одной стороны и одновременно направляет его в двух направлениях на экран терминала и в файл, вместо того чтобы выбирать между ними. Именно эта команда решает частую практическую проблему записи в защищённые системные файлы через sudo, о которой уже упоминалось в статье про echo.

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

echo "Тестовая строка" | tee output.txt

Строка одновременно выводится на экран (можно сразу видеть результат) и записывается в файл output.txt в отличие от простого перенаправления через >, при котором вывод уходит только в файл, ничего не показывая в терминале.

Способ 1: главное практическое применение запись в защищённые файлы через sudo

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf

Это решает проблему, с которой сталкивается почти каждый администратор: команда sudo echo "..." >> file не работает для записи в файлы, требующие root-доступа, потому что перенаправление (>>) обрабатывается самой оболочкой от имени обычного пользователя, а не процессом echo, к которому применяется sudo. Tee, в отличие от echo, сам получает права root через sudo и выполняет запись самостоятельно, обходя эту проблему.

Способ 2: дозапись вместо перезаписи файла

echo "новая строка" | sudo tee -a /etc/hosts

Флаг -a (append) дописывает в конец файла, сохраняя существующее содержимое без этого флага tee по умолчанию полностью перезаписывает файл, оставляя только новую строку, аналогично поведению одинарного > в обычном перенаправлении.

Способ 3: запись сразу в несколько файлов одновременно

echo "конфигурация обновлена" | sudo tee /etc/app1/status.txt /etc/app2/status.txt

Tee принимает несколько путей файлов как аргументы записывает одинаковое содержимое сразу во все указанные места одной командой, вместо повторения операции для каждого файла отдельно.

Способ 4: сохранение промежуточного результата внутри длинного конвейера команд

cat access.log | grep "ERROR" | tee errors_found.txt | wc -l

Здесь tee выступает не конечной точкой, а промежуточным звеном конвейера сохраняет отфильтрованные строки с ошибками в файл, одновременно передавая тот же поток данных дальше по конвейеру для подсчёта количества строк через wc -l. Без tee пришлось бы либо выполнять команду дважды, либо терять один из двух нужных результатов (сохранённый файл или подсчёт).

Особый случай: нужно видеть вывод в реальном времени и одновременно сохранять лог выполнения долгой команды

long_running_script.sh | tee execution_log.txt

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

Особый случай: подавить вывод на экран, оставив только запись в файл

Если нужен именно эффект tee (сохранение в файл через sudo), но без засорения экрана выводом:

echo "данные" | sudo tee /etc/config.conf > /dev/null

Перенаправление в /dev/null («чёрную дыру», отбрасывающую любые данные) подавляет именно экранный вывод tee, оставляя рабочей только запись в указанный файл.

Часто задаваемые вопросы

Отличается ли tee от простого перенаправления через > или >>?

Ключевое отличие tee показывает данные на экране одновременно с записью в файл, тогда как обычное перенаправление направляет поток только в одно место (либо экран, либо файл, но не одновременно).

Требует ли команда tee прав root сама по себе?

Нет, сама команда не требует повышенных прав необходимость в sudo возникает только когда целевой файл для записи защищён и требует root-доступа, что и есть основной практический сценарий использования tee именно в связке с sudo.

Можно ли использовать tee для одновременной записи и в файл, и передачи дальше по конвейеру без sudo?

Да, конвейерное применение (способ 4) не требует sudo, если пишете в файл, доступный вашему обычному пользователю необходимость в повышенных правах возникает только для защищённых системных путей.

Безопасно ли использовать tee -a регулярно для дозаписи логов, не приведёт ли это к бесконтрольному росту файла?

Технически безопасно с точки зрения корректности данных, но да, файл будет расти без ограничений при регулярном использовании для реальных логов продакшн-систем используйте механизмы ротации (logrotate), а не полагайтесь на tee как единственный способ управления размером файла.

Заключение

Основное практическое применение tee для большинства администраторов обход ограничения перенаправления вывода при записи в защищённые системные файлы через sudo, где простой sudo echo ... >> file не срабатывает. Дополнительно tee полезен как промежуточное звено в конвейерах команд, когда нужно и сохранить результат в файл, и продолжить обработку того же потока данных дальше.

Читайте также на блоге andko.ru

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu