Dicas do Histórico do bash - Aproveitando ao Máximo o Histórico de Comandos

Dicas do Histórico do bash - Aproveitando ao Máximo o Histórico de Comandos

O Que Você Vai Aprender

  • Listar e reutilizar comandos anteriores com history
  • Buscar no histórico instantaneamente com Ctrl+R
  • Usar os atalhos !! e !$ para evitar redigitação
  • Personalizar o comportamento do histórico com HISTSIZE e HISTCONTROL
Lina: Linny-senpai, acabei de digitar um comando muito longo e agora preciso digitar tudo de novo?
Veterano Linny: Isso parece doloroso! Na verdade, o bash mantém um histórico completo dos seus comandos. Quando você aprender a usá-lo, vai economizar muito tempo.

1. O Comando history

Conclusão: history lista comandos anteriores com números que você pode filtrar e reexecutar.

Lina: Como eu vejo meu histórico de comandos?
Veterano Linny: Basta digitar history e o bash mostra todos os seus comandos anteriores com números.
$ history
  498  ls -la /var/log
  499  sudo apt update
  500  grep -r "error" /var/log/syslog
  501  cd /home/ubuntu
  502  history

Cada linha tem um número de histórico à esquerda. Você pode usar esse número para reexecutar um comando específico depois.

Filtrar com grep

$ history | grep apt
  499  sudo apt update
  485  sudo apt install vim
  470  apt search nginx

Encaminhe history para grep para encontrar o comando que você procura sem percorrer tudo.

Mostrar apenas as últimas N entradas

$ history 10

Passe um número para ver apenas os N comandos mais recentes.

2. Teclas de Seta

Conclusão: Pressione a seta para cima para voltar pelos comandos anteriores um por um.

Lina: Qual é a forma mais simples de recuperar um comando anterior?
Veterano Linny: Basta pressionar a seta para cima. Cada pressionamento leva você um comando mais para trás.
Tecla Ação
Comando anterior
Próximo comando (avançar no histórico)
Ctrl+A Mover cursor para o início da linha
Ctrl+E Mover cursor para o final da linha

Se você foi longe demais para trás, pressione para avançar novamente. Pressione Ctrl+C para cancelar sem executar nada.

3. Ctrl+R: Busca Reversa Incremental

Conclusão: Ctrl+R busca no seu histórico em tempo real conforme você digita uma palavra-chave.

Lina: Mas e se o comando que eu quero está centenas de entradas atrás? Pressionar ↑ tantas vezes parece terrível.
Veterano Linny: É aí que o Ctrl+R entra em ação. Basta digitar uma palavra-chave e o bash encontra comandos correspondentes instantaneamente.

Pressione Ctrl+R e o promptUm símbolo (como $ ou #) exibido quando o shell está esperando sua entrada. muda para:

(reverse-i-search)`':

Comece a digitar e o bash mostra comandos correspondentes em tempo real:

(reverse-i-search)`apt': sudo apt update

Referência de teclas do Ctrl+R

Tecla Ação
Ctrl+R Iniciar busca reversa / pular para resultado mais antigo
Ctrl+S Pular para resultado mais recente (pode precisar ativar)
Enter Executar o comando exibido
Mudar para modo de edição em vez de executar
Ctrl+G Cancelar busca e voltar ao prompt vazio

Ctrl+S é frequentemente interceptado pelo controle de fluxo do terminalUm programa interativo que interpreta os comandos digitados e os executa. (XON/XOFF). Se não responder, adicione stty -ixon ao seu .bashrc e reinicie o shell.

4. Expansão de Histórico: !!, !$ e Mais

Conclusão: !!, !$, !^ e !n reexecutam partes de um comando anterior.

Lina: Eu sempre vejo !! em comandos online, mas não entendo o que faz.
Veterano Linny: !! significa "o último comando inteiro que eu executei." O caso de uso clássico é corrigir um sudo esquecido.

!! — Repetir o último comando

$ apt update
E: Could not open lock file /var/lib/dpkg/lock-frontend...

$ sudo !!
sudo apt update

Digitar sudo !! automaticamente se torna sudo apt update e o executa.

O bash sempre mostra o comando expandido antes de executá-lo, para que você veja exatamente no que !! se transformou.

!$ — Último argumento do comando anterior

$ mkdir -p /var/log/myapp
$ cd !$
cd /var/log/myapp

!$ se expande para a última palavra do comando anterior. Ótimo para evitar reescrever caminhos longos.

!^ — Primeiro argumento do comando anterior

$ diff file1.txt file2.txt
$ vim !^
vim file1.txt

!^ se expande para o primeiro argumento do comando anterior.

!n — Reexecutar pelo número do histórico

$ history | grep grep
  500  grep -r "error" /var/log/syslog

$ !500
grep -r "error" /var/log/syslog

Use ! seguido de um número do histórico para reexecutar aquele comando específico.

A expansão de histórico executa imediatamente sem etapa de confirmação. Tenha especial cuidado com comandos destrutivos -- sempre verifique no que !! vai se expandir antes de pressionar Enter.

5. HISTSIZE e HISTFILESIZE

Conclusão: Defina HISTSIZE e HISTFILESIZE no .bashrc para manter mais histórico.

Lina: Quantos comandos o bash lembra por padrão?
Veterano Linny: Geralmente cerca de 1000, mas você pode aumentar esse limite no seu .bashrc. Para uma máquina que você usa intensamente, 10000 ou mais é uma escolha razoável.

Adicione estas linhas ao ~/.bashrc:

HISTSIZE=10000        # comandos mantidos na memoria durante a sessao
HISTFILESIZE=20000    # linhas salvas em ~/.bash_history ao sair

Recarregue para aplicar:

$ source ~/.bashrc

Sobre o ~/.bash_history

Quando você sai do bash, os comandos da sessão são escritos em ~/.bash_history. HISTFILESIZE limita quantas linhas esse arquivo pode conter.

$ wc -l ~/.bash_history
1247 /home/ubuntu/.bash_history

6. HISTCONTROL — Remover Ruído do Histórico

Conclusão: HISTCONTROL=ignoreboth remove duplicatas e comandos prefixados com espaço.

Lina: Eu sempre acabo com o mesmo comando repetido dez vezes seguidas no meu histórico. Existe uma forma de corrigir isso?
Veterano Linny: Sim -- defina HISTCONTROL=ignoreboth e as duplicatas desaparecem.
# Adicione ao ~/.bashrc
HISTCONTROL=ignoreboth
Valor Efeito
ignorespace Ignorar comandos que começam com espaço
ignoredups Ignorar entradas duplicadas consecutivas
ignoreboth Ambos acima (escolha mais comum)
erasedups Remover todas as duplicatas de todo o histórico

Manter comandos sensíveis fora do histórico

$  secret-command --password=mypassword

Inicie um comando com um espaço inicial e (com ignorespace ativo) o bash não o registrará. Útil quando você precisa digitar uma credencial na linha de comando.

7. HISTTIMEFORMAT — Adicionar Carimbos de Data/Hora

Conclusão: Defina HISTTIMEFORMAT para adicionar um carimbo de data/hora a cada entrada do histórico.

Lina: Existe uma forma de ver quando eu executei cada comando? Isso seria útil para investigações de incidentes.
Veterano Linny: Sim, defina HISTTIMEFORMAT e cada entrada do histórico recebe um carimbo de data/hora.
# Adicione ao ~/.bashrc
HISTTIMEFORMAT="%Y-%m-%d %T "
$ history 5
  998  2026-06-01 10:23:45 ls -la
  999  2026-06-01 10:24:12 cd /var/log
 1000  2026-06-01 10:25:30 sudo apt update
 1001  2026-06-01 10:26:01 tail -f /var/log/syslog
 1002  2026-06-01 10:28:44 history 5

Carimbos de data/hora ajudam a responder "quando exatamente eu executei aquilo?" durante revisões pós-incidente ou trilhas de auditoria.

Próximas Leituras