Перенаправление ввода-вывода в примерах Linux/Unix
⚡ Умное резюме
Перенаправление в Linux и Unix изменяет способ передачи данных командой: чтение входных данных или отправка выходных данных (swap).ping Клавиатура и экран для работы с файлами или устройствами, использующими такие операторы, как знак «больше», знак «меньше» и оператор добавления.

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






.png)