Какова цель 'тройник'?

Все обычаи тройник я видел были такие:

 do_something | tee -a logfile

Или:

do_something_else | tee logfile

Это тройник придумана для тех, что Дон'т знаю, что вы можете сделать то же самое с трубой перенаправления консоли? Такие как:

do_something >> logfile

Или:

do_something_else > logfile

Это'ы практически одинаковы, и это занимает меньше просмотров клавиатуры ввести. Какие скрытые возможности я не вижу в тройник?

Комментарии к вопросу (7)

То, что вы Don'т видите, что выполнить_действие | тройник -лог ставит выход в журнале и в stdout, а выполнить_действие >> журнал` ставит его только в лог-файл.

Цель футболка - создать один вход, несколько сценариев выхода - так же, как в 'Т' пересечения.

Редактировать

Там были комментарии, как тройник дает возможность более качественного использования судо. Это не относится к делу: кошка, ДД или лучше буфер предоставить такую возможность с более высокой производительностью, если вы не'т нужно несколько выходов. Используйте тройник для чего он предназначен, а не для того, что ее "также могу сделать и"

Комментарии (13)

Тройник не бесполезно

Может быть, вы знали об этом? Если нет, читайте дальше! Или если вы знаете как это работает, но разве'т знаете почему он существует, пропустить до конца, чтобы увидеть, как она вписывается в с философия Unix.

Что это цель тройник?

В своей простейшей форме, она принимает данные со стандартного ввода и пишет на стандартный вывод и один (или более) файлов. Оно было приравнено к сантехника тройник шт в том, как она разделяет один вход на два выхода (два направления).

Примеры

Позвольте'возьмем Ваш первый пример:

do_something | tee -a logfile

Это имеет выход выполнить_действие и добавляет его к файлу журнала, а также отображать его пользователю. В самом деле, страница Википедии о тройник это как второй пример:

просмотр и добавление вывода команды в существующий файл:

программы-нибудь вкусненькое.с | тройник -программы.Линт

это отображает стандартный вывод программы Линт.команда C на компьютере, и в то же время добавляет копию ее до конца программы.Линт файл. Если программа.Линт файл не существует, он будет создан.

Следующий пример имеет еще одно применение: эскалация разрешения:

, Чтобы допустить эскалации разрешений:

кошка ~/.по SSH/id_rsa.паб | СШ админ@сервер "и судо тройник -а /корень/.по SSH/authorized_keys2 и GT; /dev/нуль"и

этот пример показывает, тройник используется, чтобы обойти ограничение в команде судо. судо не в трубы стандартный вывод в файл. Сбрасывая свой стандартный поток в/dev/нуль, мы также подавления зеркального вывода в консоли. Указанная выше команда дает текущему пользователю root доступ к серверу по SSH, установить пользователя'публичный ключ с сервера'список ключей авторизации С.

Или возможно вы хотите взять вывода одной команды, пишут, что где-то, а также использовать его в качестве ввода для другой команды?

вы можете также использовать команду тройник для хранения выходных данных команды в файл и перенаправить тот же вывод в качестве входных данных для другой команды.

следующая команда будет производить резервное копирование с помощью crontab, и передать записи crontab-файла в качестве входных данных для команды sed, который будет делать замену. После замены, он будет добавлен в качестве нового задания.

и GT; $ кронтаб -л | тройник crontab-backup.txt | СЭД 'ы/Старый/Новый/' | кронтаб –

(кредит тройник примеры использования команды)

Тройник работает с философия Unix:

пишите программы, которые делают одну вещь и делают это хорошо. Писать программы для совместной работы. Писать программы для обработки текстовых потоков, потому что это универсальный интерфейс.

(Кредит основы философия Unix)

тройник подходит ко всем из них:

  • он делает одну вещь: создает дополнительную копию входного сигнала
  • он работает с другими программами, потому что это клей (или 'Т' сантехника Если вы предпочитаете), что позволяет другим программам работать вместе, как в примерах выше
  • она делает это путем манипулирования текстового потока приведены на стандартный ввод
Комментарии (5)

Это'ы практически одинаковы, и это занимает меньше просмотров клавиатуры ввести.

Это не одно и то же...

Как представляется, следующие несколько эквивалентны, но они'повторно не:

в

$ echo "hi" > test.txt

в

$ echo "hi" | tee test.txt
hi

Критическое различие в том, что бывший написал данные только по имени файла, а второй написал "привет" к терминалу (стандартный вывод) и в имени файла, как показано ниже:


тройник позволяет записать данные в файл и использовать его в трубопровод и далее, что позволяет вам делать полезные вещи - все равно, что держать данные на полпути через трубопровод:

grep '^look ' interesting_file.txt \
  | tee interesting_lines.txt \
  | sort

Или, вы можете записать в файл с более высоким уровнем привилегий, не давая всей трубопроводной повышенными привилегиями (здесь " Эхо " работает как пользователь, а тройник записывает в файл как пользователь root):

echo 0 \
  | sudo tee /proc/sys/net/ipv4/ip_forward

С тройник, вы можете написать много файлов (поток stdout и``):

echo "hi" \
  | tee a.txt b.txt

Это's также можно использовать метод exec с тройник для записи всех сценарий'ы выходной файл, в то время как все еще позволяя наблюдателя (стандартный вывод) для просмотра данных:

exec > >( tee output.log )
Комментарии (7)

Это тройник:

Т-образный патрубок. Он имеет на входе, и две отдельные розетки. Другими словами, он разбивает одну трубу в два; подобно развилке на дороге.

Аналогично, тройник труба ( | ), которая позволяет перенаправить стандартный поток ввода двух отдельных выходов.


Пример Скажем, например, вы вводите команды ls /. Вы'll получить выходной сигнал, который выглядит примерно так:

Applications    Network     Users       bin        dev      net      private    tmp         var
Library         System      Volumes     cores      etc      home     opt        sbin        usr

Перенаправить вывод в текстовый файл, команды `ls / > ls.txt и никакой вывод не отображается в консоли, только в результирующий текстовый файл.

Хотите увидеть результат, и передать его в текстовый файл одновременно? Добавить тройник в вашу трубу ( | ), т. е.: ЛС / | тройник ls.txt


Сравните две:

ls /          >          ls.txt
ls /        | tee        ls.txt
Комментарии (4)

Нет. Вы случайно не упомянуть один из немногих примеров, когда вы действительно могли бы перенаправить в файл, используя в > и >> операторов.

Но тройник может сделать гораздо больше. Потому что ты трубы к нему, можно передать что-то еще.

Хороший пример указан на странице Википедии:

find "4DOS" wikipedia.txt | tee 4DOS.txt | sort > 4DOSsorted.txt

В принципе, можно трубу тройник, чтобы можно было потом трубка от тройника к чему-то еще. Если все вы хотите сделать, это написать файл журнала, да, тогда вы не'т действительно нужен тройник.

Комментарии (0)

футболка далек от бесполезных. Я использую его все время, и я рад, что он существует. Это's очень полезный инструмент, если у вас есть трубопровод, который вы хотите разделить. Самый простой пример заключается в том, что у вас есть какой-нибудь каталог , Что вы хотите tar и вы также хотите, чтобы обсудить это, потому что вы'вновь параноик (как я) и Дон'т доверять носитель для хранения данных надежно. Вы можете писать его на диск сначала, а потом обсудим это, но, что'd неудачной, если архив будет поврежден, прежде чем она'с хэшированными. Кроме того, вы'd должны прочитать его и, если вы работаете с файлами, которые несколько сотен Гб много, вы будете знать, что вы действительно Дон'т хотите, чтобы прочитать их снова, если это не'т должны быть.

Так что я сделать это просто так:

tar -c "$d" | tee >(sha256sum) >(cat > "$d"".tar") > /dev/null

Это создает смолы мяч и трубы его на тройник, который передает его на два суб-снарядов, в одном из которых он'ы хэшируется и в другой из которого она's написано на диске.

Это's также отличный, если вы хотите выполнить несколько операций на большой файл:

< file.tar.gz tee >(sha256sum) >(tar -xz) /other/storage/location/file.tar.gz > /dev/null

Один раз считывает файл, хэширует его (так можно проверить, есть ли's по-прежнему, как это должно быть), извлекает его, и копирует его в другое место. Не нужно читать его три раза за это.

Комментарии (13)

Придираться на @bertieb'ы ответьте, что говорит Этот пример показывает, тройник используется, чтобы обойти ограничение в команду sudo. судо не в состоянии передать стандартный вывод в файл.

Нет никаких ограничение, только непонимание того, как команда обрабатывается.

Пример:

судо Эхо 0 > /труды/системы/нетто/протоколов IPv4/ip_forward

В текущей оболочки разбирает командную строку. Он находит перенаправление вывода и выполняет это. Затем он выполняет команду, которая является `судо и обеспечивает оставшееся командной строки в качестве аргументов выполняемой команде. Если текущая оболочка не имеет прав суперпользователя, то перенаправление вывода не удастся.

Эхо 0 | судо тройник /труды/системы/нетто/протоколов IPv4/ip_forward

Это работает, потому что перенаправление вывода откладывается в команду тройник`, который в этот момент не работает, потому что он был казнен черезсудо``.

судо Баш-с "Эхо 0 > /труды/системы/нетто/протоколов IPv4/ip_forward-то"

Это работает, потому что оболочка делает перенаправление суперпользователя.

Комментарии (1)

Как другие люди упомянули, выходной трубопроводы тройник команда пишет, что вывод в файл и на stdout.

Я часто использую тройник, когда я хочу, чтобы захватить выход из команды, которая занимает много времени для запуска, а также желая осмотреть выход, как команда делает его доступным. Таким образом, я не'т придется ждать команды, чтобы закончить бег, прежде чем я проверить выходной.

То, что не'т, кажется, еще не упоминалось (если я не пропустил), что тройник команды также можно писать в несколько файлов одновременно. Например:

ls *.png | tee a.txt b.txt

буду писать все *.ПНГ файлы в текущей директории в два разных файла (a.txt и b.txt`) одновременно.

На самом деле, вы можете ввести текст в несколько разных файлов одновременно с тройник такой:

$ tee --append a.txt b.txt c.txt d.txt
These lines are appended to four different files,
and are also written to stdout.
CTRL-D
Комментарии (0)

Наиболее часто используется тройник, чтобы увидеть текст на терминале, в то же время вы посылаете его в файл (или файлы). Формулировка вашего вопроса предполагает, что вы только когда-нибудь написать текст в лог-файл. У меня есть скрипты, которые пишут списки имен файлов и имен каталогов для запуска файлов (будут обработаны другие скрипты асинхронно) и я использую тройник туда же отправить содержимое в stdout. Все стандартный вывод направляется в журналы. Так что у меня есть мой текст, где я хочу и у меня есть запись в журнале записи, что я сделал это, все в одном 'Эхо' заявление

тройник-это также лучший способ в Unix для изготовления нескольких идентичных файлов. Я использую его иногда для принятия несколько пустых файлов, как это ...

:|tee file01 file02 file03
Комментарии (3)

Представьте, вы хотите записать вывод команды в лог-файл и печатать в stdout. Когда вам нужно сделать это одновременно, тогда вам нужно тройник.

В случае использования для построения сценариев, которые пишут все построить в stdout (например, Дженкинс), но важных вещах, в то же время в отдельном файле журнала (для кратких сообщений).

Вы'МР-настоящему заскучать тройник когда вы должны скриптов в Windows. Нет тройник, и это действительно раздражает.

Комментарии (7)