Команда tee в Linux с примерами

Команда tee в Linux с примерами

Рубрики:

Linux, Терминал Linux

Метки:

, ,

Команда tee — это полезная утилита в Linux, которая позволяет читать стандартный поток ввода и записывать его содержимое одновременно как в файл, так и на стандартный вывод. Эта команда часто используется для промежуточной обработки потоков. Одной из особенностей tee является возможность передачи информации сразу нескольким командам, что удобно в ряде сценариев работы с данными.

В этой статье мы рассмотрим примеры использования утилиты tee и покажем, как она может быть полезна в повседневной работе с Linux.

Содержание:

  1. Синтаксис команды tee
  2. Запись стандартного вывода в файл с помощью tee
  3. Дополнение содержимого файла новой информацией
  4. Запись текста в несколько файлов
  5. Перенаправление вывода tee другой команде
  6. Удаление стандартного вывода команды tee
  7. Запись информации в файл с root-доступом
  8. Игнорирование сигнала прерывания SIGINT
  9. Выводы

Синтаксис команды tee

Для начала разберем синтаксис команды tee. Он выглядит следующим образом:

 

Где:

  • OPTION — может быть опциями командной строки;
  • FILE — может быть одним или несколькими аргументами, которые являются названиями или путями к соответствующим файлам.

Важно: если не указано ни одного файла, то tee просто копирует данные со стандартного ввода на стандартный вывод.

Запись стандартного вывода в файл с помощью tee

Рассмотрим самый простой пример использования этой утилиты. Допустим, что нам нужно записать в файл file.txt строку qwerty. Для этого введем следующую команду:

 

tee-echo

Разберем введенный код подробнее:

  1. Команда echo "qwerty" выводит на экран строку qwerty.
  2. Знак | передает вывод первой команды как ввод второй команды.
  3. Команда tee копирует входные данные, после чего одновременно сохраняет их в файл file.txt и передает на стандартный вывод.

Важно: если файла file.txt не существует, то он будет создан автоматически. Если файл уже существует, то его содержимое будет заменено новыми данными.

Дополнение содержимого файла новой информацией

Как мы сказали, по умолчанию tee перезаписывает старое содержимое новым. Если Вы хотите дополнить уже существующие данные — используйте параметр -a:

 

tee-append
Объясним этот пример:

  1. Команда echo "SEDICOMM" направляет текст SEDICOMM в стандартный вывод.
  2. Команда tee -a file.txt принимает текст из стандартного вывода (stdout) предыдущей команды как собственный стандартный ввод (stdin). Опция -a означает, что новые данные будут добавлены в конец файла, а не записаны вместо старых.
    Опция -a означает, что данные будут добавлены в конец файла, а не перезаписаны.

Запись текста в несколько файлов

Вы можете сохранить один текст сразу в несколько текстовых документов. Допустим, нам нужно, чтобы утилита tee автоматически создала два файла — 1.txt и 2.txt, а также записала в каждый из них строку qwerty. Для выполнения этой задачи введем в терминале следующую команду:

 

2-files

Перенаправление вывода tee другой команде

Так как команда tee направляет данные одновременно в файл и stdout, мы можем написать более сложную конструкцию перенаправления ввода / вывода. Для примера передадим результат работы tee команде wc -l:

 

wc-l

Читайте также: Курс LFCS — часть 1: обработка текстовых потоков в Linux.

Подробнее объясним использованный код:

  1. Команда echo "abcde" подает строку abcde в стандартный вывод.
  2. Конвейер (|) направляет вывод команды слева на ввод команды справа.
  3. Команда tee -a file.txt добавляет строку abcde в конец файла file.txt и направляет в stdout.
  4. Команда wc -l принимает текст от tee, подсчитывает количество строк (в данном случае — 1) и выводит результат на экран.

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

Вы могли заметить, что во всех примерах на экране терминала отображался результат работы команды tee. Если по каким-то причинам Вы не хотите, чтобы это происходило — направьте стандартный вывод в специальный файл /dev/null, представляющий собой так называемое «пустое устройство». Например, перезапишем file.txt строкой 0123456789, но сделаем так, чтобы она не выводилась на экран:

 

tee dev-null

Оператор > перенаправляет stdout в  > /dev/null (то есть, записывает вывод команды tee в «пустое устройство»). Таким образом, он не сохраняется нигде.

Запись информации в файл с root-доступом

Вы наверняка знаете, что для доступа к некоторым файлам или директориям в Linux нужны права суперпользователя (root). Одним из способов предоставления команде подобных привилегий является использование команды sudo. Для примера сделаем так, чтобы только суперпользователи могли изменять файл file.txt:

 

Теперь, чтобы записать строку SEDICOMM в конец этого документа, нам нужно использовать комбинацию команд sudo и tee:

 

tee sudo

Читайте также: 4 способа отключить учетную запись root в Linux.

На скриншоте видно, что в случае попытки изменения файла без использования sudo операционная система выдает ошибку доступа — Permission denied.

Игнорирование сигнала прерывания SIGINT

SIGINT (англ. Signal Interrupt) — это сигнал, который посылается процессу операционной системы Linux для запроса его прерывания. Обычно он генерируется при нажатии комбинации клавиш Ctrl+C в терминале. Когда процесс получает этот сигнал, он может завершить свою работу, а также выполнить какие-то действия перед завершением. Команда tee имеет параметр -i, который не позволит системе прервать ее работу. Например:

 

tee-ignore

Таким образом, использованная команда сохранит строку abcde в файл file.txt и выведет ее на экран, а при нажатии Ctrl + C процесс tee не будет прерван.

Выводы

В этой статье мы показали Вам, насколько полезной является утилита tee для работы с текстовыми документами. Мы рассмотрели случаи перезаписи файлов и добавления новых данных в их конец.

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Linux, Терминал Linux

Метки:

, ,

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню