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', если вы предпочитаете), который позволяет другим программам работать вместе, как в примерах выше
- это делается путем манипулирования потоком текста, заданным на стандартном вводе