Linux Lifehack

Поиск по истории команд bash: Ctrl+R и не только

Перестаньте набирать длинные команды заново. Обратный поиск, повтор с изменением и настройка истории, которая не теряется.

Проверено: Bash 5.x, Ubuntu 24.04, Debian 12
Поиск по истории команд bash: Ctrl+R и не только

Средняя команда в администрировании — 40–80 символов. Набирать её второй раз незачем: bash помнит последние тысячи команд, нужно только уметь их доставать.

Обратный поиск

Нажмите Ctrl+R и начните вводить любую часть команды — bash покажет последнее совпадение:

(reverse-i-search)`systemctl': systemctl restart nginx

Повторные нажатия Ctrl+R листают более старые совпадения. Дальше:

  • Enter — выполнить найденное
  • или Esc — вставить в строку для правки
  • Ctrl+G — отменить поиск

Повтор последней команды

!!

Самое частое применение — забыли sudo:

sudo !!

Последний аргумент предыдущей команды — !$:

mkdir -p /opt/app/config
cd !$

Замена в последней команде

Опечатались или нужно поменять одно слово:

systemctl status nginx
^status^restart

Выполнится systemctl restart nginx.

Настройка истории

По умолчанию история короткая и теряется при параллельных сессиях. Добавьте в ~/.bashrc:

HISTSIZE=50000
HISTFILESIZE=100000
HISTCONTROL=ignoreboth:erasedups
HISTTIMEFORMAT="%F %T  "
shopt -s histappend
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Что это даёт:

  • ignoreboth — не сохранять дубликаты и команды, начинающиеся с пробела
  • HISTTIMEFORMAT — метки времени, видно когда что запускалось
  • histappend + history -a — история из разных сессий не затирает друг друга

Применить без перезахода:

source ~/.bashrc

Совет. Команда с паролем или токеном не должна попадать в историю. Начните её с пробела — при HISTCONTROL=ignorespace или ignoreboth она не сохранится.

Итог

Ctrl+R покрывает 90% случаев. Настройка истории в .bashrc делается один раз и окупается сразу.