Гид по технологиям

Как использовать команду tee в Linux

5 min read Команды Linux Обновлено 15 Apr 2026
Команда tee в Linux: вывод на экран и в файл
Команда tee в Linux: вывод на экран и в файл

Введение

В Linux стандартное перенаправление с помощью операторов > и >> сохраняет вывод в файл и не показывает его на экране. Но иногда нужно и видеть вывод, и сохранить его копию для последующего анализа. Для этого служит утилита tee — она дублирует поток вывода (STDOUT) в один или несколько файлов и одновременно пропускает его дальше по конвейеру.

человек, использующий команду tee в терминале

Коротко: tee читается из стандартного ввода и пишет в стандартный вывод и в файлы. Обычно её используют вместе с конвейером (|).

Базовый синтаксис

command | tee options filepath

Где options — опции tee (например -a), а filepath — путь к файлу для сохранения вывода.

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

Сохранить вывод ls в файл и одновременно увидеть его в терминале:

ls | tee ./output.txt

При указании пути tee проверяет существование файла. Если файла нет — он создаётся автоматически, что удобно в скриптах.

разделение вывода ls с помощью tee

Если файл принадлежит root и вы хотите записать туда вывод, предварите команду sudo.

Если не хотите перезаписывать содержимое файла, используйте флаг -a для дозаписи:

ls | tee -a ./output.txt

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

ls | tee ./output1.txt ./output2.txt

Иногда tee прерывается из-за сигналов (например Ctrl+C или Ctrl+Z). Чтобы игнорировать такие сигналы, используйте флаг -i:

ls | tee -i ./output.txt

Получить справку и версию:

tee --help
tee --version

Передача вывода дальше по конвейеру

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

command | tee filepath | othercommand

Пример: сохранить результат ls, а затем отфильтровать его через grep:

ls | tee ./output.txt | grep 'Documents'

Это особенно полезно при отладке конвейеров: вы видите результат на экране, сохраняете лог и позволяете следующей команде работать с тем же потоком.

Когда команда tee не подходит

  • Когда нужно перенаправлять STDERR (поток ошибок) по умолчанию tee работает с STDOUT. Для работы со STDERR его нужно явно перенаправить, например command 2>&1 | tee file.
  • При работе с бинарными данными стоит убедиться, что промежуточные утилиты не преобразуют кодировку или окончания строк.
  • Если требуется атомарная запись (гарантированная целостность файла при конкурирующих записах), tee не обеспечивает блокировки по умолчанию.

Альтернативы и дополнения

  • Перенаправление с объединением потоков: command 2>&1 | tee file — сохраняет и стандартный вывод, и ошибки.
  • script — записывает интерактивную сессию терминала, включая управляющие последовательности и ввод пользователя.
  • Использовать stdbuf или unbuffer для контроля буферизации при работе в сетевых конвейерах.
  • Для логирования в системный журнал используйте logger.

Умственные модели и эвристика

  • Представляйте конвейер как трубу: tee — это ответвление, которое делает копию потока и отбрасывает её в файл, при этом основной поток продолжает движение.
  • Если важно не потерять данные — дозаписывайте (-a) и также сохраняйте STDERR.
  • Для автоматизированных задач в скриптах добавляйте отметки времени (date) рядом с выводом или включайте префиксы в лог.

Методика: как логировать вывод команды в скрипте (мини-план)

  1. Определить место хранения логов и обеспечить права доступа: /var/log/myapp/.
  2. Формировать имена файлов по шаблону с датой: log-$(date '+%Y-%m-%d').log.
  3. Запускать команду и дозаписывать вывод: command 2>&1 | tee -a "$LOGFILE".
  4. При необходимости сжать старые логи и установить ротацию (logrotate).
  5. Проверить доступность диска и размер логов перед записью.

Чек-листы по ролям

  • Сисадмин:

    • Проверить права на файл/каталог перед записью.
    • Использовать sudo при записи в системные каталоги.
    • Настроить ротацию логов.
  • Разработчик:

    • Использовать tee для отладки пайплайнов.
    • Дозаписывать вывод при CI-задачах, чтобы сохранить историю запуска.
  • DevOps:

    • Перенаправлять STDERR вместе с STDOUT для полноты логов.
    • Интегрировать с системами сбора логов (Fluentd, Filebeat).

Шпаргалка по командам (cheat sheet)

  • Сохранить вывод и показать на экране:
command | tee ./output.txt
  • Дозаписать в файл:
command | tee -a ./output.txt
  • Игнорировать сигналы прерывания:
command | tee -i ./output.txt
  • Сохранить STDOUT и STDERR:
command 2>&1 | tee ./output.txt
  • Сохранить в несколько файлов:
command | tee ./out1.txt ./out2.txt

Примеры и тесты приёмки

Короткие тесты, чтобы убедиться, что tee работает как ожидается:

  • Тест 1: echo hello | tee out.txt — файл out.txt содержит hello и терминал показывает hello.
  • Тест 2: ls nonexist 2>&1 | tee err.txterr.txt содержит сообщение об ошибке.
  • Тест 3: seq 1 3 | tee -a out.txt — числа добавляются к существующему файлу.

Критерии приёмки

  • Файл создаётся при отсутствии и содержит копию вывода.
  • При -a содержимое не перезаписывается.
  • STDERR включён при использовании 2>&1.

Решение для типичных проблем

  • Если не видите вывод в терминале — проверьте, не перенаправлен ли STDOUT в другой дескриптор.
  • Если файл остаётся пустым — проверьте права на запись и используйте sudo при необходимости.
  • Если вывод пахнет буферизацией (например в фоне) — примените stdbuf -oL или unbuffer.

Простая инструкция для автоматизации (playbook)

  1. Выберите каталог для логов и дождитесь процессов с правами записи.
  2. В скрипте объявите LOGFILE и используйте:
command 2>&1 | tee -a "$LOGFILE"
  1. Настройте ротацию логов и уведомления при заполнении диска.

Диаграмма принятия решения

flowchart TD
  A[Нужно ли видеть вывод и сохранять?] -->|Нет| B[Обычное перенаправление: > или >>]
  A -->|Да| C[Нужно ли сохранять STDERR?]
  C -->|Да| D[Используйте command 2>&1 | tee -a file]
  C -->|Нет| E[Используйте command | tee -a file]
  D --> F[Настроить ротацию логов]
  E --> F

1-строчный глоссарий

  • STDOUT — стандартный поток вывода программы.
  • STDERR — стандартный поток ошибок.
  • Конвейер (pipe) — оператор |, передаёт вывод одной команды на вход другой.

Итог

Команда tee проста, но гибка: она даёт возможность одновременно видеть результаты в терминале и сохранять их для анализа или передачи дальше. Используйте -a для безопасной дозаписи, перенаправляйте STDERR при необходимости и интегрируйте tee в скрипты с ротацией логов для надёжного логирования.

Сводка ключевых команд:

  • command | tee file
  • command | tee -a file
  • command 2>&1 | tee file
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

NetworkManager не запускается на Linux — руководство
Сеть

NetworkManager не запускается на Linux — руководство

Защитите Google Drive на iPhone с Face ID
Безопасность

Защитите Google Drive на iPhone с Face ID

Сменить адрес электронной почты в Slack — инструкция
Продуктивность

Сменить адрес электронной почты в Slack — инструкция

Как копировать слои в Photoshop между документами
Photoshop

Как копировать слои в Photoshop между документами

Эффект печатной машинки с CSS
Frontend

Эффект печатной машинки с CSS

Исправление синего экрана (BSoD) в Windows
Windows

Исправление синего экрана (BSoD) в Windows