Команда tee
— это полезная утилита в Linux, которая позволяет читать стандартный поток ввода и записывать его содержимое одновременно как в файл, так и на стандартный вывод. Эта команда часто используется для промежуточной обработки потоков. Одной из особенностей tee
является возможность передачи информации сразу нескольким командам, что удобно в ряде сценариев работы с данными.
В этой статье мы рассмотрим примеры использования утилиты tee
и покажем, как она может быть полезна в повседневной работе с Linux.
Содержание:
- Синтаксис команды tee
- Запись стандартного вывода в файл с помощью tee
- Дополнение содержимого файла новой информацией
- Запись текста в несколько файлов
- Перенаправление вывода tee другой команде
- Удаление стандартного вывода команды tee
- Запись информации в файл с root-доступом
- Игнорирование сигнала прерывания SIGINT
- Выводы
Синтаксис команды tee
Для начала разберем синтаксис команды tee
. Он выглядит следующим образом:
Где:
OPTION
— может быть опциями командной строки;FILE
— может быть одним или несколькими аргументами, которые являются названиями или путями к соответствующим файлам.
Важно: если не указано ни одного файла, то tee
просто копирует данные со стандартного ввода на стандартный вывод.
Запись стандартного вывода в файл с помощью tee
Рассмотрим самый простой пример использования этой утилиты. Допустим, что нам нужно записать в файл file.txt
строку qwerty
. Для этого введем следующую команду:
Разберем введенный код подробнее:
- Команда
echo "qwerty"
выводит на экран строкуqwerty
. - Знак
|
передает вывод первой команды как ввод второй команды. - Команда
tee
копирует входные данные, после чего одновременно сохраняет их в файлfile.txt
и передает на стандартный вывод.
Важно: если файла file.txt
не существует, то он будет создан автоматически. Если файл уже существует, то его содержимое будет заменено новыми данными.
Дополнение содержимого файла новой информацией
Как мы сказали, по умолчанию tee
перезаписывает старое содержимое новым. Если Вы хотите дополнить уже существующие данные — используйте параметр -a
:
- Команда
echo "SEDICOMM"
направляет текстSEDICOMM
в стандартный вывод. - Команда
tee -a file.txt
принимает текст из стандартного вывода (stdout
) предыдущей команды как собственный стандартный ввод (stdin
). Опция-a
означает, что новые данные будут добавлены в конец файла, а не записаны вместо старых.
Опция-a
означает, что данные будут добавлены в конец файла, а не перезаписаны.
Запись текста в несколько файлов
Вы можете сохранить один текст сразу в несколько текстовых документов. Допустим, нам нужно, чтобы утилита tee
автоматически создала два файла — 1.txt
и 2.txt
, а также записала в каждый из них строку qwerty
. Для выполнения этой задачи введем в терминале следующую команду:
Перенаправление вывода tee другой команде
Так как команда tee
направляет данные одновременно в файл и stdout
, мы можем написать более сложную конструкцию перенаправления ввода / вывода. Для примера передадим результат работы tee
команде wc -l
:
Читайте также: Курс LFCS — часть 1: обработка текстовых потоков в Linux.
Подробнее объясним использованный код:
- Команда
echo "abcde"
подает строкуabcde
в стандартный вывод. - Конвейер (
|
) направляет вывод команды слева на ввод команды справа. - Команда
tee -a file.txt
добавляет строкуabcde
в конец файлаfile.txt
и направляет вstdout
. - Команда
wc -l
принимает текст отtee
, подсчитывает количество строк (в данном случае — 1) и выводит результат на экран.
Удаление стандартного вывода команды tee
Вы могли заметить, что во всех примерах на экране терминала отображался результат работы команды tee
. Если по каким-то причинам Вы не хотите, чтобы это происходило — направьте стандартный вывод в специальный файл /dev/null
, представляющий собой так называемое «пустое устройство». Например, перезапишем file.txt
строкой 0123456789
, но сделаем так, чтобы она не выводилась на экран:
Оператор >
перенаправляет stdout
в > /dev/null
(то есть, записывает вывод команды tee
в «пустое устройство»). Таким образом, он не сохраняется нигде.
Запись информации в файл с root-доступом
Вы наверняка знаете, что для доступа к некоторым файлам или директориям в Linux нужны права суперпользователя (root
). Одним из способов предоставления команде подобных привилегий является использование команды sudo
. Для примера сделаем так, чтобы только суперпользователи могли изменять файл file.txt
:
Теперь, чтобы записать строку SEDICOMM
в конец этого документа, нам нужно использовать комбинацию команд sudo
и tee
:
Читайте также: 4 способа отключить учетную запись root в Linux.
На скриншоте видно, что в случае попытки изменения файла без использования sudo
операционная система выдает ошибку доступа — Permission denied
.
Игнорирование сигнала прерывания SIGINT
SIGINT
(англ. Signal Interrupt) — это сигнал, который посылается процессу операционной системы Linux для запроса его прерывания. Обычно он генерируется при нажатии комбинации клавиш Ctrl+C в терминале. Когда процесс получает этот сигнал, он может завершить свою работу, а также выполнить какие-то действия перед завершением. Команда tee
имеет параметр -i
, который не позволит системе прервать ее работу. Например:
Таким образом, использованная команда сохранит строку abcde
в файл file.txt
и выведет ее на экран, а при нажатии Ctrl + C
процесс tee
не будет прерван.
Выводы
В этой статье мы показали Вам, насколько полезной является утилита tee
для работы с текстовыми документами. Мы рассмотрели случаи перезаписи файлов и добавления новых данных в их конец.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.