Как перенаправить вывод в файл и стандартный вывод

Перенаправление обычно осуществляется вставкой специального символа «> » между командами. Обычно синтаксис выглядит так:

ответа

использование tail -f output должно работать.

6 ответ дан pkyeck , 11:19 Ссылка

  • 1 И ужасно медленный (CouchDB)Robert Gould , 04:14

мишень идеально подходит для этого, но это также сделает задание

ls -lr / > output | cat output -11 ответ дан Sumit Singh , 11:19 Ссылка

  • 1 That' s ошибка, если произведено doesn' t уже существуют и это doesn' t делают то, что Вы хотите, если это делает, в целом это бессмысленно. Возможно, Вы имели в виду "; " вместо " | "?Robert Gamble , 15:24
  • 2 Даже если бы Вы использовали ;, вывод был бы очень отложен во время медленной команды.Brad Koch , 15:14
  • 3 На Википедию ( ) я могу читать, что Mixi использует несколько сотен серверов MySQL. Они используют обоих, или Википедия неправильно?tuinstoel , 04:13

Теги linux bash file-io io stdout Похожие вопросы

  • 3 Вычесть большое число в баш —
  • 27 Как выполнить gpg из сценария, выполненного кроном? —
  • 102 Как избежать повторяющихся записей в .bash_history —
  • 36 Каково соглашение со всем другим UIDs, который может иметь процесс? —
  • 658 Извлечь подстроку в Bash —
  • подстановка имени файла & mdash; Есть ли что-то, чтобы убедиться, что это не определенные буквы? —
  • 41 / dev / random Очень медленно? —

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

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

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

Читайте также:  Какой дистрибутив Linux лучший для ноутбуков?

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

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

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

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

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

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

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

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

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

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

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

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

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

Потоки вывода / ввода и программы

А вот что реально поможет с переводом стандартного потока вывода на вход другой программы – так это «труба» – |, также известная как конструкция «пайп» (калька с английского «pipe»). По трубе можно слева направо лить данные, изменяя их как на конвейере:

help | wc -l

– сработает уже ожидаемо. Можно делать более сложные «каскады» из труб:

ifconfig | grep inet | grep -v inet6 | cut -d ‘ ‘ -f 2

Работает это следующим образом:

  1. Получаем вывод команды ifconfig с подробной информацией о сетевых интерфейсах.
  2. Отфильтровываем строки, оставляя те, что с подстрокой «inet» командой grep.
  3. Из результата убираем строки с подстрокой «inet6» (не интересуемся IPv6).
  4. Разделяем строки на столбцы по пробелу и берём 2-ой столбец с помощью cut.

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

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

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

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

$ man cat

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

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

Читайте также:  Jupyter Notebook для начинающих: учебник

Команда интерпретатора 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:

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

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

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

cd /home/users/dir1

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

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

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

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

Использование оператора «>&» для перенаправления ввода и дублирования

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

Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:

Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR), команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных данных в введите:

>> 2>&1