Трюки в терминале, которые реально экономят время (и нервы)
Есть особый вид боли — наблюдать, как талантливый инженер зажимает Backspace на шесть секунд, чтобы исправить опечатку в начале строки.
Мы все там были. Выучили ls, cd и grep — и на этом остановились. Терминал стал местом, где мы живём, но обустроить его мы так и не удосужились. Мы миримся с тем, что какие-то действия требуют 40 нажатий, хотя авторы шелла решили нашу проблему ещё в 1989 году.
Вот подборка приёмов, которые не то чтобы секретные — но которым почему-то не учат. Разделим их на две группы: универсальные (работают почти в любом POSIX-шелле) и для Bash/Zsh (интерактивные фишки).
TL;DR: Ctrl+W удаляет слово, Ctrl+U — строку до курсора, Ctrl+R ищет по истории,!!повторяет предыдущую команду (незаменимо дляsudo !!), аcd -возвращает в предыдущую директорию. Начните хотя бы с этих пяти.
Универсальные: работают (почти) везде
Эти приёмы опираются на стандартные привязки клавиш Emacs-стиля через Readline. Даже если вы подключились по SSH к роутеру 2009 года выпуска или минимальному Alpine-контейнеру — они будут работать.
Замена Backspace
- Ctrl+W — удалить слово перед курсором. Набрали
/var/log/nginx/, а нужно было/var/log/apache2/? Одно нажатие вместо 7 Backspace - Ctrl+U — вырезать всё от курсора до начала строки. Набрали длинную команду
rsync, но сначала нужно проверить директорию? Ctrl+U вырезает, а Ctrl+Y вставляет обратно - Ctrl+K — то же самое, но вырезает от курсора до конца строки
- Ctrl+A и Ctrl+E — прыжок в начало и конец строки. Забудьте про Home и End — они далеко от домашнего ряда
- Alt+B и Alt+F — перемещение по словам назад и вперёд. Быстрый аналог стрелок (на Mac нужно настроить Option как Meta в терминале)
Терминал показывает иероглифы?
Случайно сделали cat на бинарник — и терминал превратился в месиво символов? Наберите вслепую reset и нажмите Enter. Терминал восстановится. Альтернатива — stty sane.
Экстренные выходы
- Ctrl+C — отменить текущую команду. Ваш аварийный выход, когда что-то зависло
- Ctrl+D — отправить EOF. Если командная строка пуста — разлогинит из шелла. Осторожнее!
- Ctrl+L — очистить экран, не прерывая набор текущей команды. Удобнее, чем
clear
Прыгаем между директориями
cd - — переключение между двумя последними директориями. Вы в /usr/local/etc/postfix, перешли в /var/log посмотреть логи — cd - вернёт обратно. Как кнопка «последний канал» на пульте.
pushd и popd — если cd - это переключатель, то pushd это стек. pushd /etc перейдёт в /etc, запомнив предыдущую директорию. popd снимет её со стека и вернёт вас.
Мгновенная очистка файла и последний аргумент
> file.txt — очищает файл, сохраняя права и не прерывая процессы. $_ — последний аргумент предыдущей команды:
Страховка для скриптов
- -e — останов при ошибке (нюансы с
ifи пайпами) - -u — ошибка при несуществующей переменной. Спасёт от
rm -rf /usr/local/${OPECHATKA}/* - -o pipefail — ошибка в любом звене пайпа = ошибка всей цепочки
Bash и Zsh: зона комфорта
Поиск по истории и «sudo !!»
Ctrl+R — обратный поиск по истории. Начните вводить часть команды — шелл найдёт её. !! — повторить предыдущую команду. Классика: получили «Permission denied» — sudo !!.
Редактор, brace expansion и процессы
Ctrl+X, Ctrl+E — открывает текущую команду в $EDITOR. fc — то же для предыдущей команды. Esc+. — вставляет последний аргумент прямо на месте курсора. Брейс-экспаншн для быстрых операций:
Спасти процесс от обрыва SSH
Терминал — это набор инструментов, а не полоса препятствий. Возьмите один приём, используйте его неделю — и переходите к следующему.
Источник: Shell Tricks That Actually Make Life Easier — Hofstede Blog