Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Шокирующий трюк для админов: ускоряю Linux в разы с помощью редиректов и пайпов — настолько просто, что не поверите!

Оглавление

Кратко по теме

В Linux редиректы и пайпы дают невероятную свободу в работе с выводом команд. Можно сохранять результат в файл или сразу отправлять его другой команде — рассказываю основы, которые реально полезны на практике.

Потоки: что это такое

В Linux любой процесс работает с так называемыми потоками. Есть поток ввода stdin, поток вывода stdout и отдельный для ошибок — stderr. Как у реки, у потока есть источник (откуда берутся данные) и устье (куда они идут).

Обычно ввод поступает с клавиатуры — когда я что-то набираю. А стандартный вывод и ошибки сразу отображаются в терминале.

Я могу перенаправить потоки или объединять их с помощью пайпов. Редирект — это когда вывод отправляется не в терминал, а, например, записывается в файл. Пайп позволяет взять результат одной команды и передать его другой.

Эти инструменты позволяют легко объединять простые команды в мощные цепочки и автоматизировать рутину.

Все способы перенаправления потоков

Самый базовый вариант — переадресовать вывод команды в файл. Это удобно: так можно сохранить важные логи или не упустить длинный вывод.

Например, на тестовом компьютере команда du выдала мне 1380 строк. Я просто слил их в файл.

-2

Обычный знак "больше" просит оболочку отправить stdout du в файл disk-usage.txt — на экране ничего не появляется.

Команда ls показывает, что файл сразу создан, а wc подтверждает — ровно 1380 строк, всё совпадает.

-3

Такой редирект создаёт или перезаписывает файл каждый раз. Если хотите дописать новый вывод — используйте двойной знак "больше" (>>):

-4

less с флагом -N (номера строк) покажет: новые строки начинаются строго после 1380-й, ничего не стёрлось.

-5

А если при команде возникнет ошибка, то сообщение всё равно окажется в терминале: обычный редирект отправляет только stdout, а stderr остаётся как есть.

-6

Результаты du попали в results.txt, а ошибка по несуществующему файлу осталась на экране.

Можно явно указать, какой поток куда направить: 1 — stdout, 2 — stderr. Например, отправляем их в разные файлы:

-7

А можно и оба потока отправить в один файл:

-8

Теперь всё, включая ошибки, окажется в этом файле.

Если же нужно, чтобы в терминале не появлялось ничего вообще, есть универсальный приём — направьте вывод в файл /dev/null. Он просто "съедает" все данные без остатка:

-9

Теперь и вывод, и ошибки "исчезают" — даже если файл, который вы хотели удалить, не существует.

И наоборот: можно использовать файл не только для вывода, но и как источник данных для команды через стандартный ввод:

-10

Это можно легко соединять с передачей вывода в новый файл.

-11

Пайпы: как склеить команды в одну цепочку

Пайп — это когда stdout одной команды тут же становится stdin для следующей. Это настоящая суперспособность командной строки: любые задачи реально автоматизировать без лишних телодвижений.

Главный символ — | (вертикальная черта). Например, если набрать ls -R и вывести структуру домашней папки целиком, терминал завалит вас текстом.

Если перенаправить вывод ls в less, листать результат становится удобно и быстро:

Это на порядок удобнее, чем сперва писать вывод в файл, а потом его отдельно открывать.

Ещё больше пользы от пайпов

Лучшие трюки для shell-автоматизации — подпишитесь на рассылку!

Например, чтобы узнать, сколько на компьютере учётных записей, я просто соединяю cat и wc. Cat показывает содержимое /etc/passwd, а wc считает строки — одна строка, один аккаунт:

Много аккаунтов? Легко — чтобы увидеть их имена, добавляю к пайпу awk: задаю двоеточие как разделитель, вывожу только первый столбец — и получаю список логинов.

Нужно отсортировать логины по алфавиту? Просто добавляю в цепочку sort:

Складывай команды как хочешь: цепные каскады рулят!

Мощный пример — сразу четыре команды в цепочке. ps выводит список процессов (с опциями -e всё подряд, -o comm только названия процессов), потом grep ищет нужные — например, все, что связаны с chrome. После этого подаю результат в sort, а uniq -c подсчитывает, сколько раз встретилось каждое имя. То же можно сделать и для Firefox.

Бесконечные сценарии для автоматизации

Команды можно склеивать пайпами сколько угодно — ограничений практически нет. Имейте в виду: каждая команда запускается в своем подсчёте (subshell), и на современных компьютерах это не проблема. Только если вдруг заметите, что терминал стал притормаживать — попробуйте упростить цепочку или пару секунд подождать.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: