Виды потоков
В системах Linux и Unix существуют стандартные входной (STDIN) и выходные (STDOUT, STDERR) потоки (каналы). Далее рассмотрим подробнее каждый из них.
- STDIN (Номер файлового дескриптора - 0)
Стандартный входной поток. Канал принимающий данные для обработки и последующей передачи на канал STDOUT и/или STDERR. - STDOUT (Номер файлового дескриптора - 1)
Стандартный выходной поток. Представляет собой канал записи результатов выполнения каких-либо процессов. - STDERR (Номер файлового дескриптора - 2)
Стандартный выходной поток ошибок. В данный канал попадают сообщения об ошибках.
В рамках терминала канал STDIN считывает входные данные, а каналы STDOUT и STDERR выводят выходные данные на экран.
Управление потоками
Для перенаправления каналов в терминале, применяют определенные символы. Рассмотрим каждый из них на примере команды поиска системных файлов, которые содержат слово - core. Все найденные файлы будут формироваться в поток STDOUT. Те найденные файлы, к которым у обычного пользователя нет доступа будут попадать в STDERR.
- > - вывод STDOUT в файл.
find / -name core > /tmp/testfile
В файл /tmp/testfile
попадет список путей ко всем найденным файлам, а список ошибок отобразится в терминале.
Символ >
- затирает все его содержимое и вставляет значение из потока, поэтому будьте осторожны при правке системных файлов используя данный символ. Если Вам нужно добавить данные в конец файла - используйте два последовательных символа - >>
.
- >> - вывод STDOUT в конец файла.
find / -name core >> /tmp/testfile
В конец файла /tmp/testfile
попадет список путей ко всем найденным файлам, а список ошибок отобразится в терминале.
- >& - вывод STDOUT и STDERR в файл
find / -name core >& /tmp/testfile
С помощью составного символа - >&
мы объединяем стандартный выходной поток с выходным потоком ошибок. В файл /tmp/testfile
попадет список путей ко всем найденным файлам и список ошибок.
- 2> - вывод STDERR в файл
find / -name core 2> /tmp/testfile
В файл /tmp/testfile
попадет список ошибок, а список найденных файлов, будет выведен в терминале.
Вывод потоков можно комбинировать и распределять по разным местам. Например, выведем список найденных файлов в /tmp/testfile
, а список ошибок отбросим, перенаправив их в /dev/null
.
find / -name core > /tmp/testfile 2> /dev/null
Для того чтобы направить выходной поток одной команды на входной поток другой, применяют символ - |
(pipe).
Для примера, выведем в консоли отдельные процессы системы с именем - chrome
.
ps | grep chrome
Здесь результат выполнения команды ps
передается в роли входных данных для команды grep
, в которых она ищет совпадения с именем chrome
.
Заключение
В этой небольшой статье мы рассмотрели все стандартные входные и выходные и потоки, которые, в свою очередь, очень часто применяются системными администраторами на практике.