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и пытаться одновременно увидеть вывод на экране и сохранить в файл с помощью>(что невозможно).