Перенаправление ввода-вывода в примерах Linux / Unix

Что такое перенаправление?

Перенаправление — это функция Linux, позволяющая при выполнении команды изменять стандартные устройства ввода / вывода. Основной рабочий процесс любой команды Linux заключается в том, что она принимает входные данные и выдает выходные данные.

  • Стандартным устройством ввода (stdin) является клавиатура.
  • Стандартным устройством вывода (stdout) является экран.

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

Перенаправление вывода

Символ ‘> ‘ используется для перенаправления вывода (STDOUT).

Перенаправление в Linux / Unix — раскрыто!

Пример:

ls -al> списки

Здесь вывод команды ls -al перенаправляется в файл «listings» вместо вашего экрана.

redirect-komandi-v-file-listing

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

Если вы не хотите, чтобы файл был перезаписан, но хотите добавить больше содержимого в существующий файл, вам следует использовать оператор «>> ».

dobavit-bolshe

Вы можете перенаправить стандартный вывод не только в файлы, но и на устройства!

$ cat music.mp3> / dev / audio

Команда cat считывает файл music.mp3 и отправляет вывод в / dev / audio, которое является аудиоустройством. Если настройки звука на вашем ПК правильные, эта команда воспроизведет файл music.mp3

Перенаправление ввода

Символ ‘< ‘ используется для перенаправления ввода (STDIN)

perenapravlenie-vvoda

Пример: почтовая программа в Linux может помочь вам отправлять электронные письма из Терминала.

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

Mail -s «Тема» на адрес <Имя файла

format-perenapravleniya-vvoda

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

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

Дескрипторы файлов (FD)

В Linux / Unix все является файлом. Обычный файл, каталоги и даже устройства — это файлы. Каждый файл имеет связанный номер, называемый дескриптором файла (FD).

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

Перенаправление ошибок

Всякий раз, когда вы выполняете программу/команду на терминале, всегда открываются 3 файла, а именно: стандартный ввод, стандартный вывод, стандартная ошибка.

standard-input-standard-output-standard-error

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

Файл Дескриптор файла
Стандартный ввод STDIN 0
Стандартный выход STDOUT 1
Стандартная ошибка STDERR 2

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

Почему перенаправление ошибок?

Перенаправление ошибок — одна из очень популярных функций Unix / Linux. Частые пользователи UNIX будут считать, что многие команды выдают огромное количество ошибок.

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

Решение — перенаправить сообщения об ошибках в файл.

Пример 1

1 $ myprogram 2> файл ошибок

perenapravit-soobscheniya-ob-oshibkah

Выше мы выполняем программу с именем myprogram.

Дескриптор файла для стандартной ошибки — 2.

Используя «2>», мы перенаправляем вывод ошибки в файл с именем «errorfile».

Таким образом, вывод программы не загроможден ошибками.

Пример 2

Вот еще один пример, в котором используется оператор поиска —

находить. -name ‘my *’ 2> error.log

Используя команду «find», мы ищем «.» текущий каталог для файла с «именем», начинающимся с «my»

komanda-poiska

Пример 3

Давайте посмотрим на более сложный пример,

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

ls Documents ABC> dirlist 2> & 1

Вот,

  • который записывает вывод из одного файла на вход другого файла. 2> & 1 означает, что STDERR перенаправляет на цель STDOUT (которая является списком файлов)
  • Мы перенаправляем вывод ошибок на стандартный вывод, который, в свою очередь, перенаправляется в файл dirlist. Следовательно, оба вывода записываются в файл dirlist

vivod-iz-fila-na-vhod

Выводы

  • Каждый файл в Linux имеет соответствующий дескриптор файла, связанный с ним.
  • Клавиатура является стандартным устройством ввода, а экран — стандартным устройством вывода.
  • «>» — оператор перенаправления вывода. «>>» добавляет вывод в существующий файл
  • «<» — оператор перенаправления ввода «> &» перенаправляет вывод одного файла в другой.
  • Вы можете перенаправить ошибку, используя соответствующий файловый дескриптор 2.

Интересные записи:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: