Відповіді:
HISTSIZE - це кількість рядків або команд, які зберігаються в пам'яті в списку історії, поки триває ваш баш-сеанс.
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 увімкнено (див. Опис простріляного під командою SHELL BUILTIN COMMANDS нижче), рядки додаються до файлу історії, інакше файл історії буде перезаписаний. Якщо 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. Наприклад, з a 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'. Оскільки вони нечислові, вони зберігають усе. Дякую за пораду!