Existem duas variáveis que controlam o tamanho do histórico:
HISTFILESIZE O número máximo de linhas contidas no arquivo de histórico. Quando essa variável recebe um valor, o arquivo de histórico é truncado, se necessário, para conter não mais que esse número de linhas, removendo as entradas mais antigas. O arquivo de histórico também é truncado para esse tamanho depois de gravado quando um shell sai. Se o valor for 0, o arquivo de histórico será truncado para o tamanho zero. Valores não numéricos e valores numéricos menores que zero inibem o truncamento. O shell define o valor padrão como HISTSIZE depois de ler qualquer arquivo de inicialização.
e
HISTSIZE O número de comandos a serem lembrados no histórico de comandos (consulte HISTORY abaixo). Se o valor for 0, os comandos não serão salvos na lista de histórico. Valores numéricos menores que zero resultam em todos os comandos salvos na lista de histórico (não há limite). O shell define o valor padrão para 500 depois de ler qualquer arquivo de inicialização.
Essas duas variáveis permitem controlar o comportamento do seu histórico. Basicamente, HISTSIZEé o número de comandos salvos durante a sessão atual e HISTFILESIZEo número de comandos que serão lembrados nas sessões. Então, por exemplo:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
No exemplo acima, como HISTSIZEé definido como 10, historyretorna uma lista de 10 comandos. No entanto, se você efetuar logoff e logon novamente, historyretornará apenas 5 comandos porque HISTFILESIZEestá definido como 5. Isso ocorre porque, quando você sai da sessão, suas HISTFILESIZElinhas do seu histórico são salvas no seu arquivo de histórico ( ~/.bash_historypor padrão, mas controlado por HISTFILE) Em outras palavras, os comandos são adicionados HISTFILEaté que cheguem $HISTFILESIZEàs linhas em que ponto, cada linha subsequente adicionada significa que o primeiro comando do arquivo será removido.
Você pode definir os valores dessas variáveis no seu ~/.profile(ou ~/.bash_profilese esse arquivo existir). Não defina-os ~/.bashrcprimeiro, porque eles não têm negócios definidos e, em segundo lugar, porque isso faria com que você tivesse um comportamento diferente nos shells de login versus não-login, o que pode levar a outros problemas .
Outras variáveis úteis que permitem ajustar o comportamento do seu histórico são:
HISTIGNORE: Isso permite que você ignore determinados comandos comuns que raramente são de interesse. Por exemplo, você pode definir:
export HISTIGNORE="pwd:df:du"
Isso faria com que qualquer comando que comece com pwd, dfou duseja ignorado e não seja salvo no seu histórico.
HISTCONTROL: Este permite que você escolha como o histórico funciona. Pessoalmente, eu o defino para HISTCONTROL=ignoredupsque ele salve comandos duplicados apenas uma vez. Outras opções são ignorespaceignorar comandos iniciados com espaço em branco e erasedupsque fazem com que todas as linhas anteriores correspondentes à linha atual sejam removidas da lista de histórico antes que a linha seja salva. ignorebothé uma abreviação de ignorespace e ignoredups.
HISTTIMEFORMAT: Permite definir o formato da hora do arquivo de histórico. Veja a resposta de Pandya ou leia man bashpara detalhes.
Para um ajuste fino adicional, você tem:
A histappendopção do bash. Isso pode ser definido executando shopt -s histappendou adicionando esse comando ao seu ~/.bashrc. Se esta opção estiver configurada
a lista de histórico é anexada ao arquivo nomeado pelo valor da variável HISTFILE quando o shell sai, em vez de sobrescrever o arquivo.
Isso é muito útil, pois permite combinar o histórico de diferentes sessões (pense em diferentes terminais, por exemplo).
O historycomando possui duas opções úteis:
Você pode, por exemplo, adicionar esses dois comandos ao seu PROMPT_COMMAND(que é executado toda vez que seu shell mostra o prompt, portanto, sempre que você inicia um novo shell e depois de cada comando, é executado):
export PROMPT_COMMAND='history -a;history -r;'
Combinados, eles garantem que qualquer novo terminal aberto importe imediatamente o histórico de quaisquer outras sessões do shell. O resultado é um histórico comum em todos os terminais / sessões de shell.