Использование истории команд в Bash и Zsh

Что такое история оболочки
История оболочки — это последовательность команд, которые вы вводили в терминале. Bash по умолчанию записывает её в файл ~/.bash_history. Zsh хранит историю в ~/.zsh_history (или в файле, заданном переменной HISTFILE).
Историю удобно использовать, когда нужно повторить или слегка изменить ранее выполненную команду, не вводя её заново. Кроме того, история помогает восстановить длинные или сложные цепочки команд и ускоряет работу.
Важно: файл истории — это текстовый файл. Не храните в истории секреты (пароли, токены). При необходимости отключайте запись для отдельных команд (см. раздел «Конфиденциальность»).
Где и как настраивать файл истории
Bash:
HISTFILE— путь к файлу истории (по умолчанию~/.bash_history).HISTSIZE— сколько команд хранится в памяти текущей сессии.HISTFILESIZE— максимальное число команд в файле истории.HISTCONTROL— поведение дубликатов/пробельных строк (например,ignoredupsилиignorespace).
Пример настройки в ~/.bashrc:
# сохранять 5000 команд в памяти и в файле
export HISTSIZE=5000
export HISTFILESIZE=5000
export HISTFILE=~/.bash_history
# не сохранять дубликаты и строки, начинающиеся с пробела
export HISTCONTROL=ignoredups:ignorespace
# дописывать историю, не перезаписывать её при выходе
shopt -s histappend
# сразу дописывать и читать новые строки истории между сессиями
PROMPT_COMMAND='history -a; history -n'Zsh:
HISTFILE— путь (обычно~/.zsh_history).HISTSIZE— число команд в памяти.SAVEHIST— число команд для сохранения в файл.- Полезные опции:
INC_APPEND_HISTORY,SHARE_HISTORY,HIST_EXPIRE_DUPS_FIRST.
Пример ~/.zshrc:
HISTFILE=~/.zsh_history
HISTSIZE=5000
SAVEHIST=5000
setopt INC_APPEND_HISTORY # дописывать историю по мере ввода
setopt SHARE_HISTORY # синхронизировать историю между сессиями
setopt HIST_IGNORE_DUPS # игнорировать дубликатыПримечание: в Zsh SAVEHIST отвечает за число записей, которые сохраняются в HISTFILE.
Быстрые приёмы: повторение и замена
!!— повторяет предыдущую команду.!-2— повторяет предпредыдущую команду.!string— повторяет ближайшую предыдущую команду, начинавшуюся сstring.^old^new— заменяетoldнаnewв предыдущей команде и выполняет её (работает в Bash).
Пример: если вы ввели ls / и хотите посмотреть /bin, можно выполнить:
^/^/binЭто эквивалентно ls /bin.
Важно: расширения истории выполняются сразу. Перед выполнением убедитесь, что команда безопасна.
Командное редактирование и поиск
Bash и Zsh поддерживают редактирование командной строки и поиск по истории.
Основные сочетания клавиш (Emacs-подобные):
- Стрелки вверх/вниз — перемещение по списку команд.
Ctrl+P/Ctrl+N— предыдущая/следующая команда.Ctrl+R— обратный инкрементальный поиск по истории (reverse-i-search). Начните ввод — оболочка покажет совпадение.Ctrl+S— прямой инкрементальный поиск (может требовать отключения потокаXON/XOFF).Ctrl+A— перейти в начало строки.Ctrl+E— перейти в конец строки.Alt+F/Alt+B— перемещаться по словам.Ctrl+K— удалить до конца строки.
Режимы редактирования:
set -o emacs— стандартный режим (по умолчанию в большинстве систем).set -o vi— включить vi-режим:Escдля перехода в навигационный режим,iдля вставки.
Vi-режим полезен, если вы часто используете команды движения в Vim. Emacs-режим проще для быстрых правок.
Синхронизация истории между несколькими сессиями
Проблема: если вы открыли несколько терминалов, изменения истории в одном не всегда мгновенно видны в другом. Решения:
Bash:
- Включите
shopt -s histappend, чтобы сессии дописывали историю в файл вместо перезаписи. - Добавьте в
PROMPT_COMMANDвызовhistory -a; history -n:history -a— дописать новую историю в файл.history -n— считать новые строки, добавленные другими сессиями.
Zsh:
- Используйте
setopt INC_APPEND_HISTORYиsetopt SHARE_HISTORY.INC_APPEND_HISTORYдописывает строки в файл по мере ввода,SHARE_HISTORYсинхронизирует историю между сессиями.
Эта конфигурация обеспечивает почти реальное время обмена командами между окнами терминала.
Конфиденциальность и фильтрация
- Не вводите пароли в командной строке — они сохранятся в истории.
- Чтобы команда не попала в историю, начните её с пробела (при активном
HISTCONTROL=ignorespaceв Bash). - Можно временно отключить запись:
set +o history(отключить),set -o history(включить).
Важно: системные политики и оболочки могут отличаться. На многопользовательских системах администратор может контролировать хранение истории.
Шпаргалка: ключевые команды и настройки
Cheat sheet (быстрое напоминание):
- Показать историю:
historyилиfc -l. - Выполнить
n-ю команду из истории:!123. - Очистить историю в текущей сессии:
history -c(Bash) и затем> ~/.bash_historyчтобы очистить файл. - Экспортировать/импортировать историю: скопируйте файл
~/.bash_history/~/.zsh_history.
Примеры конфигураций смотрите в разделе «Где и как настраивать файл истории».
Мастер-план: как настроить историю шаг за шагом (мини-SOP)
- В
~/.bashrcили~/.zshrcзадайтеHISTFILE,HISTSIZE,HISTFILESIZE/SAVEHIST. - В Bash включите
shopt -s histappend. - Добавьте
PROMPT_COMMAND='history -a; history -n'в Bash. - В Zsh включите
setopt INC_APPEND_HISTORY SHARE_HISTORY. - Перезапустите оболочку:
exec $SHELL. - Проверьте: откройте два терминала, введите команду в одном, выполните
history | tailво втором — новая команда должна появиться.
Критерии приёмки:
- История дописывается, а не перезаписывается при выходе.
- Команды, введённые в одном окне, видны в другом в течение нескольких секунд.
- Дубликаты фильтруются по заданным настройкам.
Ролевые чек-листы
Для разработчика:
- Включить
HISTSIZE≥ 5000. - Включить
histappend/INC_APPEND_HISTORY. - Отключать запись для чувствительных команд через ведущий пробел.
Для системного администратора:
- Настроить централизованную политику (если нужно).
- Настроить ротацию/архивацию файлов истории при GDPR/логировании.
- Инструктировать пользователей по безопасности.
Для новичка:
- Учиться пользоваться
Ctrl+R. - Использовать стрелки вверх/вниз и
Ctrl+A/Ctrl+E. - Не вводить пароли в командной строке.
Краткий словарь
- История (history) — файл или память с ранее введёнными командами.
- HISTFILE — переменная окружения с путём к файлу истории.
- HISTSIZE / SAVEHIST — число команд в памяти/в файле.
- histappend / INC_APPEND_HISTORY — дописывание истории вместо перезаписи.
- reverse-i-search — инкрементальный обратный поиск (
Ctrl+R).
Когда механизм истории может не сработать
- Если команду ввели в другом аккаунте/контейнере, она не появится.
- Если вы закрыли сессию принудительно (SIGKILL), запись может не успеть дописаться.
- Некоторые оболочки/терминалы могут перехватывать сочетания клавиш.
Итог
История команд — простой и мощный инструмент для экономии времени в терминале. Настройте файл истории, включите дописывающий режим и синхронизацию между сессиями — и вы будете быстрее находить и править команды. Попробуйте Ctrl+R и несколько расширений истории сегодня, чтобы ускорить повседневные операции.
Важно: всегда думайте о безопасности — избегайте ввода конфиденциальных данных в командной строке и управляйте доступом к файлам истории.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone