Tee
не бесполезен
Может быть, вы знали это в любом случае? Если нет, то читайте дальше! Или, если вы знаете, как он работает, но не знаете, почему он существует, перейдите к концу, чтобы увидеть, как он вписывается в философию Unix.
Что это цель tee
?
В простейшем случае он берет данные на стандартный ввод и записывает их в стандартный вывод и один (или более) файл. Его сравнивают с сантехническим тройником так, как он разделяет один вход на два выхода (и два направления).
Примеры
Давайте возьмем ваш первый пример:
do_something | tee -a logfile
Он принимает вывод do_something
и добавляет его в файл журнала, а также отображает его для пользователя. На самом деле, страницаtee
в Википедии содержит второй пример:
Чтобы просмотреть и добавить вывод команды из существующего файла:
lint program.c | tee -a program.lint
Это отобразит стандартный вывод команды lint program.c на компьютере и в то же время добавит его копию в конец файла program.lint. Если файл program.lint не существует, он создается.
В следующем примере есть другое применение: повышение разрешений :
Чтобы разрешить эскалацию разрешений:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
В этом примере показано, как тройник используется для обхода внутреннего ограничения в sudo
команде. sudo
не может передать стандартный вывод в файл. Выгружая его стандартный поток вывода /dev/null
, мы также подавляем зеркальный вывод в консоли. Приведенная выше команда предоставляет текущему пользователю root доступ к серверу через ssh, установив открытый ключ пользователя в список авторизации ключей сервера.
Или, может быть, вы хотите взять выходные данные одной команды, записать их где-нибудь, а также использовать их в качестве входных данных для другой команды?
Вы также можете использовать команду tee, чтобы сохранить выходные данные команды в файл и перенаправить те же выходные данные, что и входные данные для другой команды.
Следующая команда создаст резервную копию записей crontab и передаст записи crontab в качестве команды ввода в sed, которая выполнит замену. После замены он будет добавлен в качестве нового задания cron.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(благодарю за примеры использования команды Tee )
Tee
работает с философией Unix:
Напишите программы, которые делают одно и делают это хорошо. Напишите программы для совместной работы. Написание программ для обработки текстовых потоков, потому что это универсальный интерфейс.
(Благодарность основам философии Unix )
tee
подходит всем этим:
- это делает одну вещь: создает дополнительную копию ввода
- он работает с другими программами, потому что это клей (или кусок сантехники 'T', если вы предпочитаете), который позволяет другим программам работать вместе, как в примерах выше
- это делается путем манипулирования потоком текста, заданным на стандартном вводе