8 безумно полезных shell-функций, которые моментально ускорят работу в Linux! Такой подборки ты ещё не видел!

Linux mascot using a laptop with some multiplexer terminals around it.

Освоились с Linux и командной строкой? Я тоже когда-то был на этом этапе, но настоящим прорывом для меня стали собственные shell-функции. Их можно повторно использовать в скриптах и просто запускать из терминала — как если бы это были встроенные команды или привычные алиасы.

Короткие функции для рутинных задач экономят кучу времени, а собирать свою коллекцию — настоящее удовольствие! Вот мои любимые shell-лайфхаки, которые всегда под рукой.

1 mkd: создаём папку и сразу заходим в неё

Вот пример идеальной shell-функции: просто, понятно и сразу полезно — объясню на ней основные моменты. Обычно она объединяет ряд команд, которые вы всегда выполняете одна за другой.

Вспомните: когда вы последний раз писали mkdir для создания папки и не делали сразу cd? Согласитесь, почти никогда — так почему бы не сделать себе свой вариант mkdir, который сразу всё делает за одну команду? Вот как это выглядит:

Свои функции я храню в отдельном файле и подключаю их при запуске оболочки. Например, держу файл в ~/.config и прописываю . ~/.config/shell_funcs.sh в ~/.zshrc, чтобы они грузились автоматически.

Лайфхак: связка && нужна для того, чтобы cd сработал только если папка успешно создана. Ведь если что-то пошло не так, например не хватает прав, менять директорию бессмысленно.

Флаг -p в mkdir позволяет сразу создать всю цепочку папок, например mkd docs/letters/urgent. Плюс — если папка уже есть, ошибки не будет, и вы просто зайдёте в неё.

Ещё маленькая хитрость — аргумент “—” говорит оболочке, что опции закончились, а дальше идут именно имена каталогов. Это спасёт, если вдруг имя начинается с “-”. Встречается редко, но лучше перестраховаться.

A Linux terminal showing the mkd command creating a new directory and entering into it.

2 prompt: меняем приглашение командной строки за секунду

Многие начинают знакомство с Linux именно с настройки внешнего вида приглашения (prompt) в терминале. В начале каждой строки shell оставляет свою “метку” — подсказку о готовности:

An example Linux prompt showing the name of the current directory.

В этом примере в скобках отображается текущая папка, а затем знак доллара. Но вы сами вольны сделать prompt хоть минималистичным, хоть максимально полезным — всё это задаёт переменная PS1. Её можно сменить вручную (хоть на обычный “$ ”, не забудьте про экранирование!), но есть способ поинтереснее.

Моя функция делает prompt динамическим — она проверяет, работаете вы в bash или zsh. Обе оболочки позволяют вывести только последние три элемента пути, хотя делают это по-разному.

Классная деталь: я добавляю в prompt перенос строки (через переменную) — так между выводом команды и новым приглашением появляется пустая строка. Сразу видно, где заканчивается команда и где начинается ввод — это правда удобно.

В bash и zsh всё настраивается одинаково, в других оболочках (например, fish) может отличаться. Если у вас не bash и не zsh — посмотрите, как делается prompt именно там.

Почему именно функция, а не запись в ~/.bashrc? Иногда удобно быстро менять prompt — например, для скриншотов с “чистым” путем или чтобы не путать терминальные окна. А ещё классно “урезать” prompt в маленьких терминалах.

Three different types of shell prompts, switched via functions.

Это просто спасение, когда нужно быстро различать окна или экономить место на экране.

3 trim: избавляемся от пробелов в начале и конце строк

Вещь, которая кажется мелочью, а на практике спасает уйму нервов: функция удаляет пробелы и табы с краёв каждой строки:

В командной строке всё строится на передаче данных между командами — по конвейеру или из файла. Для этого данные должны быть аккуратными, а не все утилиты оставляют “чистый” вывод. Например, wc:

A wc command showing output with extra space at the beginning of each line.

Здесь для выравнивания столбцов слева добавляются пробелы. Если передавать такие строки дальше, придётся ещё их “вычищать”. trim делает всё за вас — просто пропустите вывод через функцию, и лишние пробелы исчезнут:

A wc command showing output with leading space removed after piping to trim.

Внутри работает sed, который поочерёдно убирает пробелы и табы в начале и конце строк. sed читает данные из потока, поэтому функция отлично дружит с пайпами и выводом других команд.

4 rgrep: ищем текст сразу во всех файлах и папках

Иногда функция — это просто короткая версия длинной и неудобной команды с нужными опциями. Некоторые системы уже знают такую rgrep, но на macOS её нет — и вот тут пригодится свой вариант:

Опция -I заставляет grep игнорировать бинарные файлы (иначе появятся ошибки), -d recurse идёт по всем подпапкам.

Аргумент "$@" автоматически передаёт любые ваши опции дальше — то есть пользоваться rgrep так же удобно, как и grep: rgrep -i todo равен grep -Id recurse -i todo.

Хотите понять, что реально происходит внутри? Включите временно set -o xtrace — оболочка покажет все этапы работы. Классная подсказка, если хотите допилить свой скрипт до идеала.

5 ucase/lcase: меняем регистр — мгновенно и сколько угодно раз

В любом редакторе есть смена регистра, но в командной строке Linux сделать это для файла или целого блока текста — секундное дело.

Обе функции используют tr — утилиту, которая быстро заменяет одни символы на другие по вашему желанию.

tr принимает две “маски”: что искать и на что менять. Например, “tr ‘AB’ ‘ab’” меняет ‘A’ на ‘a’ и ‘B’ на ‘b’. Есть спецсимволы — “[:upper:]” перекроет сразу все заглавные, “[:lower:]” — все строчные. Работает с любой локалью.

6 today: узнаём сегодняшнюю дату в удобном формате

О форматах дат можно спорить бесконечно, но компактная запись по ISO (например, 2024-06-09) — безоговорочный фаворит. Она уникальна тем, что такие даты сортируются правильно в любом списке — идеальный вариант для имён файлов, записей в документах, базах и вообще везде.

Функция сокращает длинную команду date до одной команды. Не нужно вспоминать коды и проценты — просто набрал today, и получил дату!

7 filesize: быстро находим самые тяжёлые файлы в папке

Мне часто нужно понять, что больше всего “съедает” место на диске. Графические анализаторы бывают громоздкими, а вот узнать, какие крупные файлы лежат прямо в текущей папке — дело пары секунд.

Всё просто: du показывает, сколько места занимают все файлы и папки, а функция отсортирует их и покажет самых “тяжёлых” сверху. Хватит терять время на ручной поиск!

8 paths: делаем PATH наглядным — лишнего не спрячешь!

Очистка переменной PATH — обязательная часть “гигиены” системы. Как только ставите новые программы, macOS или ваша ОС может запихнуть в PATH кучу несуществующих директорий. Но пока PATH — это длинная строка, разделённая двоеточиями, разобрать её глазами непросто:

The value of a PATH variable showing one long line containing many paths separated by colons.

Эта функция разбивает весь PATH на отдельные строчки — становится видно каждую папку:

The paths command showing the contents of a PATH variable with one path per line.

Это отличный способ быстро просмотреть содержимое PATH, а если захотите — функция легко дополняется: можно, например, тут же проверить, существуют ли все каталоги.

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

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

Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

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

Алекс Бежбакин
Оцените автора
Добавить комментарий