Respuestas:
HISTSIZE
es el número de líneas o comandos que se almacenan en la memoria en una lista de historial mientras su sesión de bash está en curso.
HISTFILESIZE
es el número de líneas o comandos que (a) están permitidos en el archivo de historial en el momento de inicio de una sesión, y (b) se almacenan en el archivo de historial al final de su sesión de bash para usar en futuras sesiones.
Observe la distinción entre file
: en el disco y list
: en la memoria.
Toda la información anterior + algunos ejemplos:
Ejemplo 1 :
HISTFILESIZE=10
yHISTSIZE=10
histappend
que no esté habilitado, los comandos 41 a 50 se guardan en su HISTFILE, que ahora tiene los 10 comandos que tenía al principio más los 10 comandos recién escritos.Ejemplo 2 :
HISTFILESIZE=10
yHISTSIZE=5
histappend
que no esté habilitado, los comandos 46 a 50 se guardan en su HISTFILE, que ahora tiene los 10 comandos que tenía al principio más los 5 comandos recién escritos.Ejemplo 3 :
HISTFILESIZE=5
yHISTSIZE=10
histappend
que no esté habilitado, los comandos 41 a 50 se guardan en su HISTFILE, que ahora tiene los 5 comandos que tenía al principio más los 10 comandos recién escritos.Información de elixir_sinari :
El "archivo" del historial no se actualiza a medida que escribe los comandos. Los comandos se almacenan en una "lista" por separado (se accede mediante el comando de historial). El número de estos comandos almacenados se controla mediante el valor HISTSIZE. Cuando el shell (interactivo) sale, las últimas líneas $ HISTSIZE se copian / anexan a $ HISTFILE desde esa "lista". Si se establece HISTFILESIZE, luego de esta operación, se garantiza que solo existan líneas $ HISTFILESIZE (más recientes) en $ HISTFILE. Y cuando se inicia el shell, la "lista" se inicializa desde $ HISTFILE hasta un máximo de $ HISTSIZE comandos.
Y de la man bash
página:
El valor de la variable HISTSIZE se usa como el número de comandos para guardar en una lista de historial. Se guarda el texto de los últimos comandos HISTSIZE (predeterminado 500). (...)
Al inicio, el historial se inicializa desde el archivo nombrado por la variable HISTFILE (predeterminado ~ / .bash_history). El archivo nombrado por el valor de HISTFILE se trunca, si es necesario, para que no contenga más que el número de líneas especificado por el valor de HISTFILESIZE. (...) Cuando sale un shell interactivo, las últimas líneas $ HISTSIZE se copian de la lista del historial a $ HISTFILE. Si la opción de shell histappend está habilitada (consulte la descripción de shopt en COMANDOS DE CONSTRUCCIÓN DE SHELL a continuación), las líneas se agregan al archivo de historial; de lo contrario, el archivo de historial se sobrescribe. Si HISTFILE no está configurado, o si el archivo de historial no se puede escribir, el historial no se guarda. (...) Después de guardar el historial, el archivo de historial se trunca para que no contenga más que HISTFILESIZE líneas. Si HISTFILESIZE no está configurado,
Sobre la base de lo que arturomp ha dicho y en un esfuerzo por aclararlo un poco.
Asumiendo que tienes 2000 años de historia ...
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
Puede reducir lo que se muestra con HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
Ahora, no importa cuántos comandos escriba, solo se registrarán los últimos 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
Podemos ver claramente que nuestro primer comando ("ABC") no está en el historial ya que solo se registraron los últimos 5 comandos.
Ahora, el historial total se almacena en un archivo ( .bash_history
) y puede modificar el tiempo que tarda este archivo con HISTFILESIZE
. Por ejemplo con un 2033
HISTFILESIZE
, en mi caso tendría esto:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD
HISTSIZE=-1
y HISTFILESIZE=-1
.
bash
página del manual dice: Non-numeric values and numeric values less than zero inhibit truncation
pero no tuve el coraje de comprobar si esto es cierto porque no quiero perder mi historia :-)
HISTSIZE='INFINITY'
y HISTFILESIZE='ANDBEYOND'
. Como no son numéricos, guardan todo. ¡Gracias por el consejo!