Что такое перенаправление?
Перенаправление — это функция Linux, позволяющая при выполнении команды изменять стандартные устройства ввода / вывода. Основной рабочий процесс любой команды Linux заключается в том, что она принимает входные данные и выдает выходные данные.
- Стандартным устройством ввода (stdin) является клавиатура.
- Стандартным устройством вывода (stdout) является экран.
С перенаправлением можно изменить вышеуказанный стандартный ввод / вывод.
Перенаправление вывода
Символ ‘> ‘ используется для перенаправления вывода (STDOUT).
Перенаправление в Linux / Unix — раскрыто!
Пример:
ls -al> списки
Здесь вывод команды ls -al перенаправляется в файл «listings» вместо вашего экрана.
Примечание. Используйте правильное имя файла при перенаправлении вывода команды в файл. Если существует файл с таким же именем, перенаправленная команда удалит содержимое этого файла, а затем оно может быть перезаписано.
Если вы не хотите, чтобы файл был перезаписан, но хотите добавить больше содержимого в существующий файл, вам следует использовать оператор «>> ».
Вы можете перенаправить стандартный вывод не только в файлы, но и на устройства!
$ cat music.mp3> / dev / audio
Команда cat считывает файл music.mp3 и отправляет вывод в / dev / audio, которое является аудиоустройством. Если настройки звука на вашем ПК правильные, эта команда воспроизведет файл music.mp3
Перенаправление ввода
Символ ‘< ‘ используется для перенаправления ввода (STDIN)
Пример: почтовая программа в Linux может помочь вам отправлять электронные письма из Терминала.
Вы можете ввести содержимое электронного письма с помощью стандартной клавиатуры устройства. Но если вы хотите прикрепить файл к электронной почте, вы можете использовать оператор перенаправления ввода в следующем формате.
Mail -s «Тема» на адрес <Имя файла
Это будет прикреплять файл с электронным письмом, и он будет отправлен получателю.
Приведенные выше примеры были простыми. Давайте посмотрим на некоторые передовые методы изменения направления, в которых используются файловые дескрипторы.
Дескрипторы файлов (FD)
В Linux / Unix все является файлом. Обычный файл, каталоги и даже устройства — это файлы. Каждый файл имеет связанный номер, называемый дескриптором файла (FD).
На вашем экране также есть дескриптор файла. Когда программа выполняется, вывод отправляется в файловый дескриптор экрана, и вы видите вывод программы на своем мониторе. Если выходные данные отправляются в файловый дескриптор принтера, выходные данные программы были бы напечатаны.
Перенаправление ошибок
Всякий раз, когда вы выполняете программу/команду на терминале, всегда открываются 3 файла, а именно: стандартный ввод, стандартный вывод, стандартная ошибка.
Эти файлы всегда присутствуют при запуске программы. Как объяснялось ранее, дескриптор файла связан с каждым из этих файлов.
Файл | Дескриптор файла |
Стандартный ввод STDIN | 0 |
Стандартный выход STDOUT | 1 |
Стандартная ошибка STDERR | 2 |
По умолчанию на экране отображается поток ошибок. Перенаправление ошибок — это перенаправление ошибок в файл, отличный от экрана.
Почему перенаправление ошибок?
Перенаправление ошибок — одна из очень популярных функций Unix / Linux. Частые пользователи UNIX будут считать, что многие команды выдают огромное количество ошибок.
- Например, при поиске файлов обычно возникают ошибки отказа в разрешении. Эти ошибки обычно не помогают человеку, ищущему конкретный файл.
- При выполнении сценариев оболочки вы часто НЕ хотите, чтобы сообщения об ошибках загромождали нормальный вывод программы.
Решение — перенаправить сообщения об ошибках в файл.
Пример 1
1 $ myprogram 2> файл ошибок
Выше мы выполняем программу с именем myprogram.
Дескриптор файла для стандартной ошибки — 2.
Используя «2>», мы перенаправляем вывод ошибки в файл с именем «errorfile».
Таким образом, вывод программы не загроможден ошибками.
Пример 2
Вот еще один пример, в котором используется оператор поиска —
находить. -name ‘my *’ 2> error.log
Используя команду «find», мы ищем «.» текущий каталог для файла с «именем», начинающимся с «my»
Пример 3
Давайте посмотрим на более сложный пример,
Администраторы сервера часто составляют списки каталогов и сохраняют как ошибки, так и стандартные выходные данные в файл, который можно обработать позже. Вот команда.
ls Documents ABC> dirlist 2> & 1
Вот,
- который записывает вывод из одного файла на вход другого файла. 2> & 1 означает, что STDERR перенаправляет на цель STDOUT (которая является списком файлов)
- Мы перенаправляем вывод ошибок на стандартный вывод, который, в свою очередь, перенаправляется в файл dirlist. Следовательно, оба вывода записываются в файл dirlist
Выводы
- Каждый файл в Linux имеет соответствующий дескриптор файла, связанный с ним.
- Клавиатура является стандартным устройством ввода, а экран — стандартным устройством вывода.
- «>» — оператор перенаправления вывода. «>>» добавляет вывод в существующий файл
- «<» — оператор перенаправления ввода «> &» перенаправляет вывод одного файла в другой.
- Вы можете перенаправить ошибку, используя соответствующий файловый дескриптор 2.
Интересные записи: