news
Serverspace запустил возможность оплаты по QR-коду через СБП
VB
Vyacheslav Breus
7 июля 2022

Стандартные перенаправления ввода-вывода в Linux

Введение

Философия Linux построена на парадигме «одна утилита для одной функции». Из этого вытекает тот факт, что в современных дистрибутивах Linux огромное множество различных утилит, каждая из которых обладает только необходимым минимумом функций, зато то, что она делает, делается хорошо.

Второй вывод из указанных принципов – настоятельная необходимость реализации возможности «передавать» результаты работы из одной программы в другую «внутри» операционной системы.

И такой механизм был найден. В Linux им стал механизм «потоков». Все процессы работают в рамках трех потоков – стандартный ввод (stdin), стандартный вывод (stdout) и стандартная ошибка (stderr).  Под эти потоки системно зарезервирована нумерация – «0» для stdin, «1» для stdout и «2» для stderr.

Стандартный поток ввода принимает данные с клавиатуры или с потока вывода другого скрипта. Примеры рассмотрим ниже в данной статье.

По умолчанию поток stdout выводит данные на терминал пользователя.

рис.1

Вывод stderr (стандартный вывод для ошибок) также показывает свои данные на экране терминала, но с одним отличием – он используется только если «что-то пошло не так», в случае штатного поведения программы ее вывод направляется на stdout.

рис.2

Перенаправление потоков

Вывод данных с любого из трех описанных потоков можно перенаправить в другой поток или в файл. Для этого зарезервированы спецсимволы перенаправления (< и >).

Двойное перенаправление дописывает данные с вывода к данным целевого объекта

Одинарный символ перенаправления заменяет содержимое целевого объекта на перенаправляемый вывод.

рис.3

Пайп-символы

Помимо перенаправления данных стандартных потоков ввода-вывод, в Linux реализована «передача» данных вывода одной программы на поток ввода другой программы. Для этого зарезервирован т.н. «пайп-символ», вертикальная черта (|). Например, в команде

history | grep touch
Copy

 сначала на поток вывода передается история команд пользователя, затем эти данные передаются на вход утилите grep, которая отфильтровывает только те команды, что содержат слово «touch» и уже эти данные отображаются в терминале пользователя.

рис.4

Программы-фильтры

Это целый класс утилит, которые используются совместно с «пайп-символом» и служат для «выборки» данных. Наиболее популярные программы-фильтры:

  • find – используется для поиска файлов по имени
  • grep – отображает «отфильтрованный» текст, содержащий только те строки, в которых встречаются данные, поданные программе в качестве аргумента
  • tee – утилита «перенаправляет» входящий поток данных одному или нескольким «целевым» объектам. Это могут быть файлы, другие программы, потоки ввода-вывода итп
  • tr – используется для поиска и замены текста
  • wc – подсчитывает сколько раз заданные в качестве аргумента символы встречаются в содержимом «целевого» объекта

Выводы

Резюмируя можно сказать, что понимание механизма потоков и работы системных перенаправлений крайне важно. Это безусловно поможет при создании программ, обслуживании серверов, или автоматизации рутинных процессов любого вида.

Оценка :
5 из 5
Аverage rating: 5.0
Оценок: 1
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700 300
ООО «ИТГЛОБАЛКОМ ЛАБС»
700 300