Como posso modificar o conteúdo do meu bash_history
arquivo? Quais valores ou variáveis controlam quanto tempo dura o histórico? Há outras coisas que eu possa mudar para fornecer um controle mais refinado do meu histórico do BASH?
11
HISTSIZE
eHISTFILESIZE
são as únicas superfícies de controle que você precisa controlar quanto histórico é mantido.Respostas:
Existem duas variáveis que controlam o tamanho do histórico:
e
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 eHISTFILESIZE
o número de comandos que serão lembrados nas sessões. Então, por exemplo:No exemplo acima, como
HISTSIZE
é definido como 10,history
retorna uma lista de 10 comandos. No entanto, se você efetuar logoff e logon novamente,history
retornará apenas 5 comandos porqueHISTFILESIZE
está definido como 5. Isso ocorre porque, quando você sai da sessão, suasHISTFILESIZE
linhas do seu histórico são salvas no seu arquivo de histórico (~/.bash_history
por padrão, mas controlado porHISTFILE
) Em outras palavras, os comandos são adicionadosHISTFILE
até 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_profile
se esse arquivo existir). Não defina-os~/.bashrc
primeiro, 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:Isso faria com que qualquer comando que comece com
pwd
,df
oudu
seja 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 paraHISTCONTROL=ignoredups
que ele salve comandos duplicados apenas uma vez. Outras opções sãoignorespace
ignorar comandos iniciados com espaço em branco eerasedups
que 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 leiaman bash
para detalhes.Para um ajuste fino adicional, você tem:
A
histappend
opção do bash. Isso pode ser definido executandoshopt -s histappend
ou adicionando esse comando ao seu~/.bashrc
. Se esta opção estiver configuradaIsso é muito útil, pois permite combinar o histórico de diferentes sessões (pense em diferentes terminais, por exemplo).
O
history
comando possui duas opções úteis:history -a
: faz com que o último comando seja gravado no arquivo de histórico automaticamentehistory -r
: importa o arquivo de histórico para a sessão atual.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):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.
fonte
O tamanho padrão do arquivo de histórico é de 500 linhas. Quando o arquivo .bash_history atinge 500 linhas, as entradas iniciais são eliminadas para abrir espaço para as linhas mais recentes, como no FIFO. Você pode alterar isso alterando o valor da variável
HISTFILESIZE
que, por padrão, tem o valor 500.Colocar um
HISTFILESIZE=10000
em seu .bashrc aumentará o número de linhas que o arquivo de histórico pode conter para 10000, aumentando assim a vida útil de seu conteúdo.fonte
HISTSIZE
o limite, considere mudarHISTFILE
também. Se você executarbash --norc
HISTSIZE
, voltará ao valor padrão, truncando suaHISTFILE
saída./etc/bash.bashrc
define umHISTFILESIZE
(ou talvezHISTSIZE
; eu não verifiquei qual), o Bash parece truncar.bash_history
no ponto em que lê/etc/bash.bashrc
(ou pelo menos em algum momento antes de seu novo limite ser definido em seus próprios arquivos de inicialização do Bash). Para evitar isso, novamente, defina o seu próprioHISTFILE
para que seu histórico real chegue lá e não no.bash_history
arquivo que o Bash está truncando.export
, como isso iria torná-lo visível para qualquer criança conchas, que poderia, então, olhar para truncar-lo em vez de.bash_history
!)Leia
man bash
para obter mais detalhes sobre o histórico do bash, como:Particularmente
HISTFILESIZE
eHISTSIZE
que você esteja procurando e o ajude.fonte