2 ответов:
короткий ответ:
HISTSIZE- Это количество строк или команд, которые хранятся в памяти в списке истории во время сеанса bash.
HISTFILESIZE- это количество строк или команд, которые (a) разрешены в файле истории во время запуска сеанса и (b) хранятся в файле истории в конце сеанса bash для использования в будущих сеансах.обратите внимание на различие между file - на диске - и список - в памяти.
ответ:
вся информация выше + некоторые примеры:
HISTFILESIZE=10иHISTSIZE=10
- вы начинаете свои сессии.
- ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать histfilesize=10 строк.
- вы пишете 50 строк.
- в конце ваших 50 команд, только команды 41 до 50 находятся в вашей истории список, размер которого определяется HISTSIZE=10.
- завершить сеанс.
- предполагая, что
histappendне включено, команды с 41 по 50 сохраняются в ваш HISTFILE, который теперь имеет 10 команд, которые он держал в начале плюс 10 недавно написанных команд.- ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=10 строк.
- теперь у вас есть 10 команд в вашей истории - последние 10, которые вы только что набрали в сессии вы просто законченный.
- когда вы начинаете новый сеанс, вы начинаете с 1 с HISTFILE HISTFILESIZE=10.
HISTFILESIZE=10иHISTSIZE=5
- вы начинаете свои сессии.
- ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать не более HISTFILESIZE=10 строк.
- вы пишете 50 строк.
- в конце 50 команд, только команды 46 до 50 в список истории, размер которого определяется HISTSIZE=5.
- завершить сеанс.
- предполагая, что
histappendне включено, команды от 46 до 50 сохраняются в ваш HISTFILE, который теперь имеет 10 команд, которые он держал в начале плюс 5 недавно написанных команд.- ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=10 строк.
- теперь у вас есть 10 команд в вашей истории - 5 из предыдущей сессии и последние 5, что вы просто введите сеанс, который вы только что закончили.
- когда вы начинаете новый сеанс, вы начинаете с 1 с HISTFILE HISTFILESIZE=10.
HISTFILESIZE=5иHISTSIZE=10
- вы начинаете свои сессии.
- ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать не более HISTFILESIZE=5 строк.
- вы пишете 50 строк.
- в конце 50 команд, только команды от 41 до 50 находятся в вашем списке истории, размер которого определяется HISTSIZE=10.
- завершить сеанс.
- предполагая, что
histappendне включено, команды с 41 по 50 сохраняются в ваш HISTFILE, который теперь имеет 5 команд, которые он держал в начале плюс 10 недавно написанных команд.- ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=5 строк.
- теперь у вас есть 5 команд в истории - последние 5, что вы только что ввели сеанс, который только что закончили.
- когда вы начинаете новый сеанс, вы начинаете сначала на шаге 1 с HISTFILE HISTFILESIZE=5.
информация elixir_sinari:
история "файл" не обновляется при вводе команд. Этот команды хранятся в" списке " отдельно (доступ к истории команда.) Количество этих сохраненных команд контролируется Значение HISTSIZE. Когда оболочка (интерактивные) выходы, последние Строки $HISTSIZE копируются / добавляются в $HISTFILE из этого "списка". Если установлен HISTFILESIZE, то после этой операции он будет обеспечен что в $HISTFILE существуют только строки $HISTFILESIZE (последние). И когда оболочка запускается," список " инициализируется от $HISTFILE до максимум команд $HISTSIZE.
и
man bashстраницы:значение используется переменная HISTSIZE как количество команд для сохранения в списке истории. Текст последних команд HISTSIZE (по умолчанию 500) сохраняется. (...)
при запуске история инициализируется из файла с именем переменной HISTFILE (по умолчанию~/.bash_history). Файл, названный стоимость HISTFILE является усекается, если необходимо, чтобы содержать не более количества строк, указанных значением HISTFILESIZE. (...) При выходе из интерактивной оболочки последние строки $HISTSIZE копируются из истории список в $HISTFILE. Если включена опция оболочки histappend (см. Описание shopt в разделе встроенные команды оболочки ниже), то строки добавляются к файл истории, в противном случае файл истории перезаписывается. Если 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. Например, с2033HISTFILESIZE, в моем случае у меня было бы это:~$ history 1 fghfghdf 2 gegege 3 gege .. .. 2028 HISTSIZE=5 2029 GGH 2030 GSDHFG 2031 JFDR 2032 ABSDDS 2033 AHFGHFD
Comments