Histórico de comandos do bash

Compartilhe:

notebook aberto e exibindo na tela o Histórico de comandos do bash

Ao usar a interface de linha de comando no linux é possível re-executar comandos que foram digitados anteriormente usando o histórico de comandos do bash.

Esse recurso é um aliado para poupar tempo, pois com apenas alguns atalhos, você executa comandos em vez de digitar novamente linhas de comandos longas, agilizando seu fluxo de trabalho no terminal.

A seguir você vai aprender como configurar, navegar, apagar e executar comandos linux registrados no histórico.

Como o bash salva e restaura o histórico de comandos ?

Quando o bash é iniciado, ele restaura o histórico de comandos armazenado no arquivo definido na variável HISTFILE. Esse arquivo é truncado, se necessário, para conter o número máximo de entradas configuradas pelo valor da variável HISTFILESIZE.

Na sessão atual, para salvar imediatamente no arquivo de histórico os comandos digitados e que estão no histórico da memória RAM, execute o comando:

Caso não execute o comando “history -a”, os comandos do buffer da RAM somente serão salvos no arquivo de histórico quando a sessão for encerrada.

Como configurar o histórico de comandos do bash ?

O shell bash usa variáveis para configurar o histórico de comandos, são variáveis do próprio bash. A seguir tem a explicação das principais:

  • HISTFILE: Recebe como valor a localização completa do arquivo onde o histórico será salvo, ao encerrar a sessão. Embora o padrão seja “~/.bash_history”, você pode alterá-lo se assim precisar.
  • HISTSIZE: Define o número máximo de comandos que o Bash manterá no buffer da memória (RAM) durante a sessão atual. O valor padrão é 500 (500 comandos).
  • HISTFILESIZE: Determina quantos comandos (um por linha) podem ser armazenados permanentemente no arquivo definido na variável HISTFILE. Quando o limite é atingido, as entradas mais antigas são descartadas.
  • HISTCONTROL: Está variável contém uma lista de valores separados por “:” (dois pontos) controlando como os comandos são salvos na lista de histórico.

Se a lista de valores incluir “ignorespace” os comandos que começam com um espaço não são salvos no histórico.

O valor de “ignoredups” não salva linha de comando duplicada executada em sequência. Um valor de “ignoreboth” é uma abreviação de “ignorespace” e “ignoredups”.

Se a variável HISTCONTROL não estiver definida, ou não incluir um valor válido, o bash salva todas as linhas lidas na lista de histórico, sujeitas ao valor de HISTIGNORE.

  • HISTIGNORE: Uma lista de padrões separados por “:” (dois pontos) usada para decidir quais comandos não devem ser salvos no histórico. Se uma linha de comando corresponder a um dos padrões ela não será gravada no histórico.

A seguir um exemplo de configuração para o histórico de comandos:

A configuração anterior, limita em 5.000 a quantidade de comandos armazenados no histórico da memória RAM e em 3.000 (um por linha) o número máximo de comandos gravados no arquivo de histórico.

Também configura o bash para não salvar no histórico os comandos: pwd, exit, history e os comandos ls e mysql seguidos de um argumento.

A imagem acima mostra na prática, as variáveis sendo declaradas e o history exibe o histórico de comandos do bash da memória, e os comandos: pwd, history e ls não são armazenados no histórico como configurado em HISTIGNORE.

Caso entenda ser necessário, configure a variável HISTCONTROL com o valor ignoreboth.

Como já explicado, o valor ignoreboth atribuído a variável HISTCONTROL ativa simultaneamente o ignoredups e o ignorespace (ignorar duplicatas e comandos iniciados com espaço).

Navegando no histórico de comandos

É possível navegar no histórico de comandos do bash a procura de algum comando digitado anteriormente, podendo recuperar qualquer comando em frações de segundos.

A navegação pode ser feita usando atalhos, reduzindo a necessidade de digitação repetitiva. Confira abaixo os principais atalhos para navegar:

AtalhosDescrição
O caractere (Seta para cima) navega no histórico de comandos da memória, e a cada clique é exibido na tela um comando, na ordem do mais recente para mais antigo.
Após usar o caractere ▲ (seta para cima), você pode usar o caractere ▼ (seta para baixo) para exibir na tela do comando mais antigo para o mais recente.
Ctrl + RBusca reversa, Após usar a combinação de teclas o prompt é alterado, e o que for digitado vai ser usado para pesquisa no histórico de comandos a partir do comando mais antigo para o mais recente (pesquisa reversa).
Ctrl + GSair da busca reversa sem executar nenhum comando.

Use o comando history para visualizar todo o histórico de comandos do bash que está no buffer da RAM.

Se precisar limitar a quantidade de comandos do histórico que aparece na tela digite history e passe como argumento um número.

O comando anterior exibe os últimos 10 comandos registrados no histórico, na ordem do mais recente para ou mais antigo.

Executando comandos do histórico

Você aprendeu na seção anterior como navegar no histórico de comandos do bash. Mas como fazer para executar um dos comandos a partir do histórico ?

Ao usar o caractere seta para cima ou seta para baixo, quando o comando aparecer na tela ao lado do prompt pressione a tecla ENTER para executar o comando.

mostrando a navegação no histórico de comandos do linux

Também é possível usar o caractere “!” (ponto de exclamação) como atalho para re-executar comandos, veja a explicação na tabela abaixo.

AtalhosDescrição
!!Executa novamente o último comando digitado.
!nExecuta o comando correspondente ao número “n” do histórico. Onde “n” é a posição do comando no histórico.
!stringExecuta o último comando que começa com a “string”. A “string” é buscada a partir do início do comando. A busca é feita no histórico do comando mais recente para mais antigo.

Por exemplo, para executar o comando da posição 402 do histórico de comandos, digite !402 e em seguida pressione ENTER.

A imagem mostra que !402 executou o comando apt update.

Caso precise re-executar o último comando que tem a palavra find no início, então execute:

Apagando histórico de comandos do linux

Muitas vezes, após digitar comandos que contêm informações sensíveis, é necessário realizar uma limpeza para garantir a segurança dos dados.

No entanto, é fundamental entender que o histórico de comandos do bash reside em dois lugares distintos: na memória RAM (durante a sessão ativa) e no arquivo definido na variável HISTFILE (geralmente o ~/.bash_history).

Para remover os comandos da sessão atual que ainda não foram gravados no arquivo, utilize o comando:

A opção -c (clear) limpa o buffer da memória RAM imediatamente.

No entanto, executar apenas history -c não remove os comandos que já foram salvos no arquivo de histórico. Para remover o histórico do arquivo, execute o comando a seguir:

Explicação do comando: O shell expande o valor da variável $HISTFILE, que vai ser a localização do arquivo de histórico e o redirecionamento usando o caractere “>” (maior que) apaga o conteúdo do arquivo.

Para realizar uma limpeza completa, apagando o histórico da memória RAM e do arquivo, você pode executar essa linha de comando:

O primeiro comando limpa o histórico da memória e o segundo escreve o estado atual da memória (que estará vazio pelo history -c) sobre o arquivo de histórico, efetivamente apagando-o.

Conclusão

Saber usar o histórico de comandos no linux ajuda a ter mais agilidade ao usar a linha de comando e também segurança, já que é possível inibir que alguns comandos sejam registrados.

Para iniciantes, a dica de ouro é praticar os atalhos e os comandos que aprendeu, e também testar as variáveis com valores diferentes para configurar o histórico, se possível defina as variáveis no arquivo “~/.bashrc” .

Também é recomendado a leitura do manual do bash para obter mais informações sobre o histórico de comandos.

Ficou com alguma dúvida ou tem uma sugestão de atalho ? Deixe seu comentário abaixo para continuarmos essa conversa técnica!

Navegue por tópicos:

Foto de Edson Oliveira
Edson Oliveira

Especialista em Linux, trabalhando com TI tem experiência no gerenciamento, solução de problemas e suporte de servidores linux em ambientes corporativos.

Professor de cursos voltados a linux, tecnologias open source e certificações LPI. Possui as certificações LPIC-1, LPIC-2 e LPIC-3 (Mixed Environment).

Navegue por tópicos:

Você também pode gostar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Valorizamos sua privacidade

Utilizamos cookies para aprimorar sua experiência de navegação, exibir anúncios ou conteúdo personalizado e analisar nosso tráfego. Ao clicar no botão “Aceitar todos”, você concorda com nosso uso de cookies.

Para mais informações leia nossa Política de Privacidade.