Есть две переменные, которые контролируют размер истории:
HISTFILESIZE Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории обрезается, если необходимо, чтобы он содержал не более этого количества строк, удаляя самые старые записи. Файл истории также усекается до этого размера после записи при выходе из оболочки. Если значение равно 0, файл истории усекается до нулевого размера. Нечисловые значения и числовые значения меньше нуля препятствуют усечению. Оболочка устанавливает значение по умолчанию в значение HISTSIZE после чтения любых файлов запуска.
а также
HISTSIZE Количество команд, которые нужно запомнить в истории команд (см. ИСТОРИЯ ниже). Если значение равно 0, команды не сохраняются в списке истории. Числовые значения меньше нуля приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). Оболочка устанавливает значение по умолчанию 500 после чтения любых файлов запуска.
Эти две переменные позволяют вам контролировать поведение вашей истории. В основном, HISTSIZE
это количество команд, сохраненных во время текущего сеанса, и HISTFILESIZE
количество команд, которые будут запомнены во время сеансов. Так, например:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
В приведенном выше примере, поскольку HISTSIZE
установлено значение 10, history
возвращает список из 10 команд. Однако, если вы выйдете из системы, а затем снова войдете в систему, history
вернет только 5 команд, потому что HISTFILESIZE
установлено значение 5. Это потому, что после выхода из сеанса HISTFILESIZE
строки вашей истории сохраняются в файле истории ( ~/.bash_history
по умолчанию, но управляются HISTFILE
). Другими словами, команды добавляются до HISTFILE
тех пор, пока они не достигнут $HISTFILESIZE
строк, в которых каждая последующая добавленная строка означает, что первая команда файла будет удалена.
Вы можете установить значения этих переменных в вашем ~/.profile
(или, ~/.bash_profile
если этот файл существует). Не устанавливайте их в ~/.bashrc
первую очередь, потому что они не устанавливают там бизнес, а во-вторых, потому что это может привести к тому, что вы будете вести себя по-разному в логине и не-логине, что может привести к другим проблемам .
Другие полезные переменные, которые позволяют вам точно настроить поведение вашей истории:
HISTIGNORE
Это позволяет вам игнорировать некоторые общие команды, которые редко представляют интерес. Например, вы можете установить:
export HISTIGNORE="pwd:df:du"
Это может привести к тому, что любая команда, начинающаяся с pwd
, df
или du
будет проигнорирована и не сохранена в вашей истории.
HISTCONTROL
: Этот позволяет вам выбрать, как работает история. Лично я установил его, HISTCONTROL=ignoredups
что заставляет его сохранять дублированные команды только один раз. Другие варианты - ignorespace
игнорировать команды, начинающиеся с пробела, erasedups
что приводит к удалению всех предыдущих строк, соответствующих текущей строке, из списка истории перед сохранением этой строки. ignoreboth
является сокращением для ignorespace и ignoredups.
HISTTIMEFORMAT
: Это позволяет вам установить формат времени файла истории. Смотрите ответ Панди или читайте man bash
для подробностей.
Для дальнейшей подстройки у вас есть:
Вариант histappend
bash. Это можно установить, запустив shopt -s histappend
или добавив эту команду к себе ~/.bashrc
. Если эта опция установлена
список истории добавляется к файлу, названному значением переменной HISTFILE при выходе из оболочки, а не перезаписывает файл.
Это очень полезно, поскольку позволяет объединять истории разных сеансов (например, разные терминалы).
Команда history
имеет две полезные опции:
Например, вы можете добавить эти две команды в вашу PROMPT_COMMAND
(которая выполняется каждый раз, когда ваша оболочка показывает приглашение, поэтому всякий раз, когда вы запускаете новую оболочку и после каждой команды, которую вы запускаете в ней):
export PROMPT_COMMAND='history -a;history -r;'
В совокупности они гарантируют, что любой новый терминал, который вы откроете, немедленно импортирует историю любых других сеансов оболочки. Результатом является общая история всех терминалов / сеансов оболочки.