В чем разница между HISTSIZE и HISTFILESIZE?
Они используются для расширения истории bash за пределами 500 строк по умолчанию.
Кажется, что здесь нет ясности и на других форумах, почему они оба нужны. (Пример 1, Пример 2, Пример 3).
В чем разница между HISTSIZE и HISTFILESIZE?
Они используются для расширения истории bash за пределами 500 строк по умолчанию.
Кажется, что здесь нет ясности и на других форумах, почему они оба нужны. (Пример 1, Пример 2, Пример 3).
 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 не установлен, усечение не выполняется.
Основываясь на том, что сказал arturomp, и в попытке сделать его немного яснее.
У вас есть 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