Linux

Команда history в Linux: полное руководство по управлению историей

Это руководство подробно разбирает команду history в Linux. Вы научитесь искать, редактировать и очищать историю команд, настраивать её размер и формат, что значительно ускорит вашу работу в терминале.

Обновлено 15 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS 8+Fedora 36+Bash 4.0+Zsh 5.0+

Введение / Зачем это нужно

Команда history — один из самых мощных инструментов для повышения продуктивности в командной строке Linux. Она записывает все введённые вами команды, позволяя:

  • Быстро находить и повторять ранее использованные сложные команды без перепечатывания.
  • Анализировать свои действия, например, для документирования рутинных операций.
  • Управлять сессиями, очищая ненужные или конфиденциальные записи.

Это руководство превратит вашу историю команд из простого лога в удобный инструмент поиска и автоматизации.

Требования / Подготовка

  1. Доступ к терминалу (Ctrl+Alt+T или аналогичный).
  2. Оболочка (shell): инструкция в основном для bash (стандартная в большинстве дистрибутивов), но большинство принципов применимо и к zsh.
  3. Права на запись в домашний каталог (файл ~/.bash_history или ~/.zsh_history).
  4. Текстовый редактор (например, nano или vim) для редактирования конфигурационных файлов.

Шаг 1: Просмотр и поиск в истории

1.1. Базовый просмотр

Просто введите команду, чтобы увидеть список всех сохранённых команд с номерами:

history

По умолчанию выводится 500 или 1000 последних записей (зависит от настройки HISTSIZE).

1.2. Поиск по содержимому

Чтобы найти команду, содержащую конкретный текст (например, systemctl), используйте grep:

history | grep systemctl

Это отфильтрует только те строки, где встречается слово systemctl.

1.3. Поиск с помощью сочетаний клавиш (в интерактивном режиме)

  • Ctrl + Rреверсивный поиск. Начните вводить часть команды, и терминал будет показывать первое совпадение. Нажимайте Ctrl + R для перебора других. Enter — выполнить, Ctrl + G — выйти из поиска.
  • / — прокрутка по последним командам.

Шаг 2: Повторение и редактирование прошлых команд

2.1. Быстрое повторение

  • !! — выполнить последнюю команду. Полезно после sudo (например, sudo !!).
  • !-n — выполнить команду, которая была n шагов назад. !-2 — предпоследняя.
  • !<строка> — выполнить последнюю команду, начинающуюся с <строка>. Например, !sys выполнит последнюю команду, которая начиналась с sys.

2.2. Редактирование перед выполнением

  • После нахождения команды через Ctrl + R нажмите или , чтобы выйти из режима поиска и отредактировать строку.
  • Или найдите команду стрелками / и редактируйте её как обычную строку ввода.

Шаг 3: Настройка размера и формата истории

По умолчанию история может быть ограничена. Давайте это изменим.

3.1. Увеличение количества сохраняемых команд

Откройте конфигурационный файл вашей оболочки. Для bash это обычно ~/.bashrc:

nano ~/.bashrc

Добавьте или измените строки в конце файла:

# Максимальное количество команд в памяти сессии
HISTSIZE=5000
# Максимальное количество команд в файле истории
HISTFILESIZE=10000

Сохраните (Ctrl+O, Enter) и закройте (Ctrl+X) редактор. Чтобы изменения вступили в силу в текущей сессии, выполните:

source ~/.bashrc

3.2. Добавление времени выполнения команд

Для аудита или анализа полезно видеть, когда команда была запущена. Добавьте в ~/.bashrc:

# Формат: Год-Месяц-День Часы:Минуты:Секунды
export HISTTIMEFORMAT='%F %T '

После source ~/.bashrc команда history будет выводить время перед каждой командой.

💡 Совет: Для zsh используйте переменную HISTTIMEFORMAT аналогично или настройте через setopt EXTENDED_HISTORY.


Шаг 4: Очистка и управление файлом истории

4.1. Очистка текущей сессии (оперативной памяти)

history -c

Это удалит все записи из текущей сессии, но не затронет файл ~/.bash_history на диске.

4.2. Очистка файла истории на диске

Чтобы стереть историю и в файле, выполните две команды:

history -c        # 1. Очищаем оперативную память
history -w        # 2. Записываем (пустую) оперативную память в файл ~/.bash_history

Внимание: Это действие необратимо для текущего пользователя.

4.3. Удаление конкретной записи

  1. Узнайте номер строки команды через history.
  2. Удалите её:
    history -d <номер_строки>
    
  3. Немедленно синхронизируйте с файлом:
    history -w
    

4.4. Отключение записи истории (временное)

Для конфиденциальных операций (например, ввода паролей в открытом виде, что крайне не рекомендуется) можно временно отключить запись:

set +o history   # Отключить запись текущей сессии
# ... выполняем конфиденциальные команды ...
set -o history   # Включить запись обратно

Важно: Команды, введённые в отключённом режиме, не попадут в историю, но могут быть видны в процессе (ps aux) или в кэше терминала.


Шаг 5: Полезные продвинутые приёмы

5.1. Выполнение команды из истории по номеру

!<номер>

Например, !123 выполнит команду под номером 123.

5.2. Подстановка аргументов из предыдущей команды

  • !$ — последний аргумент последней команды. Полезно для операций с одним и тем же файлом: cp file.txt backup.txt && mv !$ new_name.txt.
  • !* — все аргументы, кроме первой команды.

5.3. Экспорт истории в файл для анализа

history > my_history.txt

Теперь у вас есть текстовый файл со всей историей для поиска или документирования.


Проверка результата

  1. Выполните несколько разных команд (ls, pwd, echo "test").
  2. Введите history — они должны отобразиться.
  3. Если вы настраивали HISTTIMEFORMAT, убедитесь, что время отображается.
  4. Попробуйте поиск через Ctrl+R — должен находить ваши команды.
  5. Проверьте размер файла истории: ls -la ~/.bash_history.

Если команды появляются в выводе history и сохраняются после закрытия и повторного открытия терминала — настройка работает корректно.


Возможные проблемы

ПроблемаВозможная причинаРешение
История пуста после перезапуска терминалаПеременная HISTSIZE установлена в 0 в ~/.bashrc или ~/.profile.Проверьте эти файлы на наличие HISTSIZE=0 и исправьте.
Не сохраняются команды, введённые через sudoИстория по умолчанию записывается от имени текущего пользователя. Команды, выполненные через sudo, могут логироваться в истории root (/root/.bash_history).Для записи команд sudo в вашу историю настройте sudo (опция timestamp_timeout), но это может быть небезопасно.
История "прыгает" или теряет записиФайл ~/.bash_history повреждён или имеет неверные права.Убедитесь, что владелец файла — вы: ls -la ~/.bash_history. При необходимости удалите файл (он создастся заново) и настройте HISTFILESIZE заново.
history -w не записывает измененияВы находитесь в su или sudo su сессии. Файл истории пытается записаться от root.Выйдите из сессии root (exit) или настройте HISTFILE для root-сессии.

Часто задаваемые вопросы (FAQ)

Можно ли синхронизировать историю между несколькими окнами терминала? Да, но с оговорками. По умолчанию каждая сессия оболочки считывает историю при старте и записывает её при выходе. При работе в нескольких окнах одновременно последние команды из одного окна не появятся в другом, пока вы не выйдете из первой сессии. Чтобы получать обновления "на лету", можно использовать history -a (добавить текущие команды в файл) и history -n (прочитать новые строки из файла) вручную или настроить PROMPT_COMMAND в ~/.bashrc:

export PROMPT_COMMAND='history -a; history -n'

Как найти и выполнить команду, которая содержала опечатку? Используйте поиск по части remembered команды. Например, если вы хотели ввести git commit, но напечатали git comit, найдите через history | grep comit, получите номер и выполните !<номер> или просто найдите стрелками и исправьте.

Безопасно ли хранить всю историю? Нет. История — это plain-text файл (~/.bash_history), доступный для чтения любому, у кого есть доступ к вашему аккаунту. Никогда не вводите в терминал пароли, ключи API или другие секреты. Для конфиденциальных операций используйте отключение истории (set +o history) или специальные утилиты (например, ssh-keygen для паролей не требует ввода в историю).

Почему команда history показывает меньше строк, чем я ожидал? Проверьте две переменные: echo $HISTSIZE (лимит для текущей сессии) и echo $HISTFILESIZE (лимит для файла). Также убедитесь, что вы не очищали историю ранее. Файл ~/.bash_history может быть скрыт или находиться в нестандартном месте (проверьте echo $HISTFILE).

Часто задаваемые вопросы

Как увеличить количество сохраняемых команд в истории?
Команды не сохраняются в истории. Почему?
Как безопасно удалить конкретную команду из истории?
Почему время выполнения команд не отображается в history?

Полезное

Просмотр и поиск в истории
Повторение и редактирование прошлых команд
Настройка размера и формата истории
Очистка и управление файлом истории
Отключение истории (если требуется)