Что еще есть в терминале Linux: 7 команд, которые экономят кучу времени
Очередная подборка «ТОП лучших команд Linux для новичков»? Нет, спасибо. Если уже используете grep и awk, умеете в циклы и не боитесь регулярных выражений — эта статья для вас.
1К открытий6К показов
Сколько статей про «полезные команды Linux» вы уже прочитали? Алиасы, history, базовые горячие клавиши — факты для джунов, которые опытным админам уже снятся. Если свободно пользуетесь grep и awk, создаете циклы, применяете регулярные выражения — эта статья для вас.
Рассказываем про 7 команд, влияющие на скорость работы в терминале. Вы узнаете:
- про встроенные bash-операции, которые заменяют пайплайны,
- про способы работы с файловыми дескрипторами,
- про wildcards, которые избавляют от сложных конструкций с find.
Каждая команда в подборке решает конкретную проблему:
- массовая обработка файлов,
- отладка скриптов,
- работа с длинными путями.
1. Bash variable expansions
Вместо basename, cut для простых операций со строками можно использовать встроенные возможности Bash:
% режет справа до первого совпадения, %% — до последнего. Символ # работает слева направо.
В реальной работе это помогает при массовой обработке файлов. Например, есть 1000 логов, и нужно каждый переименовать.
Если использовать basename, запустится 1000 отдельных процессов. Variable expansions работают без fork/exec, без задержек на создание процессов.
Bash variable expansions используют в циклах с файлами и при работе с массивами. Когда скрипт обрабатывает сотни файлов, разница в скорости становится заметной. Еще и код выглядит чище.
2. Here-string (<<<)
Here-string упрощает передачу строковых данных в команды без создания временных файлов или использования echo с пайпом.
Реальная экономия времени проявляется при отладке и модификации скриптов. Например, когда SQL-запрос или конфигурация зашиты в here-документ. С here-string данные собраны в одном месте, легко редактируются и переиспользуются.
Работает не только с базами данных. Отправка в API, конфигурирование сетевых устройств через expect, передача команд в Docker — через <<< код будет понятнее, а сопровождение проще.
3. /proc/$$/fd
Каждый процесс имеет стандартные дескрипторы 0 (stdin), 1 (stdout), 2 (stderr), которые представлены как символические ссылки. Директория /proc/$$/fd предоставляет доступ к файловым дескрипторам текущего процесса:
Переменная $$ содержит PID текущего процесса, поэтому /proc/$$/fd ведет к дескрипторам именно вашего шелла.
Практическое применение — отладка перенаправлений и работа с дескрипторами в сложных скриптах:
4. Wildcards с диапазонами
Про * и ? говорят чаще, чем про диапазоны в квадратных скобках. Такие маски используют реже, а зря — они решают массу задач по отбору файлов.
Wildcards автоматически раскрываются шеллом в список подходящих файлов — это их основная функция. Кавычки нужны только когда передаете символы [, ] как литеральные:
Экономия времени заметна при работе с логами, бэкапами и в скриптах автоматизации. Например, для архивации файлов с определенными номерами, очистки временных файлов с нужными паттернами.
5. sudo !!
Набрали длинную команду, нажали Enter, получили «Permission denied». Рука на рефлексе тянется к стрелке вверх и Home, чтобы добавить sudo в начало.
Вот способ в разы быстрее:
Двойное восклицание !! — это ссылка на предыдущую команду целиком. Bash подставит всю строку со всеми аргументами и ключами. Кажется мелочью, но для админа, который 10 раз в день забывает sudo, это серьезная оптимизация.
Двойное восклицание универсально и работает не только с sudo:
- time !! для замера времени выполнения,
- nohup !! & для запуска в фоне,
- strace !! для отладки.
Если между командой и sudo !! выполнялись другие команды, восклицание сработает для последней из них. Для поиска конкретной команды в истории используйте !строка.
6. ^старое^новое
Основной способ исправления опечатки — стрелка вверх, поиск ошибки, исправление. Смотрите, как можно сделать это побыстрее:
Символ ^ ищет первое вхождение слова и заменяет его. Работает с последней командой.
Заменяется только первое вхождение. Если ошибочное слово встречается несколько раз, способ не сработает. В таких случаях придется использовать классическое редактирование или history expansion.
7. Alt+.
Создали файл с длинным именем — теперь его нужно отредактировать, переместить, изменить права. Каждый раз перепечатывать путь утомительно и чревато ошибками.
Комбинация Alt+. (Alt + точка) вставляет последний аргумент предыдущей команды в текущую позицию курсора. Повторное нажатие перебирает аргументы из более ранних команд.
Экономия времени проявляется при работе с файлами и директориями. Например: распаковали архив, теперь нужно зайти в созданную папку, затем посмотреть содержимое, потом изменить права. Вместо того, чтобы 3 раза печатать один путь, можно 3 раза нажать Alt+.
Еще этой комбинацией вставляются:
- имена пользователей,
- IP-адреса,
- названия сервисов,
- параметры конфигурации.
Alt + точка работает в большинстве шеллов. Привыкнув к ней, начинаешь использовать на автомате.
Что запомнить
- ${filename%.*} и встроенные операции со строками работают быстрее внешних утилит. % режет справа, # — слева. Полезно при работе с циклами для массовой обработки файлов.
- <<< — here-string удобен для передачи коротких строковых данных в команды. С многострочными данными лучше использовать here-document или переменные.
- /proc/$$/fd — доступ к файловым дескрипторам текущего процесса. Ускоряет отладку перенаправлений и работу с дескрипторами.
- file[1-5] и [^b]* — диапазоны в wildcards для точного отбора файлов. Кавычки нужны только для передачи литеральных символов.
- sudo !! — повторяет последнюю команду с sudo. Также работает с time !!, nohup !! &. Если между нужной командой и !! выполнялись другие операции, используйте !строка для поиска конкретной команды в истории.
- ^старое^новое — заменяет первое вхождение в предыдущей команде. Работает только с последней командой и заменяет первое совпадение.
- Alt+. — вставляет последний аргумент предыдущей команды. Повторное нажатие перебирает аргументы из истории команд. Экономит время при работе с длинными путями.
1К открытий6К показов











