Работа с историей команд Bash: горячие клавиши, расширение и очистка
Быстрые ссылки
- Keyboard Shortcuts
- View Your Bash History
- Run Commands From Your History
- Reuse Arguments From Your History
- Rerun the Previous Command and Modify It
- Where Your History Is Stored, and How to Clear It
- How to Ignore Spaces and Duplicates
Bash — стандартная оболочка в большинстве дистрибутивов Linux, доступная в macOS и устанавливаемая в Windows 10/11. Она запоминает введённые команды и сохраняет их в файле истории. Вы, возможно, знаете базовые приёмы работы с историей, но у неё гораздо больше полезных возможностей.
Короткие определения
- История команд: список команд, которые вы вводили в интерактивной сессии bash; хранится в файле (обычно ~/.bash_history).
- Расширение истории: синтаксис с восклицательным знаком (!), который подставляет или выполняет команды из истории.
- Переменные: HISTSIZE, HISTFILE, HISTCONTROL — управляют размером, местом и фильтрацией истории.
Горячие клавиши
Чтобы прокручивать историю в интерактивной сессии, используйте сочетания клавиш bash. При нажатии в командной строке появятся ранее введённые команды.
- Up Arrow или Ctrl+P: перейти к предыдущей команде.
- Down Arrow или Ctrl+N: перейти к следующей.
- Alt+R: отменить изменения, внесённые в команду из истории на текущей строке.
Bash поддерживает режим поиска по истории.
- Ctrl+R: интерактивный поиск обратно по истории; начните ввод — bash найдёт соответствие.
- Ctrl+O: выполнить найденную команду из режима поиска.
- Ctrl+G: выйти из режима поиска истории без выполнения.
Просмотр истории
Чтобы вывести всю историю на экран, выполните:
historyВы увидите пронумерованный список команд. Номер слева показывает позицию команды в истории (1 — самая старая, максимальный номер — самая новая).

Вы можете фильтровать вывод через grep:
history | grep ваш_запросИли посмотреть только последние строки через tail:
history | tail -5
Выполнение команд из истории
Bash умеет быстро подставлять или выполнять предыдущие команды с помощью механизма history expansion (расширение истории), использующего восклицательный знак — «bang».
- По номеру:
!#
Например, чтобы выполнить двенадцатую команду из списка history:
!12- Повтор последней команды:
!!!! эквивалентно !-1. Команда !-2 выполнит предпоследнюю команду.

Расширения работают в любой части строки. Можно добавить префиксы, суффиксы или передать результат в другую команду. Например, если забыли sudo, выполните:
sudo !!Или перенаправьте вывод предыдущей команды в grep:
!! | grep текст
Чтобы выполнить последнюю команду, начинающуюся с указанного текста, используйте !text. Например, если вы недавно запускали ping, можно выполнить:
!piЧтобы распечатать команду, не выполняя её, добавьте :p:
!12:p
!!:p
!text:p
Повторное использование аргументов из истории
Иногда удобно подставить аргументы из предыдущих команд в новую команду.
- Последний аргумент предыдущей команды:
!$
Пример: вы выполнили
touch /home/chris/some_long_file_name_you_dont_want_to_type_againЗатем хотите открыть файл в nano:
nano !$Bash подставит последний аргумент.
- Первый аргумент предыдущей команды:
!^
Если вы выполнили ping google.com -c 4 и сделали ping !^, bash подставит google.com.
- Все аргументы предыдущей команды:
!*
Если вы выполнили ping google.com -c 4 и сделали ping !*, bash подставит google.com -c 4.
Вы также можете комбинировать поиск по началу команды и индекса аргумента:
command !abc:2
command !abc:*Пример: если в истории есть sudo hostname ubuntu, то echo !su:2 подставит ubuntu.

Повтор с изменением
Быстро исправить опечатку в предыдущей команде можно так:
^abc^xyzНапример, если вы ввели ping gogle.com, выполните:
^gog^googи bash запустит ping google.com.

Где хранится история и как её очистить
По умолчанию bash хранит историю команд в файле ~/.bash_history (например, /home/bob/.bash_history). История сохраняется между сессиями, поэтому команды останутся доступными после выхода и повторного входа.
Чтобы очистить историю текущей сессии:
history -cПеременная HISTSIZE определяет, сколько записей shell будет хранить в памяти для текущей сессии. Обычно значение по умолчанию — 500 или 1000 записей. Посмотреть текущее значение:
echo $HISTSIZEЧтобы временно установить размер истории в ноль:
HISTSIZE=0После установки HISTSIZE=0 в текущей сессии bash не будет сохранять новые записи истории.
Как игнорировать команды, начинающиеся с пробела, и дубликаты
Чтобы не сохранять команды, которые начинаются с пробела, включите опцию ignorespace:
HISTCONTROL=ignorespaceЕсли перед командой поставить пробел, она выполнится, но не попадёт в историю (при включённой опции).
Чтобы игнорировать повторяющиеся записи, включите ignoredups:
HISTCONTROL=ignoredupsМожно комбинировать обе опции:
HISTCONTROL=ignorebothПомните, что переменные, заданные таким образом в терминале, действуют только в текущей сессии. Чтобы сохранить настройки, добавьте их в файл ~/.bashrc.

Полезные настройки и сниппеты для .bashrc
Добавьте эти строки в ~/.bashrc, чтобы улучшить поведение истории во всех сессиях. Пояснения — рядом.
# Файл истории (по умолчанию ~/.bash_history)
HISTFILE=~/.bash_history
# Сколько записей хранить в памяти (используется для текущей сессии)
HISTSIZE=2000
# Сколько записей хранить в файле истории на диске
HISTFILESIZE=5000
# Не сохранять команды, начинающиеся с пробела, и дубликаты
HISTCONTROL=ignoreboth
# Добавлять записи истории в файл (не перезаписывать при выходе)
shopt -s histappend
# Сохранять записанную историю после каждой команды
PROMPT_COMMAND='history -a; history -n'Пояснения:
- histappend: добавляет новые записи к файлу истории, вместо перезаписи при выходе.
- PROMPT_COMMAND с history -a и history -n гарантирует, что история из других открытых терминалов будет подхватываться, а ваши команды сохраняются немедленно.
Что делать, если история не содержит нужной команды
- Команда выполнялась в другой оболочке или на другом хосте — проверьте правильный файл истории.
- История могла быть очищена или переменная HISTSIZE была мала.
- Выполнялось скриптом или через non-interactive shell — такие команды обычно не попадают в интерактивную историю.
Когда расширение истории может навредить
- Выполнение
!textможет нечаянно выполнить нежелательную команду, если вы ошиблись в тексте. Всегда используйте:pдля проверки перед выполнением. - Автоматическое выполнение из истории с правами root (например,
sudo !!) может привести к опасным действиям, если забыли проверить аргументы. - История может хранить секреты (пароли, токены), если вы вводили их напрямую в командной строке.
Безопасность и конфиденциальность
- Никогда не вводите пароли или секреты в виде аргументов команд. Используйте менеджеры секретов или вводите через защищённые запросы.
- При необходимости удаления чувствительной строки выполните
history -d N(где N — номер записи) и затемhistory -wчтобы записать изменения в файл.
Пример удаления записи с номером 123:
history -d 123
history -wЕсли нужно полностью стереть историю и файл:
history -c
> ~/.bash_historyОбратите внимание: если у вас настроено отправление истории в централизованное хранилище или логирование, очистка локального файла может не удалить запись из удалённого лога.
Альтернативные инструменты и расширения
Если работа с историей bash кажется ограниченной, рассмотрите альтернативы или дополнения:
- zsh + oh-my-zsh: улучшенная история и расширенные плагины.
- fzf: интерактивный fuzzy-поиск по истории; часто интегрируется с Ctrl+R.
- hstr (hh): удобный интерфейс для просмотра и выбора из истории.
- ripgrep (rg) и ag: быстрый поиск по файлам истории.
Каждый инструмент даёт свои преимущества. Например, fzf обеспечивает быстрый интерпретируемый поиск и визуальную навигацию по истории.
Мини-методология: как настроить удобную историю за 5 шагов
- Откройте ~/.bashrc в редакторе.
- Установите HISTSIZE и HISTFILESIZE на разумные значения (например, 2000 и 5000).
- Включите shopt -s histappend.
- Установите PROMPT_COMMAND=’history -a; history -n’ для немедленного сохранения и подхвата истории.
- Добавьте HISTCONTROL=ignoreboth для чистоты истории.
Проверка: откройте два терминала, выполните команды в первом, убедитесь, что они видны во втором.
Ролевые чек-листы
Для разработчика:
- Настроить HISTSIZE >= 2000.
- Включить histappend и PROMPT_COMMAND.
- Не хранить секреты в командах.
- Использовать fzf для быстрого поиска.
Для SRE/администратора:
- Настроить централизованную политику логирования истории, если требуется аудит.
- Обучать команду избегать ввода секретов в командной строке.
- Настроить ротацию и защиту файлов истории.
Для новичка:
- Учите Ctrl+R и ↑/↓ для ускорения работы.
- Используйте
:pчтобы не выполнять незнакомые команды. - Читайте вывод
historyи очищайте старые записи при необходимости.
Инцидент: быстро очистить историю и предотвратить утечку
- Немедленно выполните
history -cв интерактивной сессии. - Выполните
> ~/.bash_historyчтобы очистить файл истории. - Если история реплицируется или централизованно собирается — запросите удаление у владельца логов.
- Измените скомпрометированные учётные данные и пересмотрите практики ввода секретов.
Критерии приёмки
- Все интерактивные терминальные сессии сохраняют историю (HISTSIZE > 0).
- PROMPT_COMMAND настроен для немедленного сохранения истории между сессиями.
- Дубликаты и команты, начинающиеся с пробела, фильтруются, если это требуется в политике.
- Члены команды проинструктированы об опасностях ввода секретов в командной строке.
Полезные приёмы и эвристики
- Всегда проверяйте команду через
:p, если используете!textи не уверены. - Используйте
history | grepили fzf для поиска по фрагментам команд. - Для одноразовых команд ставьте пробел перед вводом, если включён ignorespace.
- Настройте PROMPT_COMMAND для коллективной работы в нескольких терминалах.
Когда история не поможет
- Если команда запускалась автоматизированно (cron, systemd unit), её не будет в интерактивной истории.
- Скрипты, запущенные non-interactively, не всегда пишут в ~/.bash_history.
- Если вы использовали
HISTSIZE=0или вручную удалили файл, ждать старых записей не стоит.
Факт-бокс: ключевые параметры
- Файл истории: ~/.bash_history
- Переменная: HISTSIZE — записи в памяти (обычно 500 или 1000 по умолчанию)
- Переменная: HISTFILESIZE — максимальный размер файла истории
- Опция: HISTCONTROL=ignoreboth — игнорирует пробелы и дубликаты
- Опция: shopt -s histappend — добавляет запись в файл, не перезаписывая его
Сравнение быстрых команд (шпаргалка)
- history — показать историю
- !N — выполнить N-ю команду из history
- !! — повторить последнюю команду
- !text — выполнить последнюю команду, начинавшуюся с text
- !$ — последний аргумент предыдущей команды
- !^ — первый аргумент предыдущей команды
- !* — все аргументы предыдущей команды
- ^old^new — заменить и выполнить предыдущую команду
- history -c — очистить историю текущей сессии
Таблица часто используемых утилит Linux
| | Linux Commands | | Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr | | | Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | | | Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld | |
RELATED: Best Linux Laptops for Developers and Enthusiasts
Итог: история bash — мощный инструмент для ускорения работы в терминале. Настройте переменные, используйте безопасные практики и расширения вроде fzf, чтобы сделать работу с историей надежной и удобной.
Похожие материалы
Firefox как браузер по умолчанию на Mac
Обновление Windows 10 до Windows 11 — руководство
Конвертация изображений в Go
JUnit Assertions: руководство и cheat‑sheet
Spotify Web Player — слушать в браузере