O Shell BASH (Bourne Again SHell) é o shell que é usado como padrão em praticamente todos os sistemas operacionais baseados em Linux. Todos os comandos que escrevemos no terminal são interpretados pelo bash e são armazenados em um histórico de comandos no linux. O Objetivo desse artigo é vemos onde o histórico do shell é salvo e como gerenciá-lo usando o comando interno do bash chamado history e algumas variáveis.
Onde e como é salvo o histórico de comandos no linux usando o Shell BASH
Quando acessamos a linha de comando no linux usando um emulador de terminal ou quando estamos trabalhando em um TTY(Terminal Virtual), e digitamos um comando, esse comando é salvo no buffer(espaço da memoria) e mantido no buffer, somente após a sessão do shell ser fechada a lista de comandos digitados no shell Bash é gravada no chamado “arquivo de histórico”, que por padrão é o valor da variável HISTFILE, na maioria das distribuições linux a variável HISTFILE
, os comandos são armazenados um por linha no arquivo ~/.bash_history. recebe como valor o arquivo
~/.bash_history
Lembre-se: O caractere “~” é substituído pela localização do diretório home do usuário, por exemplo, se o diretório home da conta de usuário dlncloud é /home/dlncloud, o caractere “~” é substituído por /home/dlncloud, asism a localização do arquivo ~/.bash_history da conta dlncloud é /home/dlncloud/.bash_history nesse exemplo.
É importante mencionar que se o valor da variável HISTFILE não estiver definido, o histórico de comandos que está armazenado no buffer não será gravado em nenhum arquivo.
Como visualizar e usar o histórico atual do shell Bash
Quando queremos ver os ultimos comandos digitados ou executa-los novamente, pressionamos a tecla seta pra cima ↑, assim vamos navegando no histórico de comandos. para voltar usamos a tecla de seta para baixo ↓ para navegar para frente no histórico do shell.
Para visualizar o conteúdo atual do histórico do shell, podemos usar o comando history
, sem passar nenhum argumento ou opção. Cada linha na saída produzida por ela é prefixada por um número:

Para executar um comando especifico do histórico de comandos, usamos o caractere ! ( Ponto de Exclamação ) seguido do número que corresponde o comando no histórico de comandos, por exemplo, para executar o comando 74 do histórico, que na imagem é o comando “man rsyslogd”, o comando ficaria:
!74
Para executar o último comando do histórico de comandos, digitamos duas vezes o caractere ! (Ponto de Exclamação):
!!
Como limpar o histórico do shell Bash
O comando history
não é usado apenas para exibir o histórico atual do shell, mas também para fazer outras operações. Para limpar todo o histórico atual do shell Bash, por exemplo, basta invocá-lo com a opção -c
.
history -c
Também podemos deletar um comando específico no histórico, usando a opção -d
, seguido do número da linha que corresponde ao comando que deseja remover do histórico. Exemplo prático: queremos remover a linha 1
do histórico atual na memória. executamos o comando o history
da seguinte forma:
history -d 1
Forçando o histórico do shell bash a ser gravado no arquivo de histórico
Como mencionado anteriormente, o histórico do shell é gravado no arquivo de histórico apenas quando a sessão do shell é fechada.
E se quisermos forçar o histórico da memória a ser gravado em algum momento específico ? A resposta é: Podemos usar o comando history para realizar tal tarefa. Executando o comando history com a opção -w, que não leva argumento:
history -w
Controlando e modificando o comportamento do histórico
O Histórico do shell pode ser modificado e controlado definindo o valor de algumas variáveis de ambiente. É o que iremos ve a seguir com alguns exemplos.
Variável HISTIGNORE
A variável HISTIGNORE é usada para especificar quais comandos devem ser excluídos do histórico do shell. Vamos ver um exemplo: Não queremos gravar no histórico do shell os comandos “ls” e “history“. O valor da variável HISTIGNORE deve ser:
HISTIGNORE="ls:history"

Como pode ver na imagem acima, depois que alteramos o valor da variável HISTIGNORE, apenas o comando “echo” e a declaração da variável com valor alterado foram gravados no histórico depois executamos os comandos ls e history.
Existe um detalhe importante: apenas o comando exato que especificamos como valor na variável HISTIGNORE será excluído. Por exemplo, acima configuramos o comando ls para ser excluído, porém se executarmos ls -l, o comando será incluído no histórico do shell:

Como podemos evitar isso ? Podemos simplesmente usar o caractere asterisco * (glob) como parte do comando especificado: ele corresponde a todos os caracteres. Alterando o valor da variável HISTIGNORE da seguinte forma:
HISTIGNORE="ls:ls *:history"

Variável HISTTIMEFORMAT
A variável HISTTIMEFORMAT pode ser usada para adicionar um prefixo para cada comando no histórico do shell com a data e hora que o comando foi executado. O formato da data e hora é determinado pelo valor atribuído à variável HISTTIMEFORMAT. Alguns valores podem ser usados, veja na tabela a seguir:
Valor | Significado |
%d | Dia |
%m | Mês |
%Y | Ano |
%H | Hora |
%M | Minuto |
%S | Segundo |
Vamos ver um exemplo. Digamos que queremos que cada comando no histórico seja prefixado pela data em que foi executado e a hora seguido do minuto, usando o formado DD/MM/YYYY ( Dia/Mês/Ano ) . O valor que atribuiríamos à variável é:
HISTTIMEFORMAT="%d/%m/%Y %H:%M"

Variável HISTSIZE
A variável HISTSIZE controla quantos comandos são mantidos no histórico do Shell Bash. Se o valor for 0, os comandos não serão salvos na lista de histórico. O shell bash define o valor padrão para 500 depois de ler qualquer arquivo de inicialização.
echo $HISTSIZE
500
Podemos aumentar ou diminuir este valor de acordo com às nossas necessidades. Se excedermos o valor especificado, os comandos mais antigos serão excluídos do início da lista no histórico, veja um exemplo para armazenar somente os ultimos 3 comandos no histórico:
HISTSIZE=3

Como pode ver na imagem acima, o primeiro comando que executamos, que foi a atribuição da variável, é excluído, o comando “cat /proc/cmdline” também é excluído do histórico assim que executamos o quinto comando. Apenas três comandos são mantidos. Este é apenas um simples exemplo, mas espero que dê uma ideia.
Esperamos ter ajudado a esclarecer dúvidas e que o conteúdo seja instrutivo.