Перенаправлення вводу-виводу в прикладах 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.