21 команда Linux, которые кажутся читерством
Это перевод оригинальной статьи 21 Linux Commands That Feel Like Cheating.
Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.
Настоящие встроенные команды и стандартные инструменты GNU — без алиасов, без скриптов. После 10 лет на Linux я жалею, что не изучил это раньше.
Годами я работал медленно. Перепечатывал пути. Открывал временные файлы. запускал одни и те же циклы вручную. Потом товарищ по команде показал мне несколько приемов командной оболочки, которые казались мне несправедливыми. Я потянул за нить и нашёл больше.
Вот двадцать один пункт, который действительно изменил мой день. Это либо функции оболочки, либо инструменты, доступные в обычной Linux-системе. Никаких алиасов. Никаких пользовательских скриптов. Там, где BSD или macOS ведут себя по-разному, я отмечаю это по ходу.
Мышление чит-кода
Скорость появляется благодаря устранению трения: вспоминайте последнее действие, расширяйте шаблоны и комбинируйте маленькие инструменты, не отходя от клавиатуры. Освойте это один раз — и оно начнёт складываться во всём, что вы делаете.
1. sudo !! — Выполнить предыдущую команду с помощью sudo
Вы забыли sudo. Не вводите команду заново.
apt-get update sudo !!
Внимание: он точно повторяет вашу последнюю команду. Убедитесь, что последняя строка — это то, что вам нужно.
2. !$ И Alt+. — Повторное использование последнего аргумента.
Прекратите копировать и вставлять пути.
mkdir -p /data/logs/app cd !$ # Alt+. inserts the last argument too
3. Расширение скобок {} — создание или изменение множества объектов одновременно
mkdir -p /var/www/{cache,static,uploads}
touch report-{Jan..Mar}.csvОдно действие, несколько результатов.
4. Подстановка процессов <( ) — сравнение потоков без временных файлов
diff <(sort a.txt) <(sort b.txt)sort a.txt) <(sort b.txt)
Обращайтесь с потоковым выводом как с файлами.
5. Группировка { …; } — аккуратное перенаправление целого блока
{ echo "starting job"; date; run_job; } >run.log 2>&1echo "starting job"; date; run_job; } >run.log 2>&1Одно перенаправление охватывает все.
6. find -exec … {} + — Эффективная пакетная обработка аргументов
find logs -type f -name '*.gz' -exec zcat {} + | grep ERRORtype f -name '*.gz' -exec zcat {} + | grep ERROR+ упаковывает пути в минимальное число вызовов.
7. find … -print0 | xargs -0 -P — Безопасный параллелизм
find images -type f -name '*.jpg' -print0 \ | xargs -0 -n1 -P8 jpegoptim
Пути, разделённые нулевым байтом, не ломаются из-за пробелов.
-P8 использует восемь рабочих процессов.
8. tee — Просмотр и сохранение выводов одновременно
make | tee build.logtee build.log
Никогда больше не повторяйте долгую команду, потому что забыли сохранить лог.
9. Рекурсивный grep с include/exclude — точный поиск
grep -R --line-number --include='*.py' --exclude-dir='{.git,venv}' 'TODO' .'*.py' --exclude-dir='{.git,venv}' 'TODO' .Находит только те «иголки», которые вам нужны.
10. Частотность в одну строку — подсчитать и упорядочить что угодно
cut -d',' -f3 purchases.csv | sort | uniq -c | sort -nr | head
11. Расширение параметров — удаление, замена и извлечение без внешних инструментов
Они встроены в bash и поразительно быстрые.
p="/var/log/nginx/access.log"
echo "${p%/*}" # /var/log/nginx (remove shortest suffix "/*")
echo "${p##*/}" # access.log (remove longest prefix "*/")
name="DEBUG=1"
echo "${name/1/0}" # DEBUG=0 (single substitution)12. Читаемые столбцы — cut, tr,column
cut -d',' -f1,4 users.csv | tr ',' '\t' | column -t
Преобразует запутанный CSV-файл в читаемую таблицу.
13. pushd/ popd/ dirs— Настоящая стековая навигация по каталогам
pushd /var/www pushd /etc/nginx dirs popd
Перемещайтесь между местами, не теряя контекста.
14. cd - — Мгновенное переключение между двумя каталогами
cd /srv/app && cd -
15. sed -i — Безопасное редактирование на месте (учтите вашу версию)
# GNU sed sed -i 's/DEBUG=1/DEBUG=0/' .env # [BSD] macOS/BSD sed requires an argument after -i (empty string is common) sed -i '' 's/DEBUG=1/DEBUG=0/' .env
16. awk Как калькулятор и инструмент для извлечения данных
awk -F, '{sum+=$2} END{printf "Total,%.2f\n",sum}' purchases.csvКогда электронная таблица нарушает ход вашей работы.
17. Сила истории — history | grep с !n для повторного вызова
history | grep docker !248 # re-run entry 248
Перестаньте заново вводить длинные заклинания.
18. mapfile (bash) — Правильное чтение строк в массив
mapfile -t files < <(find src -name '*.java')
printf '%s\n' "${files[@]}" | wc -lЧисто, безопасно, без хрупких циклов.
19. watch -n 0.5 -d '…' — Наблюдайте изменения в реальном времени
watch -n 0.5 -d 'df -h | grep /data'
-d подчеркивает различия между итерациями.
20. tail -F — отслеживание логов через ротации
tail -F /var/log/nginx/access.log
Отслеживает имя, а не только дескриптор файла.
21. less как профессионал — следить, приостанавливать, искать, возобновлять
less +F app.log # follow live # Ctrl-C to pause, /ERROR to search, Shift+F to resume
Контроль less с ощущением tail -f.
Один нечестный конвейер, который окупается сам
Вот как я анализирую логи за прошедший день и выявляю самые шумные модули. Он обходится без временных файлов, переживает пробелы и сохраняет сводку для последующего анализа.
find /var/log/myapp -type f -mtime -1 -name '*.log' -print0 \
| xargs -0 -n1 -P4 cat \
| grep -E 'WARN|ERROR' \
| sed -E 's/:[0-9]{2}\.[0-9]{3}//' \
| awk -F'[][]' '{print (NF>2 ? $2 : "unknown")}' \
| sort | uniq -c | sort -nr | head \
| tee /tmp/log-hotspots.txtПочему это кажется несправедливым: вы собираете, фильтруете, нормализуете, атрибутируете и ранжируете данные в одном потоке. Каждый этап нагляден, взаимозаменяем и легко поддаётся анализу.
Что изменится в первый рабочий день после этого?
Вы перестанете открывать редакторы для задач, которые оболочка выполняет мгновенно. Вы начнёте перемещаться по намерению, а не по памяти. Вы будете сохранять вывод по умолчанию, так что никогда не потеряете то, что только что увидели. Вы будете искать точно, а не заливать экран шумом. И прежде всего — вы будете держать руки на клавиатуре, а задачи в уме.
Если вы наставник для младших сотрудников, научите их трём из них и увидите, как их уверенность резко возрастёт. Если вы руководитель команды, стандартизируйте несколько схем, чтобы вся ваша команда работала быстрее без дополнительного инструмента.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.