Команда 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.
Для того чтобы искать команды в истории с помощью клавиш 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 "
$HISTFILE происходит автоматически только при закрытии терминала (exit).shopt -s histappend.Чтобы настройки применялись всегда, добавь эти строки в конец твоего файла ~/.bashrc.
Добавь эти строки для быстрого поиска и очистки:
# Поиск по истории (использование: hgrep "имя_команды") alias hgrep='history | grep' # Очистить историю текущей сессии и файл истории полностью alias hclear='history -c && history -w'
По умолчанию история сохраняется только при закрытии терминала. Если у тебя открыто 5 окон, история в них может перемешаться. Эти настройки заставят Bash записывать команду сразу после её выполнения.
# Склеивать историю разных сессий, а не перезаписывать её shopt -s histappend # Сохранять команду сразу после выполнения и обновлять список PROMPT_COMMAND="history -a; history -n; $PROMPT_COMMAND"
Если ты не хочешь, чтобы в историю попадали базовые команды вроде ls, bg или exit, используй переменную HISTIGNORE.
export HISTIGNORE="ls:ls -lah:cd:pwd:exit:bg:fg:history"
Скопируй это в свой конфиг для "максимального комфорта":
# --- Настройки 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" # Писать в файл сразу # -------------------------