Как я могу изменить содержимое моего bash_history
файла? Какие значения или переменные контролируют, как долго длится история? Есть ли другие вещи, которые я могу изменить, чтобы лучше контролировать мою историю BASH?
11
Как я могу изменить содержимое моего bash_history
файла? Какие значения или переменные контролируют, как долго длится история? Есть ли другие вещи, которые я могу изменить, чтобы лучше контролировать мою историю BASH?
HISTSIZE
иHISTFILESIZE
являются единственными поверхностями управления, которые вы должны контролировать, сколько истории поддерживается.Ответы:
Есть две переменные, которые контролируют размер истории:
а также
Эти две переменные позволяют вам контролировать поведение вашей истории. В основном,
HISTSIZE
это количество команд, сохраненных во время текущего сеанса, иHISTFILESIZE
количество команд, которые будут запомнены во время сеансов. Так, например:В приведенном выше примере, поскольку
HISTSIZE
установлено значение 10,history
возвращает список из 10 команд. Однако, если вы выйдете из системы, а затем снова войдете в систему,history
вернет только 5 команд, потому чтоHISTFILESIZE
установлено значение 5. Это потому, что после выхода из сеансаHISTFILESIZE
строки вашей истории сохраняются в файле истории (~/.bash_history
по умолчанию, но управляютсяHISTFILE
). Другими словами, команды добавляются доHISTFILE
тех пор, пока они не достигнут$HISTFILESIZE
строк, в которых каждая последующая добавленная строка означает, что первая команда файла будет удалена.Вы можете установить значения этих переменных в вашем
~/.profile
(или,~/.bash_profile
если этот файл существует). Не устанавливайте их в~/.bashrc
первую очередь, потому что они не устанавливают там бизнес, а во-вторых, потому что это может привести к тому, что вы будете вести себя по-разному в логине и не-логине, что может привести к другим проблемам .Другие полезные переменные, которые позволяют вам точно настроить поведение вашей истории:
HISTIGNORE
Это позволяет вам игнорировать некоторые общие команды, которые редко представляют интерес. Например, вы можете установить:Это может привести к тому, что любая команда, начинающаяся с
pwd
,df
илиdu
будет проигнорирована и не сохранена в вашей истории.HISTCONTROL
: Этот позволяет вам выбрать, как работает история. Лично я установил его,HISTCONTROL=ignoredups
что заставляет его сохранять дублированные команды только один раз. Другие варианты -ignorespace
игнорировать команды, начинающиеся с пробела,erasedups
что приводит к удалению всех предыдущих строк, соответствующих текущей строке, из списка истории перед сохранением этой строки.ignoreboth
является сокращением для ignorespace и ignoredups.HISTTIMEFORMAT
: Это позволяет вам установить формат времени файла истории. Смотрите ответ Панди или читайтеman bash
для подробностей.Для дальнейшей подстройки у вас есть:
Вариант
histappend
bash. Это можно установить, запустивshopt -s histappend
или добавив эту команду к себе~/.bashrc
. Если эта опция установленаЭто очень полезно, поскольку позволяет объединять истории разных сеансов (например, разные терминалы).
Команда
history
имеет две полезные опции:history -a
: заставляет последнюю команду записываться в файл истории автоматическиhistory -r
: импортирует файл истории в текущий сеанс.Например, вы можете добавить эти две команды в вашу
PROMPT_COMMAND
(которая выполняется каждый раз, когда ваша оболочка показывает приглашение, поэтому всякий раз, когда вы запускаете новую оболочку и после каждой команды, которую вы запускаете в ней):В совокупности они гарантируют, что любой новый терминал, который вы откроете, немедленно импортирует историю любых других сеансов оболочки. Результатом является общая история всех терминалов / сеансов оболочки.
источник
Размер файла истории по умолчанию составляет 500 строк. Как только файл .bash_history достигает 500 строк, ранние записи удаляются, чтобы освободить место для более новых строк, как в FIFO. Вы можете изменить это, изменив значение переменной,
HISTFILESIZE
которая по умолчанию имеет значение 500.Помещение
HISTFILESIZE=10000
в ваш .bashrc увеличит количество строк, которые может хранить файл истории, до 10000, увеличивая тем самым срок службы его содержимого.источник
HISTSIZE
лимит, подумайте и об измененииHISTFILE
. Если вы запуститеbash --norc
HISTSIZE
, вернетесь к значению по умолчанию, обрезая егоHISTFILE
при выходе./etc/bash.bashrc
устанавливаетHISTFILESIZE
(или, может бытьHISTSIZE
, я не проверял, какой), то Bash, по-видимому, усекается.bash_history
в точке, которую она читает/etc/bash.bashrc
(или, по крайней мере, в какой-то момент до того, как ваш новый лимит установлен в ваших собственных файлах Bash init). Чтобы избежать этого, снова установите свой собственный,HISTFILE
чтобы ваша реальная история шла туда, а не в.bash_history
файл, который Bash усекает.export
этого, так как это сделало бы его видимым для любых дочерних оболочек, которые могли бы вместо этого усекать его.bash_history
!)Прочитайте
man bash
подробности об истории bash, например:В частности,
HISTFILESIZE
и,HISTSIZE
возможно, вы ищете и помогает вам.источник