Есть две переменные, которые контролируют размер истории:
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для подробностей.
Для дальнейшей подстройки у вас есть:
Вариант histappendbash. Это можно установить, запустив shopt -s histappendили добавив эту команду к себе ~/.bashrc. Если эта опция установлена
список истории добавляется к файлу, названному значением переменной HISTFILE при выходе из оболочки, а не перезаписывает файл.
Это очень полезно, поскольку позволяет объединять истории разных сеансов (например, разные терминалы).
Команда historyимеет две полезные опции:
Например, вы можете добавить эти две команды в вашу PROMPT_COMMAND(которая выполняется каждый раз, когда ваша оболочка показывает приглашение, поэтому всякий раз, когда вы запускаете новую оболочку и после каждой команды, которую вы запускаете в ней):
export PROMPT_COMMAND='history -a;history -r;'
В совокупности они гарантируют, что любой новый терминал, который вы откроете, немедленно импортирует историю любых других сеансов оболочки. Результатом является общая история всех терминалов / сеансов оболочки.