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