Linux вывод в файл и на экран одновременно

Обновлено: 02.07.2024

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

Июль 2010
Пн Вт Ср Чт Пт Сб Вс
« Июнь Авг »
1234
567891011
12131415161718
19202122232425
262728293031

Команда tee - вывод stdin на экран и в файл

Calendar

5 июля 2010, 18:06

Еще до курсов Linux задавал себе вопрос как вывод какой либо команды записывать в файл и одновременно выводить на экран. Например, пингуем какой-нибудь хост и нужно видеть глазами время отклика, и в то же время сохранить в файл все, что выводит команда ping. Если написать


то мы вывод команды ping сохраним в файл ping.txt, но не будем видеть что команда выводит на экране монитора.

И вот на курсах Linux на одной лекции преподаватель показал как сделать такую вещь. В конспект я записал, но впоследствии забыл в какой теме, потом лень было искать, а сегодня наконец решил все таки найти эту запись. И нашел.

Так вот для того чтобы одновременно выводить stdout на экран и записывать его в файл можно воспользоваться командой tee. Команда tee свой входящий поток (stdin), выводит на экран монитора (в стандартный stdout) и параллельно записывает в указанный файл.

Записав такую конструкцию видим на экране вывод команды ping, и в это же время все что выводит ping записывается с помощью tee в файл pingigorka.txt.

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

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

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

Синтаксис tee команды следующий:

    :
    • -a ( --append ) - не перезаписывать файлы, а добавлять их к заданным файлам.
    • -i ( --ignore-interrupts ) - Игнорировать сигналы прерывания.
    • Используйте tee --help для просмотра всех доступных опций.

    Как использовать tee команду

    Основное использование tee команды - отобразить стандартный вывод ( stdout ) программы и записать его в файл.

    В следующем примере мы используем df команду для получения информации об объеме доступного дискового пространства в файловой системе. Выходные данные передаются в tee команду, которая отображает выходные данные в терминал и записывает ту же информацию в файл disk_usage.txt .

    Вы можете просмотреть содержимое disk_usage.txt файла с помощью команды cat .

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

    Команда tee также может записывать в несколько файлов. Для этого укажите в качестве аргументов список файлов, разделенных пробелом:

    Добавить в файл

    По умолчанию tee команда перезапишет указанный файл. Используйте опцию -a ( --append ), чтобы добавить вывод в файл :

    Игнорировать прерывание

    Чтобы игнорировать прерывания, используйте `` -i ( –ignore-interrupts ) option. This is useful when stopping the command during execution with CTRL + C and want tee` для корректного выхода.

    Скрыть вывод

    Использование тройника в соединении с sudo

    Допустим, вы хотите записать файл, который принадлежит пользователю root как пользователь sudo. Следующая команда не будет выполнена, потому что sudo не перенаправляет вывод. Перенаправление выполняется как непривилегированный пользователь.

    Вывод будет выглядеть примерно так:

    Просто добавьте sudo перед tee командой, как показано ниже:

    tee получит вывод команды echo , повысит права на sudo и запишет в файл.

    Использование tee в сочетании с sudo позволяет записывать в файлы, принадлежащие другим пользователям.

    Вывод

    Команда tee читает из стандартного ввода и записывает его в стандартный вывод и один или несколько файлов.

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

    Суть ее работы можно описать заглавной буквой T — команда tee linux принимает данные из одного источника и может сохранять их на выходе в нескольких местах. То, как она может использоваться в Linux, хорошо видно на нескольких примерах, которые приведены ниже.

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

    Синтаксис команды достаточно простой:

    $ tee опции файл

    • -a или -append - Используется для записи вывода в конец существующего файла.
    • -i или -ignore-interrupts - Используется, чтобы игнорировать прерывающие сигналы.
    • -help - Используется для показа всех возможных операций.
    • -version - Используется для показа текущей версии этой команды.

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

    Примеры использования

    1. Простое использование команды tee

    Команда ls -la нужна в Linux для показа списка файлов с описанием в текущем каталоге. Здесь команда tee используется для сохранения вывода ls -la в файл вывод.txt Введите следующие команды в терминале, чтобы проверить как работает команда tee.

    ls -la | tee вывод.txt

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


    Вторая команда показала содержимое файла вывод.txt


    2. Добавление вывода в существующий файл

    Если вывод любой команды записать в существующий файл с применением команды tee и операции -a, содержимое файла не будет перезаписано. Здесь вывод команды pwd будет добавлен в конец файла вывод.txt Запустите следующие команды с помощью терминала:

    pwd | tee -a вывод.txt

    Здесь первая команда отображает вывод pwd в терминал и записывает вывод в конец файла вывод.txt Вторая команда используется для выделения вывода файла. Показано, что файл вывод.txt содержит оба результата: из предыдущего примера и из этого.


    3. Запись вывода в несколько файлов

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

    date | tee вывод1.txt вывод2.txt

    cat вывод1.txt вывод2.txt

    Здесь первая команда выводит текущее системное время и сохраняет полученные результаты в два файла вывод1.txt и вывод2.txt Вторая команда показывает идентичное содержимое обоих файлов.


    4. Игнорируем прерывание сигнала

    Команда tee linux с опцией -i используется в этом примере, чтобы игнорировать любые прерывания во время ее выполнения. Таким образом, команда будет выполнена правильно, даже если пользователь нажимает CTRL+C. Выполните следующие команды в терминале.

    wc -l вывод.txt | tee -i вывод3.txt

    Здесь первая команда считает количество строчек в файле вывод.txt и сохраняет полученный результат в файл вывод3.txt Вторая команда показывает содержимое файла вывод.txt, который содержит 37 строчек. Третья команда показывает содержимое файла вывод3.txt, в котором указано, что он действительно содержит 37 строчек.


    5. Перенос вывода команды tee в другую команду

    Вывод команды tee может быть перенесен в другую команду. В этом примере вывод из первой команды переносится в tee, а ее вывод — в другую команду. Запустите следующие команды в терминале:

    ls | tee вывод4.txt | wc -lcw

    Здесь первая команда используется для записи вывода ls в файл вывод4.txt и подсчета общего числа строк, слов и символов в файле вывод4.txt Вторая команда используется для отображения вывода команды ls, а третья — для отображения содержимого файла вывод4.txt


    6. Команда tee и скрипты

    Команда tee также может использоваться для записи вывода bash-скрипта в файл. Создайте bash-файл с приведенным кодом, который возьмет два входных числа из аргументов командной строки и выведет сумму этих чисел. Команда tee используется в этом примере для записи вывода add.sh в файл результат.txt

    Запустите следующую команду в терминале для записи файла и отображения его содержимого.

    bash add.sh 40 80 | tee результат.txt

    Здесь числа 40 и 80 переносятся в качестве аргументов командной строки в скрипт add.sh и вывод записывается в файл результат.txt Команда cat выводит соответствующий результат.


    7. Как скрыть вывод команды в терминале

    Если вы хотите записать вывод прямо в файл и не показывать его в терминале, используйте /dev/null с командой tee. Для этого выполните следующие команды.

    df | tee вывод5.txt > /dev/null

    Здесь первая команда используется для записи вывода команды df в файл вывод5.txt, при этом вывод не показывается в терминале. Вторая команда показывает полученный результат.

    Итоги

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

    Нет похожих записей


    Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

    Одновременный вывод в консоль и файл
    Добрый день. Такой вопрос: есть батник, который в процессе своей работы выводит много информации.

    Одновременный ввод/вывод данных в консоль - СИ
    Необходимо сделать одновременный вывод и ввод данных в консоли. Должно получиться, что-то на.

    Запись и одновременный вывод строки из txt
    Добрый день! Имеется: Запись в файл: <?php $filename = "data.txt"; $a = ($_GET); $b =.

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

    Засунуть | tee logs.txt в ./script.sh (в те места где выводите данные) никак?

    Marinero, засунуть то можно, но тогда эти данные не выводятся на экран, а только пишутся в лог.
    Целью является одновременно: 1- видеть данные на экране; 2- всё что видим на экране пишется в лог.

    Добавлено через 1 час 54 минуты
    Нет, про tee, не верно написал.
    Пример:
    echo "Start:" | tee $LOG
    date | tee $LOG
    Получаем в файле LOG запись только последней строки, т.е. date.
    Если сделать так:
    echo "Start:" | tee $LOG
    date | tee >>$LOG
    То в логе записи будет две, вот только запись номер два (date) в консоли не отобразится, что противоречит ТЗ.

    Можно каждую команду с выводом дублировать. Сначала выводить на экран, а потом в файл.
    Неэффективно, но все же.
    Например:

    Добавлено через 48 минут
    Кстати, ОС AIX 6.1 если это имеет значение.

    Решение

    greg zakharov, что-то не разобрался с логгером, но всеравно спасибо.
    Marinero, спасибо за подсказку, не догадался посмотреть родные ключи.
    Цель достигнута.

    Запись знаков > < " в файл через консоль
    Вот пример записи, который я использую: echo 12345 &gt; 1.txt Как можно с помощью echo (или еще.

    Вывод в консоль\файл
    Есть такая схема работы программы(см. внизу). В файле SML находится код программы. Допустим, этот.

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


    Вывод в файл и на консоль одновременно
    Привет Всем! Подскажите как можно, и можно ли вообще, организовать вывод одновременно в файл и.

    Консоль закрывается после того как произведет запись в файл
    Доброго времени суток. Делаю программку, которая ведёт вывод и в консоль, и в текстовый файл: .

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

    Стандартные потоки ввода и вывода в Linux являются одним из наиболее распространенных средств для обмена информацией процессов, а перенаправление >, >> и | является одной из самых популярных конструкций командного интерпретатора.

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

    Требования

    Потоки

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

    Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.

    Ввод и вывод распределяется между тремя стандартными потоками:

    • stdin — стандартный ввод (клавиатура),
    • stdout — стандартный вывод (экран),
    • stderr — стандартная ошибка (вывод ошибок на экран).

    Потоки также пронумерованы:

    • stdin — 0,
    • stdout — 1,
    • stderr — 2.

    Из стандартного ввода команда может только считывать данные, а два других потока могут использоваться только для записи. Данные выводятся на экран и считываются с клавиатуры, так как стандартные потоки по умолчанию ассоциированы с терминалом пользователя. Потоки можно подключать к чему угодно: к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением:

    Стандартный ввод

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

    EOF вводится нажатием сочетания клавиш Ctrl+D.

    Рассмотрим работу со стандартным выводом на примере команды cat (от CONCATENATE, в переводе «связать» или «объединить что-то»).

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

    Cat отправляет полученные входные данные на дисплей терминала в качестве стандартного вывода и останавливается после того как получает EOF.

    Пример

    В открывшейся строке введите, например, 1 и нажмите клавишу Enter. На дисплей выводится 1. Введите a и нажмите клавишу Enter. На дисплей выводится a.

    Дисплей терминала выглядит следующим образом:

    Для завершения ввода данных следует нажать сочетание клавиш Ctrl + D.

    Стандартный вывод

    Стандартный вывод записывает данные, сгенерированные программой. Когда стандартный выходной поток не перенаправляется в какой-либо файл, он выводит текст на дисплей терминала.

    При использовании без каких-либо дополнительных опций, команда echo выводит на экран любой аргумент, который передается ему в командной строке:

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

    При выполнении echo без каких-либо аргументов, возвращается пустая строка.

    Пример

    Команда объединяет три файла: file1, file2 и file3 в один файл bigfile:

    Команда cat по очереди выводит содержимое файлов, перечисленных в качестве параметров на стандартный поток вывода. Стандартный поток вывода перенаправлен в файл bigfile.

    Стандартная ошибка

    Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.

    Пример

    Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.

    При запуске без аргументов ls выводит содержимое в пределах текущего каталога.

    Введем команду ls с каталогом % в качестве аргумента:

    В результате должно выводиться содержимое соответствующей папки. Но так как каталога % не существует, на дисплей терминала будет выведен следующий текст стандартной ошибки:

    Перенаправление потока

    Linux включает в себя команды перенаправления для каждого потока.

    Команды со знаками > или < означают перезапись существующего содержимого файла:

    Команды со знаками >> или << не перезаписывают существующее содержимое файла, а присоединяют данные к нему:

    • >> — стандартный вывод,
    • << — стандартный ввод,
    • 2>> — стандартная ошибка.

    Пример

    В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:

    Для завершения цикла нажмите сочетание клавиш Ctrl + D.

    Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.

    Для просмотра содержимого файла file1 введите команду:

    В результате на дисплей терминала должно быть выведено следующее:

    Для перезаписи содержимого файла введите следующее:

    Для завершения цикла нажмите сочетание клавиш Ctrl + D.

    В результате на дисплей терминала должно быть выведено следующее:

    Предыдущего текста в текущем файле больше не существует, так как содержимое файла было переписано командой >.

    Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:

    Для завершения цикла нажмите сочетание клавиш Ctrl + D.

    Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:

    Каналы

    Каналы используются для перенаправления потока из одной программы в другую. Стандартный вывод данных после выполнения одной команды перенаправляется в другую через канал. Данные первой программы, которые получает вторая программа, не будут отображаться. На дисплей терминала будут выведены только отфильтрованные данные, возвращаемые второй командой.

    Пример

    В результате каждый файл текущего каталога будет размещен на новой строке:

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

    Пример

    При использовании нескольких фильтров в одной команде рекомендуется разделять их с помощью знака канала |.

    Фильтры

    Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:

    • find — возвращает файлы с именами, которые соответствуют передаваемому аргументу.
    • grep — возвращает только строки, содержащие (или не содержащие) заданное регулярное выражение.
    • tee — перенаправляет стандартный ввод как стандартный вывод и один или несколько файлов.
    • tr — находит и заменяет одну строку другой.
    • wc — подсчитывает символы, линии и слова.

    Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):

    Если в качестве аргумента передается файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).

    Пример

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

    Пример

    Допускается перенаправление нескольких потоков в один файл:

    Для просмотра содержимого файла file3 введите команду cat:

    В результате на дисплее терминала отобразиться следующее:

    Заключение

    Мы рассмотрели возможности работы с перенаправлениями потоков >, >> и |, использование которых позволяет лучше работать с bash-скриптами.

    Читайте также: