Всем известно, что Bash ведет историю всех команд, введенных в консоли, но по умолчанию некоторые настройки хранения этой истории заданы не сильно рациональными.
Давайте сделаем ведение и чтение истории более удобным, а так же рассмотрим вопрос очистки истории команд.
Исходные данные: Debian 9
Как известно, история команд в Linux хранится в файле ~/.bash_history
Размер файла ограничен списком из 500 последних выполненных команд, которые затираются по мере заполнения этого файла.
500 команд — это довольно мало, Вы легко можете потерять полезную команду которую выполнили скажем неделю назад.
Чтобы увеличить размер хранимой истории необходимо в файл ~/.bashrc добавить строки:
export HISTSIZE=10000 export HISTFILESIZE=10000
HISTSIZE — количество команд, которые необходимо запоминать в списке истории (по умолчанию — 500);
HISTFILESIZE — максимальное количество строк, содержащееся в файле истории ~/.bash_history (по умолчанию — 500);
Теперь у нас будет храниться история последних 10 тыс. команд.
Для применения настроек нужно выполнить:
source ~/.bashrc
или перезайти в терминал.
Идем дальше, если Вы выполните команду history, то заметите, что выполненные подряд одни и те же команды повторяются в истории. Это жутко неудобно, давайте отключим такое поведение. Для этого в файл ~/.bashrc добавим строку:
export HISTCONTROL=ignoreboth:erasedups
Опция HISTCONTROL контролирует каким образом список команд сохраняется в истории.
ignorespace — не сохранять строки начинающиеся с символа <пробел>
ignoredups — не сохранять строки, совпадающие с последней выполненной командой
ignoreboth — использовать обе опции ‘ignorespace’ и ‘ignoredups’
erasedups — удалять ВСЕ дубликаты команд с истории
Не забываем выполнить source ~/.bashrc для применения настроек на лету.
Следующая полезная настройка отвечает за игнорирование определенных команд при добавлении в историю, это HISTIGNORE.
Давайте не будем сохранять в истории команды ls, ps и history с доп. опциями. Для этого в файл ~/.bashrc добавим строку:
export HISTIGNORE='ls:ps:history*'
Не забываем выполнить source ~/.bashrc для применения настроек на лету.
По умолчанию, Bash записывает историю команд в ~/.bash_history только при завершении сессии. Если Ваша сессия будет отключена некорректно, то как правило история команд в текущем сеансе не сохраниться — это неудобно. Чтобы это исправить нужно добавить в ~/.bashrc следующую строку:
PROMPT_COMMAND='history -a'
Как Вы уже заметили, вывод истории команд не учитывает дату и время выполнения этой команды, а иногда бывает очень нужно понимать, когда же Вы выполнили эту команду. Но все можно поправить, чтобы добавить дату к списку команд нужно изменить формат вывода истории, для этого в ~/.bashrc нужно добавить строку:
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: '
Не забываем выполнить source ~/.bashrc для применения настроек на лету.
И в конце, все вышеописанные опции можно добавить в ~/.bashrc с помощью одной команды:
cat <<EOT >> ~/.bashrc export HISTSIZE=10000 export HISTFILESIZE=10000 export HISTCONTROL=ignoreboth:erasedups PROMPT_COMMAND='history -a' export HISTIGNORE='ls:ps:history*' export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: ' EOT source ~/.bashrc
Иногда случаются ситуации, когда необходимо очистить историю команд Linux. Например, Вы случайно ввели в консоле команду, содержащую пароль в открытом виде. В этом случае Вам потребуется либо удалить всю историю, либо только определенную ее часть.
Если нужно удалить конкретную строку в истории, то выполните:
history -wd 231
Для удаления всей истории команд выполните:
history -c
Если нужно очистить историю команд только для текущей сессии, то выполните:
history -r
Следует обратить внимание, что если Вы сохраняете историю сразу по факту выполнения команды (настройка PROMPT_COMMAND=’history -a’), а не по выходу из сессии как это предусмотрено по умолчанию, то полную очистку истории указанными выше способами (опции -c и -r) Вы не сделаете, история в файле ~/.bash_history сохраниться. Тогда для полной очистки истории команд нужно очистить файл ~/.bash_history, для этого выполните:
echo>~/.bash_history
и закройте текущую сессию, тогда история будет очищена полностью.
По умолчанию, история команд включена всегда и все введенные команды можно использовать повторно не затрачивая времени на их набор. Но при желании функцию ведения истории можно временно отключить. В Bash история команд в текущей сессии отключается с помощью команды:
set +o history
Для включения ведения истории команд в текущей сессии выполните:
set -o history
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Понятное и исчерпывающее описание. Очень помогло, спасибо!
вопрос, как сделать, чтоб после перезагрузки. история сохранялась?
Она итак сохраняется. Если у вас иначе, то значит кто-то реализовал очистку истории команд или например корневой раздел в режиме read-only и тогда понятно дело история не сохранится.