Linux. Каналы
Содержание
Программный канал
Стандартные потоки ввода-вывода процессов можно перенаправлять на вход другим программам.
Однонаправленный канал межпроцессорного взаимодействия называют pipe
, конвейером или трубой.
Программным каналом называется использование потока вывода одной команды в качестве потока ввода для другой программы, с помощью оператора программых каналов |
.
command 1(stdout)|(stdin)command 2(stdout)|(stdin)command 3(stdout)|(stdin)command 4(stdout)
Выполнение всех команд в конвеере начинается одновременно, каждой в своем процессе.
Вывод посылающей программы собирается в буфер вывода и ставится в очередь.
Когда следующая программа в конвеере готова принять данные на вход, операционная система посылает накопившиеся данные из буфера вывода.
Примеры
Пагинация по выводу
Частый кейс - это показывать длинный вывод данных порционно используя команду less
или more
.
ls -l /usr/bin | less
Поиск нужных строк в файлах
Не менее важно уметь искать файлы в названии которых есть нужная строка
ls -1 /usr/bin | grep conf
вывод будет примерно таким
apt-config
debconf
debconf-apt-progress
debconf-communicate
debconf-copydb
debconf-escape
debconf-set-selections
debconf-show
discover-config
getconf
gpgconf
Так же применим к итоговому списку сортировку, например в обратном порядке
ls -1 /usr/bin/ | grep conf | sort -r
Фильтр запущенных процессов
Иногда нужно найти или отфильтровать определенный процесс.
Отфильтруем результат и укажем количество найденных процессов одним числом.
ps -ef | grep bash | wc -l