bash HISTSIZE против HISTFILESIZE?



какая разница в HISTSIZE и HISTFILESIZE?



Они используются для расширения истории bash за пределы 500 строк по умолчанию.



Кажется, что здесь и на других форумах нет ясности о том, почему они оба нужны. (Пример 1, Пример 2, Пример 3).

563   2  

2 ответов:

короткий ответ:

HISTSIZE - Это количество строк или команд, которые хранятся в памяти в списке истории во время сеанса bash.

HISTFILESIZE - это количество строк или команд, которые (a) разрешены в файле истории во время запуска сеанса и (b) хранятся в файле истории в конце сеанса bash для использования в будущих сеансах.

обратите внимание на различие между file - на диске - и список - в памяти.

ответ:

вся информация выше + некоторые примеры:

HISTFILESIZE=10 и HISTSIZE=10

  1. вы начинаете свои сессии.
    1. ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать histfilesize=10 строк.
  2. вы пишете 50 строк.
  3. в конце ваших 50 команд, только команды 41 до 50 находятся в вашей истории список, размер которого определяется HISTSIZE=10.
  4. завершить сеанс.
    1. предполагая, что histappend не включено, команды с 41 по 50 сохраняются в ваш HISTFILE, который теперь имеет 10 команд, которые он держал в начале плюс 10 недавно написанных команд.
    2. ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=10 строк.
  5. теперь у вас есть 10 команд в вашей истории - последние 10, которые вы только что набрали в сессии вы просто законченный.
  6. когда вы начинаете новый сеанс, вы начинаете с 1 с HISTFILE HISTFILESIZE=10.

HISTFILESIZE=10 и HISTSIZE=5

  1. вы начинаете свои сессии.
    1. ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать не более HISTFILESIZE=10 строк.
  2. вы пишете 50 строк.
  3. в конце 50 команд, только команды 46 до 50 в список истории, размер которого определяется HISTSIZE=5.
  4. завершить сеанс.
    1. предполагая, что histappend не включено, команды от 46 до 50 сохраняются в ваш HISTFILE, который теперь имеет 10 команд, которые он держал в начале плюс 5 недавно написанных команд.
    2. ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=10 строк.
  5. теперь у вас есть 10 команд в вашей истории - 5 из предыдущей сессии и последние 5, что вы просто введите сеанс, который вы только что закончили.
  6. когда вы начинаете новый сеанс, вы начинаете с 1 с HISTFILE HISTFILESIZE=10.

HISTFILESIZE=5 и HISTSIZE=10

  1. вы начинаете свои сессии.
    1. ваш HISTFILE (файл, который хранит историю команд bash), усекается, чтобы содержать не более HISTFILESIZE=5 строк.
  2. вы пишете 50 строк.
  3. в конце 50 команд, только команды от 41 до 50 находятся в вашем списке истории, размер которого определяется HISTSIZE=10.
  4. завершить сеанс.
    1. предполагая, что histappend не включено, команды с 41 по 50 сохраняются в ваш HISTFILE, который теперь имеет 5 команд, которые он держал в начале плюс 10 недавно написанных команд.
    2. ваш HISTFILE усекается, чтобы содержать HISTFILESIZE=5 строк.
  5. теперь у вас есть 5 команд в истории - последние 5, что вы только что ввели сеанс, который только что закончили.
  6. когда вы начинаете новый сеанс, вы начинаете сначала на шаге 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

    Ничего не найдено.