Учебники

7) Перенаправление

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

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

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

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

В этом уроке мы узнаем

Нажмите здесь, если видео не доступно

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

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

Перенаправление в Linux / Unix - демистифицировано!

Пример:

ls -al > listings

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

Перенаправление в Linux / Unix - демистифицировано!

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

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

Перенаправление в Linux / Unix - демистифицировано!

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

$ cat music.mp3 > /dev/audio

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

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

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

Перенаправление в Linux / Unix - демистифицировано!

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

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

Mail -s "Subject" to-address < Filename

Перенаправление в Linux / Unix - демистифицировано!

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

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

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

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

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

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

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

Перенаправление в Linux / Unix - демистифицировано!

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

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

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

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

Переадресация ошибок — одна из самых популярных функций Unix / Linux.

Частые пользователи UNIX считают, что многие команды выдают огромное количество ошибок.

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

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

Пример 1

$ myprogram 2>errorsfile

Перенаправление в Linux / Unix - демистифицировано!

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

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

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

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

Пример 2

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

find . -name 'my*' 2>error.log

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

Перенаправление в Linux / Unix - демистифицировано!

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

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

ls Documents ABC> dirlist 2>&1

Вот,

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

Перенаправление в Linux / Unix - демистифицировано!

Резюме

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