Содержание

Утилита history: Работа с историей команд

Команда history в Linux отображает список ранее выполненных команд, хранящихся в оперативной памяти и специальном файле. Это мощный инструмент для повторения сложных команд и аудита действий.

Базовое использование

Команда Описание
history Вывод полного списка команд из текущей сессии и файла истории.
!N Выполнить команду под номером N из списка истории.
!! Повторить последнюю выполненную команду (удобно для sudo !!).
!-N Выполнить команду, которая была N шагов назад.
Ctrl+R Интерактивный поиск по истории (обратный поиск). Нажмите повторно для следующего совпадения.

Управление записями

Команда Описание
history -d <номер> Удалить конкретную строку из истории по её номеру.
history -c Полная очистка истории в текущей сессии (не затрагивает файл до сохранения).
history -w Немедленно записать историю текущей сессии в файл.
for i in {1..10}; do history -d 40; done Цикл для удаления 10 строк, начиная с 40-й.

Переменные окружения (Настройка)

Посмотреть все текущие настройки можно командой:

set | grep HIST
Переменная Описание
HISTFILE Путь к файлу истории (обычно ~/.bash_history).
HISTFILESIZE Максимальное количество строк, которое может храниться в файле.
HISTSIZE Максимальное количество команд, хранящихся в оперативной памяти текущей сессии.
HISTCONTROL Управление записью: ignoreboth — не записывать дубликаты и команды, начинающиеся с пробела.
HISTTIMEFORMAT Формат даты и времени выполнения команды (например: "%F %T ").

Лайфхак: Чтобы команда не попала в историю, просто введите пробел перед ней (если настроен HISTCONTROL=ignoreboth или ignorespace).

Конфигурация и автоматизация

Отключение истории

Чтобы временно отключить запись истории для текущей сессии:

set +o history

Для включения обратно: set -o history.

Настройка поиска (файл .inputrc)

Для того чтобы искать команды в истории с помощью клавиш PageUp и PageDown по первым введенным буквам, необходимо раскомментировать или добавить следующие строки в файл /etc/inputrc или ~/.inputrc:

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Установка лимитов

Пример изменения размеров истории в файле ~/.bashrc:

export HISTSIZE=1000
export HISTFILESIZE=2000
export HISTTIMEFORMAT="%d.%m.%y %T "

Важные особенности

Продвинутые настройки и Алиасы (Aliases)

Чтобы настройки применялись всегда, добавь эти строки в конец твоего файла ~/.bashrc.

1. Полезные псевдонимы

Добавь эти строки для быстрого поиска и очистки:

# Поиск по истории (использование: hgrep "имя_команды")

alias hgrep='history | grep'

# Очистить историю текущей сессии и файл истории полностью

alias hclear='history -c && history -w'

2. Синхронизация истории в нескольких окнах

По умолчанию история сохраняется только при закрытии терминала. Если у тебя открыто 5 окон, история в них может перемешаться. Эти настройки заставят Bash записывать команду сразу после её выполнения.

# Склеивать историю разных сессий, а не перезаписывать её

shopt -s histappend

# Сохранять команду сразу после выполнения и обновлять список

PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"

3. Глобальный фильтр игнорирования

Если ты не хочешь, чтобы в историю попадали базовые команды вроде ls, bg или exit, используй переменную HISTIGNORE.

export HISTIGNORE="ls:ls -lah:cd:pwd:exit:bg:fg:history"

Итоговый блок настроек для .bashrc

Скопируй это в свой конфиг для "максимального комфорта":

# --- Настройки History ---
 
export HISTSIZE=5000                   # Сколько храним в памяти
export HISTFILESIZE=10000              # Сколько храним в файле
export HISTCONTROL=ignoreboth          # Игнор дублей и пробелов
export HISTTIMEFORMAT="%d/%m/%y %T "   # Формат даты и времени
export HISTIGNORE="ls:cd:pwd:exit"     # Не записывать эти команды
 
shopt -s histappend                    # Не затирать файл истории
PROMPT_COMMAND="history -a; $PROMPT_COMMAND" # Писать в файл сразу
 
# -------------------------