Как сохранить вывод команды терминала (Bash) в текстовый файл

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

Введение

Для работы в Ubuntu пользователь может выбрать один из двух возможных вариантов интерфейса: графический либо интерфейс командной строки. Графический интерфейс (GUI — Graphical user interface) знаком большинству пользователей, в нем для выполнения действий нужно использовать различные элементы рабочего стола. Он имеет свои преимущества, которые выражаются главным образом в удобном и привычном формате подачи информации, а также в отсутствии необходимости знать какие-либо команды.

Однако многие пользователи Linux предпочитают работать в командной строке (CLI, Command Line Interface). Как правило, эти пользователи так или иначе связаны с программированием или системным администрированием, тем не менее знание основ bash будет полезно всем пользователям. Командная строка позволяет выполнять команды значительно быстрее, чем при использовании GUI, при этом экономит ресурсы. Более того, зачастую команды не имеют своих аналогов в графическом интерфейсе и, благодаря этому, дают значительную свободу пользователям в своих действиях. При этом интерфейс командной строки встроен в ядро операционной системы, а значит, он доступен даже тогда, когда вы не можете воспользоваться графической оболочкой. Сами же команды одинаковы для всех операционных систем на базе Linux, будь то Ubuntu, CentOs, Fedora или какая-либо другая.

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_ .

Читайте также:  Как изменить язык в Гугл Хром в Windows или на Android

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

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

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

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

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

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

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

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

Читайте также:  Расширенная настройка Apache 2 в Unix-подобных системах

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

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

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

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

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

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

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

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

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

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

Remarks

Это стандартные потоки для ввода, вывода и вывода ошибок.

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

Следующие указатели потока доступны для получения стандартных потоков:

Указатель Поток
stdin Стандартный ввод
stdout Стандартные выходные данные
stderr Стандартная ошибка

Эти указатели можно использовать в качестве аргументов для функций. Некоторые функции, например getchar и putchar, используют stdin и stdout автоматически.

Эти указатели являются константами, и им не могут быть присвоены новые значения. Функцию freopen можно использовать, чтобы перенаправить потоки в файлы на диске или на другие устройства. Операционная система позволяет перенаправлять стандартный ввод и вывод программы на командном уровне.

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

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

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

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

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

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

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

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

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

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

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

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

Просмотр содержимого файла

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

# grep: фильтрация по строкам grep 455 # вывести строку, где есть 455 # cut: отображение столбцов cut -f 3 # вывести только третий столбец cut -f 2-3 # вывести 2-ой и 3-ий столбец cut -c 9-19 # вывести от 9-ти до 19-ти символов каждой строки cut -f 1 -d ‘;’ # в файле использовать ‘;’ в качестве разделителя вместо tab # awk: то же, что и cut, но имеет ещё больше разделителей, фильтров и он более сложный в вычислении awk ‘{print $3}’ # вывести 3-ий столбец awk ‘{print $2 «, » $3}’ # вывести 2-ой и 3-ий столбец, и разделить запятой awk ‘{print $2 + $3}’ # вывести сумму 2-го и 3-го столбца awk ‘length($0) > 20’ # вывести все строки длиннее 20 символов awk ‘$2 > 100′ # вывести строки, в которых значение второго столбца больше 100 # wc wc # вывести количество строк, слов и символов в текстовом файле ls -1 | wc # вывести количество строк, слов и символов каждого файла в текущем каталоге # sort: сортировка строк по алфавиту sort # сортировка строк файла sort -r # сортировка в обратном порядке sort -R # сортировка в случайном порядке sort -t $’\t’ -k 3n,3 # сортировать строки по числовому значению третьего столбца # uniq: отображает неповторяющиеся и повторяющиеся строки файла uniq # опускает повторяющиеся строки uniq -d # выводит только повторяющиеся строки uniq -u # выводит только те строки, у которых нет повторов uniq -c # выводит количество повторов для каждой строки

Надеюсь вам понравится эта шпаргалка!

  • Как писать Bash-однострочники для клонирования и управления GitHub/GitLab репозиториями
  • Автоматизированное семантическое управление версиями с помощью GitVersion
  • Основы Git за 5 минут

Читайте нас в Telegram, VK и

Перевод статьи Guillermo Barreiro: The Essential Bash Cheat Sheet