Конвейеры и потоки в Linux: шпаргалка

Перенаправление вывода, поток ошибок и связки команд через |.

Перенаправление: > и >>

echo "молоко" > list.txt   # перезаписать файл
echo "хлеб" >> list.txt    # дописать в конец
sort data.txt > data.txt   # ЛОВУШКА: файл очистится
sort -o data.txt data.txt  # сортировка на месте — так

Файл после > очищается до запуска команды, поэтому перенаправление в тот же файл уничтожает данные: sort уже читает пустоту. Для записи «на место» у sort есть -o.

Потоки ошибок: 2>&1 и /dev/null

cmd > out.log        # только stdout, ошибки на экране
cmd > all.log 2>&1   # оба потока в файл
cmd 2>/dev/null      # спрятать ошибки
cmd 2>&1 > out.log   # ЛОВУШКА: ошибки мимо файла

У процесса два выходных потока: stdout (1) и stderr (2). Порядок важен: 2>&1 значит «туда, куда 1 смотрит сейчас», поэтому пишется после > файла, не до.

Конвейер: sort | uniq -c

sort tags.txt | uniq -c | sort -nr
#   3 python
#   2 sql
#   1 linux  — частотный словарь тремя командами

| соединяет stdout левой команды со stdin правой. uniq схлопывает только соседние повторы, поэтому перед ним обязателен sort — иначе дубли молча останутся.

Подсчёт: wc -l

wc -l app.log            # строк в файле
ls | wc -l               # записей в каталоге
grep -r "TODO" . | wc -l # пометок в проекте

wc -l считает строки, -w слова, -c байты. В конвейере это универсальный финальный шаг «сколько всего» для вывода любой команды.

tee: на экран и в файл разом

./deploy.sh | tee deploy.log     # видно и записано
./deploy.sh | tee -a deploy.log  # дописывать, не перезаписывать

tee дублирует поток: печатает на экран и одновременно пишет в файл. Без -a каждый запуск перезапишет лог предыдущего — для накопления флаг обязателен.

Цепочки: && и ||

mkdir -p build && cd build   # cd только при успехе
npm test || echo "тесты упали"  # правая часть при провале
cmd1 ; cmd2                  # просто подряд, без условий

&& запускает правую команду только при успехе левой (код возврата 0), || — только при провале. Точка с запятой условий не ставит: выполнится всё подряд.

поделиться: Telegram VK

Что дальше