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