Gymterview
junior

Что такое пайпы (pipes) и как их использовать?

Пайп (|) — это механизм, который соединяет stdout одной команды со stdin другой, создавая конвейер обработки данных.

Аналогия

Пайп — это конвейерная лента на заводе. Каждый станок (команда) делает свою операцию и передаёт результат следующему по ленте. Вместо одного сложного станка — цепочка простых, каждый из которых отлично делает одну вещь. Это ключевой принцип философии Unix.

Синтаксис

Пример
command1 | command2 | command3

Практические примеры

Пример
# Найти Java-процессы
ps aux | grep java

# Подсчитать количество файлов в директории
ls -1 | wc -l

# Отсортировать и убрать дубликаты
cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head -10
# Выведет 10 самых частых IP-адресов из лога

# Поиск по выводу команды
mvn dependency:tree | grep spring

# Постраничный просмотр длинного вывода
ps aux | less

# Фильтрация и форматирование
docker ps | grep -v CONTAINER | awk '{print $1, $2}'

tee — дублирование потока

Команда tee читает stdin и записывает одновременно в stdout и в файл (как тройник в трубопроводе):

Пример
# Записать в файл и показать на экране
ls -la | tee listing.txt

# Дописать в файл (append)
echo "new line" | tee -a logfile.txt

# Записать в несколько файлов одновременно
echo "data" | tee file1.txt file2.txt file3.txt

# Использование с sudo (распространённый приём)
echo "127.0.0.1 myapp.local" | sudo tee -a /etc/hosts
# Почему не "sudo echo ... >> /etc/hosts"? Потому что перенаправление >>
# выполняется текущим shell без sudo, и доступа к /etc/hosts не будет.

Пайп для stderr

Пример
# Передать stderr через пайп (bash 4+)
command |& grep "ERROR"

# Классический вариант
command 2>&1 | grep "ERROR"

На собеседовании: интервьюер хочет увидеть, что вы умеете комбинировать простые команды в цепочки. Частая ошибка — не знать про tee и пытаться одновременно увидеть вывод на экране и сохранить в файл с помощью > (что невозможно).