Quanto tempo dura o conteúdo do arquivo .bash_history?

6

Como posso modificar o conteúdo do meu arquivo bash_history ? Quais valores ou variáveis controlam quanto tempo dura o histórico? Há alguma outra coisa que eu possa mudar para fornecer um controle mais preciso da minha história BASH?

    
por nbro 21.10.2014 / 15:58

3 respostas

8

Existem duas variáveis que controlam o tamanho do histórico:

HISTFILESIZE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by removing the oldest entries. The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets the default value to the value of HISTSIZE after reading any startup files.

e

HISTSIZE The number of commands to remember in the command history (see HISTORY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.

Essas duas variáveis permitem controlar o comportamento do seu histórico. Basicamente, HISTSIZE é o número de comandos salvos durante sua sessão atual e HISTFILESIZE é o 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, porque HISTSIZE está definido como 10, history retorna uma lista de 10 comandos. No entanto, se você efetuar logout e, em seguida, efetuar login novamente, history retornará apenas 5 comandos porque HISTFILESIZE está definido como 5. Isso ocorre porque, depois de sair da sessão, suas HISTFILESIZE linhas de seu histórico são salvas em seu arquivo de histórico ( ~/.bash_history por padrão, mas controlado por HISTFILE ). Em outras palavras, os comandos são adicionados a HISTFILE até que atinjam $HISTFILESIZE linhas. Nesse ponto, cada linha subsequente adicionada significa que o primeiro comando do arquivo será removido.

Você pode definir os valores dessas variáveis em ~/.profile (ou ~/.bash_profile se esse arquivo existir). Não os defina em ~/.bashrc primeiro porque eles têm nenhum negócio sendo definido e, em segundo lugar, porque isso causaria você tem um comportamento diferente em log-in vs shells 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 alguns comandos comuns que raramente são de interesse. Por exemplo, você pode definir:

    export HISTIGNORE="pwd:df:du"
    

    Isso faria com que qualquer comando iniciado com pwd , df ou du fosse ignorado e não fosse salvo em seu histórico.

  • HISTCONTROL : Esse permite escolher como o histórico funciona. Pessoalmente, eu o defino como HISTCONTROL=ignoredups , o que faz com que ele salve os comandos duplicados apenas uma vez. Outras opções são ignorespace para ignorar os comandos que começam com whitespace e erasedups , o que faz com que todas as linhas anteriores que correspondem à linha atual sejam removidas da lista de histórico antes que essa linha seja salva. ignoreboth é uma forma abreviada de ignorar espaço e ignorados.

  • HISTTIMEFORMAT : isso permite que você defina o formato de hora do arquivo de histórico. Veja a resposta de Pandya ou leia man bash para detalhes.

Para mais ajustes, você tem:

  • A opção histappend bash. Isso pode ser definido executando shopt -s histappend ou adicionando esse comando ao seu ~/.bashrc . Se esta opção estiver definida

    the history list is appended to the file named by the value of the HISTFILE variable when the shell exits, rather than overwriting the file.

    Isso é muito útil, pois permite combinar as histórias de diferentes sessões (pense em diferentes terminais, por exemplo).

  • O comando history tem duas opções úteis:

    • history -a : faz com que o último comando seja gravado no      arquivo de histórico automaticamente

    • history -r : importa o arquivo de histórico para a sessão atual.

    Você poderia, por exemplo, adicionar estes dois comandos ao seu PROMPT_COMMAND (que é executado toda vez que o seu shell mostra o prompt, então sempre que você inicia um novo shell e após cada comando):

    export PROMPT_COMMAND='history -a;history -r;'
    

    Combinados, eles garantem que qualquer novo terminal que você abrir importará imediatamente o histórico de quaisquer outras sessões de shell. O resultado é um histórico comum em todas as sessões de terminais / shell.

por 21.10.2014 / 18:11
2

O tamanho padrão do arquivo de histórico é de 500 linhas. Uma vez que o arquivo .bash_history atinge 500 linhas, as primeiras entradas são eliminadas para dar espaço às linhas mais novas, 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.

    
por 21.10.2014 / 16:09
0

Leia man bash para mais detalhes sobre o histórico bash , como:

HISTCONTROL
       A  colon-separated  list of values controlling how commands are saved on the history list.
       If the list of values includes ignorespace, lines which begin with a space  character  are
       not  saved  in the history list.  A value of ignoredups causes lines matching the previous
       history entry to not be saved.  A value of ignoreboth is  shorthand  for  ignorespace  and
       ignoredups.   A  value of erasedups causes all previous lines matching the current line to
       be removed from the history list before that line is saved.  Any value not  in  the  above
       list  is  ignored.   If HISTCONTROL is unset, or does not include a valid value, all lines
       read by the shell parser are saved on the history list, subject to the  value  of  HISTIG‐
       NORE.   The  second  and subsequent lines of a multi-line compound command are not tested,
       and are added to the history regardless of the value of HISTCONTROL.
HISTFILE
       The name of the file in which command history is saved (see HISTORY below).   The  default
       value is ~/.bash_history.  If unset, the command history is not saved when a shell exits.
HISTFILESIZE
       The maximum number of lines contained in the history file.  When this variable is assigned
       a value, the history file is truncated, if necessary, to contain no more than that  number
       of  lines by removing the oldest entries.  The history file is also truncated to this size
       after writing it when a shell exits.  If the value is 0, the history file is truncated  to
       zero  size.  Non-numeric values and numeric values less than zero inhibit truncation.  The
       shell sets the default value to the value of HISTSIZE after reading any startup files.
HISTIGNORE
       A colon-separated list of patterns used to decide which command lines should be  saved  on
       the  history  list.   Each pattern is anchored at the beginning of the line and must match
       the complete line (no implicit '*' is appended).  Each pattern is tested against the  line
       after  the  checks  specified by HISTCONTROL are applied.  In addition to the normal shell
       pattern matching characters, '&' matches the previous history line.  '&'  may  be  escaped
       using  a  backslash;  the  backslash is removed before attempting a match.  The second and
       subsequent lines of a multi-line compound command are not tested, and  are  added  to  the
       history regardless of the value of HISTIGNORE.
HISTSIZE
       The  number  of  commands  to remember in the command history (see HISTORY below).  If the
       value is 0, commands are not saved in the history list.  Numeric  values  less  than  zero
       result  in  every  command being saved on the history list (there is no limit).  The shell
       sets the default value to 500 after reading any startup files.
HISTTIMEFORMAT
       If this variable is set and not null, its value is used as a format string for strftime(3)
       to  print  the  time  stamp  associated  with  each history entry displayed by the history
       builtin.  If this variable is set, time stamps are written to the history file so they may
       be  preserved  across  shell sessions.  This uses the history comment character to distin‐
       guish timestamps from other history lines.

Particularmente HISTFILESIZE e HISTSIZE você pode procurar e ajudar você.

    
por 21.10.2014 / 16:09