Ответы:
HISTSIZE
это количество строк или команд, которые хранятся в памяти в списке истории, пока ваш сеанс bash продолжается.
HISTFILESIZE
количество строк или команд, которые (a) разрешены в файле истории во время запуска сеанса, и (b) сохранены в файле истории в конце сеанса bash для использования в будущих сеансах.
Обратите внимание на различие между file
: на диске - и list
: в памяти.
Вся информация выше + несколько примеров:
Пример 1 :
HISTFILESIZE=10
иHISTSIZE=10
histappend
он не включен, команды с 41 по 50 сохраняются в вашем HISTFILE, который теперь содержит 10 команд, которые он удерживал в начале, плюс 10 вновь написанных команд.Пример 2 :
HISTFILESIZE=10
иHISTSIZE=5
histappend
он не включен, команды с 46 по 50 сохраняются в вашем HISTFILE, который теперь содержит 10 команд, которые он удерживал в начале, плюс 5 вновь написанных команд.Пример 3 :
HISTFILESIZE=5
иHISTSIZE=10
histappend
он не включен, команды с 41 по 50 сохраняются в вашем HISTFILE, который теперь содержит 5 команд, которые он удерживал в начале, плюс 10 вновь написанных команд.Информация от elixir_sinari :
История файла не обновляется при вводе команд. Команды хранятся в «списке» отдельно (доступ к команде истории). Количество этих сохраненных команд контролируется значением HISTSIZE. Когда оболочка (интерактивная) закрывается, последние строки $ HISTSIZE копируются / добавляются в $ HISTFILE из этого «списка». Если установлен HISTFILESIZE, то после этой операции гарантируется, что в $ HISTFILE существуют только строки $ HISTFILESIZE (самые последние). И когда оболочка запускается, «список» инициализируется от $ HISTFILE до максимум команд $ HISTSIZE.
И со man bash
страницы:
Значение переменной HISTSIZE используется в качестве количества команд для сохранения в списке истории. Текст последних команд HISTSIZE (по умолчанию 500) сохраняется. (...)
При запуске история инициализируется из файла, названного переменной HISTFILE (по умолчанию ~ / .bash_history). Файл, названный значением HISTFILE, усекается, если необходимо, чтобы он содержал не более количества строк, указанных значением HISTFILESIZE. (...) При выходе из интерактивной оболочки последние строки $ HISTSIZE копируются из списка истории в $ HISTFILE. Если включена опция оболочки histappend (см. Описание shopt в разделе «Команды SHELL BUILTIN» ниже), строки добавляются в файл истории, в противном случае файл истории перезаписывается. Если HISTFILE не установлен или если файл истории недоступен для записи, история не сохраняется. (...) После сохранения истории файл истории усекается до не более чем строк HISTFILESIZE. Если HISTFILESIZE не установлен,
Основываясь на том, что сказал Артуромп, и чтобы сделать это немного яснее.
Предполагая, что у вас есть 2000-летняя история ..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
Вы можете сократить то, что вам показывают HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
Теперь, независимо от того, сколько команд вы наберете, будут записаны только последние 5.
~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2028 56
2029 yu45u
2030 HISTSIZE=5
2031 GGH
2032 GSDHFG
2033 JFDR
2034 ABSDDS
2035 AHFGHFD
Мы ясно видим, что нашей первой команды («ABC») нет в истории, поскольку были записаны только последние 5 команд.
Теперь общая история сохраняется в файле ( .bash_history
), и вы можете изменить время, которое этот файл получает с HISTFILESIZE
. Например, с 2033
HISTFILESIZE
, в моем случае у меня было бы это:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD
HISTSIZE=-1
и HISTFILESIZE=-1
.
bash
странице руководства написано: Non-numeric values and numeric values less than zero inhibit truncation
но тогда у меня не хватило смелости проверить, правда ли это, потому что я не хочу терять свою историю :-)
HISTSIZE='INFINITY'
и HISTFILESIZE='ANDBEYOND'
. Поскольку они не числовые, они сохраняют все. Спасибо за чаевые!