Вступ
Linux, як і багато інших операційних систем, використовує концепцію потоків для обробки вводу та виводу даних. Потоки дозволяють процесам взаємодіяти з користувачем, файлами та іншими процесами. У цьому посібнику ми розглянемо три основні стандартні потоки в Linux: стандартний вхід (stdin), стандартний вихід (stdout) та стандартний потік помилок (stderr).
Стандартні потоки
Давайте розглянемо основні стандартні потоки в Linux. Перший потік який ми розглянемо буде стандартний вхід. Отже, стандартний вхід (stdin) – це потік, через який процес отримує вхідні дані. За замовчуванням, stdin пов’язаний з клавіатурою, але може бути перенаправлений з файлу або іншого джерела даних.
Приклад
Нижче наведено приклад команди яка читає вміст файлу input.txt
і передає його команді cat
:
cat < input.txt
Наступна команда рахує кількість рядків, слів і символів у файлі input.txt
:
wc < input.txt
Слідуючий потоком який ми розглянемо буде стандартний вихід. Стандартний вихід (stdout) – це потік, через який процес виводить дані. За замовчуванням, stdout пов’язаний з терміналом, але може бути перенаправлений у файл або інший потік.
Приклад
В прикладі наведенему нижче, команда виводить текст “Hello, World!” у файл output.txt
:
echo "Hello, World!" > output.txt
Тепер двайте перенаправимо стандартний вивід із додаванням до існуючого вмісту файлу:
echo "Hello, again!" >> output.txt
Ну, і останній який ми розглянемо – це стандартний потік помилок. Стандартний потік помилок (stderr) – це потік, через який процес виводить повідомлення про помилки. За замовчуванням, stderr пов’язаний з терміналом, але може бути перенаправлений у файл або інший потік.
Приклад
ls non_existent_file 2> error.txt
Ця команда перенаправляє повідомлення про помилки у файл error.txt
.
Перенаправлення stdout та stderr в один файл
Давайте об’єднаємо стандартний вихід та потік помилок і перенаправимо їх в один файл:
ls non_existent_file > output.txt 2>&1
Перенаправлення stdout та stderr окремо
Цього разу, давайте перенаправимо стандартний вихід у файл output.txt
, а повідомлення про помилки у файл error.txt
:
ls non_existent_file > output.txt 2> error.txt
Символи перенаправлення потоків
>
– перенаправлення стандартного виходу (stdout).2>
– перенаправлення стандартного потоку помилок (stderr).<
– перенаправлення стандартного входу (stdin).|
– канал для зв’язування виходу однієї команди з входом іншої.
Канали (pipes)
Канали дозволяють передавати вивід однієї команди на вхід іншої команди. Це дуже корисно для створення послідовностей команд.
Нижче наведена команда яка передає вивід команди ls
на вхід команди grep
, яка відфільтровує файли з розширенням .txt
.
ls | grep ".txt"
Файлові дескриптори
Файловий дескриптор – це ціле число, яке використовується для позначення відкритого файлу або іншого ввід-вивід ресурсу. Кожен процес має свою таблицю файлових дескрипторів, де кожен дескриптор вказує на певний відкритий файл. Коли процес відкриває файл (або інший ресурс), операційна система створює запис у таблиці відкритих файлів та повертає файловий дескриптор, який є індексом у цій таблиці. Процес може використовувати цей дескриптор для виконання операцій над файлом, таких як читання, запис, закриття тощо.
Потік | Дескриптор | Призначення |
---|---|---|
Standard Input (stdin) | 0 | Отримання вхідних даних від користувача або іншого процесу. |
Standard Output (stdout) | 1 | Виведення даних користувачу або іншому процесу. |
Standard Error (stderr) | 2 | Виведення повідомлень про помилки. |
Висновок
Стандартні потоки в Linux – це потужний інструмент для керування ввід-вивід операціями. Вони дозволяють гнучко взаємодіяти з даними, перенаправляючи їх між процесами, файлами та користувачем. Розуміння та використання стандартних потоків значно підвищує ефективність роботи з командним рядком Linux.