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

Прочитав эту статью, вы узнаете что такое bash (стандартный командный интерпретатор линукс), научитесь обращаться со стандартными командами: ls, cp, mv… поймете назначение инодов, жестких и символических ссылок и многое другое.

Linux Tee Command with Examples

21 Июня 2020 | Терминал В этом руководстве мы рассмотрим основы использования tee команды.

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

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

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

tee [OPTIONS] [FILE]

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

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

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

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

df -h | tee disk_

Filesystem Size Used Avail Use% Mounted on dev 0 0% /dev run 1% /run /dev/nvme0n1p3 212G 159G 43G 79% / tmpfs 357M 5% /dev/shm tmpfs 0 0% /sys/fs/cgroup tmpfs 15M 1% /tmp /dev/nvme0n1p1 511M 107M 405M 21% /boot /dev/sda1 459G 165G 271G 38% /data tmpfs 16K 1% /run/user/120

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

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

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

command | tee Добавить в файл

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

command | tee -a Игнорировать прерывание

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

command | tee -i Скрыть вывод

Если вы не хотите tee писать в стандартный вывод, вы можете перенаправить его на /dev/null :

command | tee >/dev/null Использование тройника в соединении с sudo

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

sudo echo «newline» > /etc/

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

bash: /etc/: Permission denied

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

echo «newline» | sudo tee -a /etc/

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

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

Вывод

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

#tee #linux #command

Читайте также:  Команда Echo в Linux с примерами

Вариант 1: только перенаправляем вывод терминала в файл

В этом случае весь результат работы любой команды будет записан в текстовый файл, без отображения его на экране. То есть, мы в прямом смысле перенаправим информацию с экрана в файл. Для осуществления этого нужно использовать операторы > и >> и путь к файлу в который нужно писать, в конце выполняемой команды.

Оператор > сохранит результат работы команды в указанный файл и, если в нем уже будет находиться какая-либо информация, перезапишет ее.

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

Рассмотрим на примере команды ls, которая отображает список файлов и папок в указанной директории. Давайте запишем результат ее работы в текстовый файл. Нам нужно написать команду, поставить оператор и указать путь к файлу:

Вариант 1: только перенаправляем вывод терминала в файл

ls > /home/ruslan/пример

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

cat /home/ruslan/пример

Все работает.

Помните, что «>» перезапишет все данные, которые были до этого в файле, поэтому, если вам нужно дописать что-либо в файл используйте оператор «>>«

Допустим, что после того, как мы перенаправили вывод команды ls в файл «пример» мы решили узнать версию ядра системы и также сохранить вывод в тот же файл. Чтобы узнать версию ядра воспользуемся командой uname и параметром -a, затем говорим Bash как и куда нужно сохранить результат ее выполнения:

uname -a >> /home/ruslan/пример

Вариант 1: только перенаправляем вывод терминала в файл

Снова проверим результат:

cat /home/ruslan/пример

Как видим, у нас сохранились результаты работы и ls, и uname.

Стандартные ввод, вывод и ошибка

Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы.

Результат программы обычно печатается в стандартной вывод и иногда в файл «STDERR» (ошибка). Все это три дескриптора файла (вы можете представить их как «потоки данных», пришли из языка программирования C), которые часто называют STDIN, STDOUT и STDERR.

Но часто к ним обращаются не по имени, а по номеру:

  • 0 — STDIN
  • 1 — STDOUT
  • 2 — STDERR

По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT.В нашем примере видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод). Затем все ошибки (то есть STDERR) перенаправить в стандартный вывод. Необходимо поставить амперсанд «&» перед номером назначения.

Смысл вкратце — «весь вывод указанной команды спихнуть в черную дыру!«.

Это один из способов сделать программу по-настоящему безмолвной. Добавлю, что команда в примере аналогична команде

cron job command >/dev/null 2>/dev/null

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

Пожертвовать

Система

Информация о системе

С этими командами вы с легкостью получите все подробности о компьютере:

uname -a # показывает информацию о системе (kernel, architecture…) sudo lshw # (только для Linux) предоставляет информацию об аппаратном обеспечении sudo lshw -short # (только для Linux) краткая информацию об аппаратном обеспечении lscpu # (только для Linux) Показывает информацию о ЦП lsusb # (только для Linux) вывод информации о подключенном USB устройстве date # выводит дату и время

Работам с процессами

Следующие команды предоставляют общие сведения о всех процессах, происходящих в системе. В macOS и некоторых дистрибутивах Linux htop не установлен, поэтому перед использованием нужно установить его с помощью стандартного менеджера пакетов (для macOS  — Homebrew):

ps # показывает текущие процессы, происходящие в терминальном сеансе

ps aux # показывает все процессы, происходящие на компьютере

htop # отображает в терминале монитор активности

Система

Команда htop в Linux

Смена пользователей

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

Читайте также:  Варианты очистки ноутбук от пыли в домашних условиях

su # смена текущего пользователя на администратора(root) su — # смена текущего пользователя на администратора(root), со сменой локальных переменных su maria # смена текущего пользователя на «maria» sudo nano # выполнить команду «nano» от имени администратора (root)

Копирование и вставка в буфер обмена

Вы можете скопировать и вставить текст из/в терминал, выделив их и нажав Ctrl + C или Ctrl + V. Но иногда хочется напрямую получить доступ к буферу обмена. И как вы видите ниже, это не так уж и просто, что на Linux, что на macOS.

# Linux echo «Hello my friend!» | xclip # копировать «Hello my friend!» в буфер обмена xclip -o >> pasted_ # вставить содержимое буфера в текст файла # macOS echo «Hello my friend!» | pbcopy # копировать «Hello my friend!» в буфер обмена pbpaste >> pasted_ # вставить содержимое буфера в текст файла

Основные команды

Команда интерпретатора Bash man

Отображает руководства по командам. К примеру, последующая команда выдаст вам все данные о команде cat:

$ man cat

Команда интерпретатора Bash cat

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

Команда интерпретатора Bash echo

Осуществляет вывод своих аргументов по стандартному каналу вывода.

$ echo Hello World Hello World

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

Команда интерпретатора Bash head

Читает лишь первые десять строк любого переданного текста, выводя их по стандартному каналу. Можно изменить количество выводимых строк:

$ head -50

Команда интерпретатора Bash tail

Работает аналогично head, однако читает строки с конца:

Основные команды

$ tail -50

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

$ tail -f

Команда интерпретатора Bash less

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

$ less $ ps aux | less

Кстати, о символе | мы расскажем ниже в блоке про команду интерпретатора Bash history.

Команды интерпретатора Bash true и false

Первая всегда возвращает ноль в качестве выходного статуса для индикации успеха, вторая, соответственно, не ноль в качестве выходного статуса для индикации неудачи.

$? — это переменная, содержащая выходной статус последней запущенной команды. Выходной статус — код возврата программы. В нашем случае 0 будет означать успешное выполнение программы, а любое значение, которое больше нуля, будет отражать факт возникновения ошибок в процессе выполнения. Кстати, именно по этой причине в интерпретаторе Bash истиной (true) считается 0, а ложью (false) — всё, что не ноль.

$ true $ echo $? $ false $ echo $? 1

Команда интерпретатора Bash grep

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

$ cat user:student password:123 user:teacher password:321 $ grep 'student` user:student password:123

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

Команда интерпретатора Bash sed

Потоковый редактор, который преобразует входные текстовые данные. Используется для замены выражений следующим образом: s/regexp/replacement/g. К примеру, в следующем коде произойдёт замена всех слов «Hello» на «Hi»:

$ cat Hello World $ sed 's/Hello/Hi/g' Hi World

Руководство по sed.

Команда интерпретатора Bash history

Выводит историю командной строки. Часто используется совместно с grep при поиске конкретной команды. В коде ниже будут найдены все команды, которые содержат строку g++:

$ history | grep g++ 155 g++ 159 g++

Кстати, здесь тоже можно увидеть символ | — это конвейер (pipe). С его помощью происходит перенаправление вывода одной команды на вход другой. Так, в вышеописанном примере вся история (в обычном режиме она выводится с помощью history непосредственно в вывод терминала), перенаправляется в grep в качестве входных данных. То есть мы не увидим вывод команды history, зато увидим вывод команды grep.

Команда интерпретатора Bash export

Устанавливает переменные окружения для их передачи дочерним процессам. Допустим, так мы можем передать переменную name, имеющую значение student:

Читайте также:  Как взломать запароленный RAR или ZIP архив?

$ export name=student

Команда интерпретатора Bash ps

Выводит данные о запущенных процессах.

Основные команды

$ ps PID TTY TIME CMD 35346 pts/2 00:00:00 bash

В результате выведутся 4 элемента: — PID (ID процесса), — TTY (тип терминала), — TIME (время работы процесса), — CMD (имя команды, запустившей процесс).

Команда интерпретатора Bash awk

Находит и меняет текст в файлах на основании заданного шаблона: awk ‘pattern {action}’

Команда интерпретатора Bash wget

Закачивает файлы из интернета, помещая их в текущий каталог.

$ wget -cs100

Команда интерпретатора Bash nc

Утилита для отладки сети. Вот руководство.

Команда интерпретатора Bash ping

Служит для тестирования сетевого подключения.

$ ping PING (74) 56(84) bytes of data. 64 bytes from (74): icmp_req=1 ttl=57 time=7.82 ms — ping statistics — 1 packets transmitted, 1 received, % packet loss, time 8ms rtt min/avg/max/mdev = 7.794/ ms

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

Статья написана специально для курса по Linux на основании материалов Bash-Cheatsheet.

Как вывести содержимое файла командой echo

Ну и последние несколько примеров того, как с помощью команды echo вывести на экран содержимое файла:

[email protected]:~# echo $(<) Запишем что-нибудь в файл \nЕщё одна строка в конец файла \n\nПлюс строка Плюс строка Плюс строка Плюс строка

или

[email protected]:~# echo `<` Запишем что-нибудь в файл \nЕщё одна строка в конец файла \n\nПлюс строка Плюс строка Плюс строка Плюс строка

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

Но, в общем, всё это извращения и для вывода листинга вполне подходит команда cat и не нужно изобретать лишних велосипедов:

[email protected]:~# cat Запишем что-нибудь в файл \nЕщё одна строка в конец файла \n\nПлюс строка Плюс строка Плюс строка Плюс строка

Переход по директориям

В этом разделе вы познакомитесь с основными командами bash, которые позволят вам выполнять самые простые действия в командной строке. Команда cd позволяет переходить из одной директории в другую. При этом если вы используете команду без ключей, то попадете в домашнюю директорию; для того, чтобы перейти в какую-либо конкретную директорию, необходимо просто прописать ее путь, к примеру:

cd /home/users/dir1

Вы также можете указывать команду cd с определенными ключами:

cd ../.. — переход на две директории выше;

cd — — переход в предыдущую директорию (в которой вы были до перемещения в нынешнюю).

Команда pwd укажет путь той директории, в которой вы в данный момент находитесь.

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

Используя знак

вместо

>

мы можем перенаправить стандартный ввод, заменив его содержимым файла.

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

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

Итак, мы можем воспользоваться командой < для перенаправления отсортированной версии каждого файла команде comm. Вот что у нас получилось:

$ comm <(sort ) <(sort )

Круглые скобки тут имеют тот же смысл, что и в математике. Оболочка сначала обрабатывает команды в скобках, а затем всё остальное. В нашем примере сначала производится сортировка строк из файлов, а потом то, что получилось, передаётся команде

comm

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