Respostas:
HISTSIZE
é o número de linhas ou comandos armazenados na memória em uma lista de histórico enquanto a sessão do bash está em andamento.
HISTFILESIZE
é o número de linhas ou comandos que (a) são permitidos no arquivo de histórico no momento da inicialização de uma sessão e (b) são armazenados no arquivo de histórico no final de sua sessão do bash para uso em sessões futuras.
Observe a distinção entre file
: no disco - e list
: na memória.
Todas as informações acima + alguns exemplos:
Exemplo 1 :
HISTFILESIZE=10
eHISTSIZE=10
histappend
não esteja ativado, os comandos 41 a 50 são salvos no HISTFILE, que agora possui os 10 comandos que ele mantinha no início, além dos 10 comandos recém-gravados.Exemplo 2 :
HISTFILESIZE=10
eHISTSIZE=5
histappend
não esteja ativado, os comandos 46 a 50 são salvos no HISTFILE, que agora possui os 10 comandos que ele mantinha no início, além dos 5 comandos recém-gravados.Exemplo 3 :
HISTFILESIZE=5
eHISTSIZE=10
histappend
não esteja ativado, os comandos 41 a 50 são salvos no HISTFILE, que agora possui os 5 comandos que ele mantinha no início, além dos 10 comandos recém-gravados.Informações de elixir_sinari :
O histórico "arquivo" não é atualizado à medida que você digita os comandos. Os comandos são armazenados em uma "lista" separadamente (acessados pelo comando history). O número desses comandos armazenados é controlado pelo valor HISTSIZE. Quando o shell (interativo) sai, as últimas linhas $ HISTSIZE são copiadas / anexadas a $ HISTFILE dessa "lista". Se HISTFILESIZE estiver definido, após esta operação, será garantido que apenas as linhas $ HISTFILESIZE (mais recentes) existam em $ HISTFILE. E quando o shell é iniciado, a "lista" é inicializada de $ HISTFILE até um máximo de comandos $ HISTSIZE.
E a partir da man bash
página:
O valor da variável HISTSIZE é usado como o número de comandos para salvar em uma lista de histórico. O texto dos últimos comandos HISTSIZE (padrão 500) é salvo. (...)
Na inicialização, o histórico é inicializado a partir do arquivo nomeado pela variável HISTFILE (padrão ~ / .bash_history). O arquivo nomeado pelo valor de HISTFILE é truncado, se necessário, para conter não mais que o número de linhas especificado pelo valor de HISTFILESIZE. (...) Quando um shell interativo sai, as últimas linhas $ HISTSIZE são copiadas da lista de histórico para $ HISTFILE. Se a opção shell histappend estiver ativada (consulte a descrição do shopt em SHELL BUILTIN COMMANDS abaixo), as linhas serão anexadas ao arquivo de histórico, caso contrário, o arquivo de histórico será substituído. Se HISTFILE estiver desabilitado, ou se o arquivo do histórico for gravável, o histórico não será salvo. (...) Após salvar o histórico, o arquivo do histórico é truncado para conter não mais que linhas HISTFILESIZE. Se HISTFILESIZE não estiver definido,
Construindo sobre o que o arturomp disse e em um esforço para torná-lo um pouco mais claro.
Supondo que você tenha 2000 e alguma longa história ..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
Você pode reduzir o que é mostrado com HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
Agora, não importa quantos comandos você digitar, apenas os últimos 5 serão gravados.
~$ 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 nosso primeiro comando ("ABC") não está no histórico, pois apenas os cinco últimos comandos foram gravados.
Agora, o histórico total é armazenado em um arquivo ( .bash_history
) e você pode alterar quanto tempo esse arquivo fica com o arquivo HISTFILESIZE
. Por exemplo, com a 2033
HISTFILESIZE
, no meu caso, eu teria isso:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD
HISTSIZE=-1
e HISTFILESIZE=-1
.
bash
página homem diz: Non-numeric values and numeric values less than zero inhibit truncation
mas então eu não tinha coragem de verificar se isso é verdade, porque eu não quero perder a minha história :-)
HISTSIZE='INFINITY'
e HISTFILESIZE='ANDBEYOND'
. Como eles não são numéricos, eles salvam tudo. Obrigado pela dica!