Ao lidar com o histórico do Bash, temos dois tipos:
- uma lista de histórico na memória
- o arquivo
.bash_history
no disco
Quando o Bash iniciar (assumindo uma configuração padrão), ele carregará o conteúdo do seu arquivo .bash_history
na lista de histórico na memória (depois de truncá-lo para o tamanho configurado, se necessário).
Em seguida, você digita seus comandos, que são anexados à lista de histórico apenas na memória. O arquivo de histórico no seu disco não é tocado.
Sair da sessão Bash regularmente (sem forçá-la a matar ou causar uma falha de alguma forma) por padrão trunca sua lista de histórico na memória para ajustar-se ao tamanho máximo configurado e acrescenta apenas novas entradas da sessão Bash atual (porque A opção histappend
está habilitada) para o seu arquivo de histórico no disco, sem excluir as entradas removidas ou adicionar novamente o conteúdo das sessões anteriores.
Quando você executar history -c
, limpe a lista completa do histórico na memória, mas isso não afeta o arquivo de histórico no disco.
A execução de history -w
grava sua lista de histórico atual na memória para o arquivo de histórico no disco. Ele não acrescenta novas entradas, mas sobrescreve o arquivo completo. Portanto, executar history -c && history -w
efetivamente limpa o arquivo de histórico também.
Limpar manualmente seu arquivo de histórico editando-o a partir de uma sessão de Bash em execução não produz o efeito esperado nem exclui permanentemente o histórico inteiro até o momento, porque a lista de histórico na memória que ainda contém todas as entradas antigas do arquivo de histórico permanecerá intacta .
Ao sair da sua sessão de Bash, o arquivo de histórico será reescrito com os dados da lista de histórico. No entanto, como por padrão a opção histappend
está habilitada, somente novas entradas da sessão atual de Bash serão gravadas no arquivo, os dados de histórico mais antigos serão descartados. Você teria que executar history -w
para salvar a lista completa do histórico em disco.
O que exatamente acontece quando um shell Bash começa e sai pode ser lido em man bash
:
HISTORY
When the -o history option to the set builtin is enabled, the shell
provides access to the command history, the list of commands previously
typed. The value of the HISTSIZE variable is used as the number of
commands to save in a history list. The text of the last HISTSIZE com‐
mands (default 500) is saved. The shell stores each command in the
history list prior to parameter and variable expansion (see EXPANSION
above) but after history expansion is performed, subject to the values
of the shell variables HISTIGNORE and HISTCONTROL.
On startup, the history is initialized from the file named by the vari‐
able HISTFILE (default ~/.bash_history). The file named by the value
of HISTFILE is truncated, if necessary, to contain no more than the
number of lines specified by the value of HISTFILESIZE. If HISTFILE‐
SIZE is unset, or set to null, a non-numeric value, or a numeric value
less than zero, the history file is not truncated. When the history
file is read, lines beginning with the history comment character fol‐
lowed immediately by a digit are interpreted as timestamps for the pre‐
ceding history line. These timestamps are optionally displayed depend‐
ing on the value of the HISTTIMEFORMAT variable. When a shell with
history enabled exits, the last $HISTSIZE lines are copied from the
history list to $HISTFILE. If the histappend shell option is enabled
(see the description of shopt under SHELL BUILTIN COMMANDS below), the
lines are appended to the history file, otherwise the history file is
overwritten. If HISTFILE is unset, or if the history file is
unwritable, the history is not saved. If the HISTTIMEFORMAT variable
is set, time stamps are written to the history file, marked with the
history comment character, so they may be preserved across shell ses‐
sions. This uses the history comment character to distinguish time‐
stamps from other history lines. After saving the history, the history
file is truncated to contain no more than HISTFILESIZE lines. If HIST‐
FILESIZE is unset, or set to null, a non-numeric value, or a numeric
value less than zero, the history file is not truncated.