Перенаправлення вводу-виводу в прикладах 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ор.
Файл Descriptors (FD)
У Linux/Unix все є файлом. Звичайний файл, каталоги і навіть пристрої є файлами. Кожний файл має пов’язаний номер під назвою File Descriptабо (FD).
На вашому екрані також є файл Descriptабо. Коли програма виконується, вихідні дані надсилаються до файлу Descriptабо екрана, і ви побачите вихід програми на моніторі. Якщо вихідні дані надсилаються до File 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.