Использование tee для разделения вывода и перенаправление ввода с помощью <
На этом заключительном этапе вы изучите две дополняющие друг друга концепции: разделение вывода с помощью команды tee и передачу данных в команду из файла с помощью оператора <.
Разделение вывода с помощью tee
Иногда требуется сохранить вывод команды в файл и одновременно видеть его в терминале. Операторы > и >> перенаправляют данные исключительно в файл, скрывая их с экрана. Команда tee решает эту задачу, разделяя поток данных: она отправляет его и в файл, и в стандартный вывод (на ваш экран). Название команды происходит от Т-образного разветвителя в сантехнике (T-splitter), который разделяет поток на два пути.
Посмотрим на это в деле. Мы выведем список содержимого каталога /etc/ и используем tee, чтобы отобразить список на экране и сохранить его в файл etc_listing.txt.
ls /etc/ | tee etc_listing.txt
Вы увидите полный список каталогов в терминале. Одновременно с этим команда tee записала те же самые данные в etc_listing.txt. Вы можете это проверить:
cat etc_listing.txt
Содержимое файла будет полностью соответствовать тому, что вы видели на экране.
По умолчанию tee перезаписывает файл. Чтобы вместо этого добавить данные в конец, используйте опцию -a. Это очень полезно для ведения журналов. Создадим лог-файл и добавим в него две записи.
date | tee system_log.txt
echo "User labex performed a system check." | tee -a system_log.txt
Первая команда создает system_log.txt с текущей датой. Вторая команда, используя tee -a, добавляет новую строку, не удаляя дату. Проверим итоговый файл:
cat system_log.txt
Вывод покажет обе строки:
Wed Jun 25 14:56:53 CST 2025
User labex performed a system check.
Перенаправление стандартного ввода с помощью <
Теперь рассмотрим противоположность перенаправлению вывода: перенаправление стандартного ввода (stdin). Многие команды, такие как sort, wc или cat, могут считывать данные из stdin (обычно это ваша клавиатура). Оператор < позволяет указать команде брать данные из файла.
Сначала создадим простой файл со списком элементов. Назовем его items.txt.
echo "banana" > items.txt
echo "apple" >> items.txt
echo "cherry" >> items.txt
Теперь у нас есть файл items.txt с тремя неотсортированными строками. Команда sort умеет сортировать текст. Используем <, чтобы передать содержимое items.txt на вход команде sort.
sort < items.txt
Команда прочитает содержимое items.txt как входные данные, отсортирует их и выведет результат в стандартный вывод (терминал):
apple
banana
cherry
Функционально это похоже на запуск sort items.txt, но данный пример демонстрирует мощную концепцию перенаправления файла в стандартный ввод команды. Это становится критически важным при работе с инструментами, которые умеют читать только из stdin и не принимают имя файла в качестве аргумента.
В качестве последнего примера рассмотрим cat < items.txt. Это заставляет cat читать данные из items.txt, и, поскольку задача cat — выводить входные данные на выход, содержимое файла отобразится на экране.
cat < items.txt
На этом наше знакомство с основами перенаправления ввода-вывода в Linux завершено. Теперь у вас есть инструменты для управления тем, откуда команды получают данные и куда они их отправляют.