Гид по технологиям

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

5 min read Linux Обновлено 22 Dec 2025
История команд в Bash и Zsh — быстрый справочник
История команд в 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 (команда history)

Обратный поиск в истории (Ctrl+R) в Bash

Синхронизация истории между несколькими сессиями

Проблема: если вы открыли несколько терминалов, изменения истории в одном не всегда мгновенно видны в другом. Решения:

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)

  1. В ~/.bashrc или ~/.zshrc задайте HISTFILE, HISTSIZE, HISTFILESIZE/SAVEHIST.
  2. В Bash включите shopt -s histappend.
  3. Добавьте PROMPT_COMMAND='history -a; history -n' в Bash.
  4. В Zsh включите setopt INC_APPEND_HISTORY SHARE_HISTORY.
  5. Перезапустите оболочку: exec $SHELL.
  6. Проверьте: откройте два терминала, введите команду в одном, выполните 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 и несколько расширений истории сегодня, чтобы ускорить повседневные операции.

Важно: всегда думайте о безопасности — избегайте ввода конфиденциальных данных в командной строке и управляйте доступом к файлам истории.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство