Dicas do Historico do bash - Aproveitando ao Maximo o Historico de Comandos

Dicas do Historico do bash - Aproveitando ao Maximo o Historico de Comandos

O Que Voce Vai Aprender

  • Listar e reutilizar comandos anteriores com history
  • Buscar no historico instantaneamente com Ctrl+R
  • Usar os atalhos !! e !$ para evitar redigitacao
  • Personalizar o comportamento do historico 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 mantem um historico completo dos seus comandos. Quando voce aprender a usa-lo, vai economizar muito tempo.

1. O Comando history

Conclusao: history lista comandos anteriores com numeros que voce pode filtrar e reexecutar.

Lina: Como eu vejo meu historico de comandos?
Veterano Linny: Basta digitar history e o bash mostra todos os seus comandos anteriores com numeros.
$ 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 numero de historico a esquerda. Voce pode usar esse numero para reexecutar um comando especifico 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 voce procura sem percorrer tudo.

Mostrar apenas as ultimas N entradas

$ history 10

Passe um numero para ver apenas os N comandos mais recentes.

2. Teclas de Seta

Conclusao: Pressione a seta para cima para voltar pelos comandos anteriores um por um.

Lina: Qual e a forma mais simples de recuperar um comando anterior?
Veterano Linny: Basta pressionar a seta para cima. Cada pressionamento leva voce um comando mais para tras.
Tecla Acao
Comando anterior
Proximo comando (avancar no historico)
Ctrl+A Mover cursor para o inicio da linha
Ctrl+E Mover cursor para o final da linha

Se voce foi longe demais para tras, pressione para avancar novamente. Pressione Ctrl+C para cancelar sem executar nada.

3. Ctrl+R: Busca Reversa Incremental

Conclusao: Ctrl+R busca no seu historico em tempo real conforme voce digita uma palavra-chave.

Lina: Mas e se o comando que eu quero esta centenas de entradas atras? Pressionar ↑ tantas vezes parece terrivel.
Veterano Linny: E ai que o Ctrl+R entra em acao. Basta digitar uma palavra-chave e o bash encontra comandos correspondentes instantaneamente.

Pressione Ctrl+R e o prompt muda para:

(reverse-i-search)`':

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

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

Referencia de teclas do Ctrl+R

Tecla Acao
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 edicao em vez de executar
Ctrl+G Cancelar busca e voltar ao prompt vazio

Ctrl+S e frequentemente interceptado pelo controle de fluxo do terminal (XON/XOFF). Se nao responder, adicione stty -ixon ao seu .bashrc e reinicie o shell.

4. Expansao de Historico: !!, !$ e Mais

Conclusao: !!, !$, !^ e !n reexecutam partes de um comando anterior.

Lina: Eu sempre vejo !! em comandos online, mas nao entendo o que faz.
Veterano Linny: !! significa "o ultimo comando inteiro que eu executei." O caso de uso classico e corrigir um sudo esquecido.

!! — Repetir o ultimo 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 executa-lo, para que voce veja exatamente no que !! se transformou.

!$ — Ultimo argumento do comando anterior

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

!$ se expande para a ultima palavra do comando anterior. Otimo 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 numero do historico

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

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

Use ! seguido de um numero do historico para reexecutar aquele comando especifico.

A expansao de historico executa imediatamente sem etapa de confirmacao. Tenha especial cuidado com comandos destrutivos -- sempre verifique no que !! vai se expandir antes de pressionar Enter.

5. HISTSIZE e HISTFILESIZE

Conclusao: Defina HISTSIZE e HISTFILESIZE no .bashrc para manter mais historico.

Lina: Quantos comandos o bash lembra por padrao?
Veterano Linny: Geralmente cerca de 1000, mas voce pode aumentar esse limite no seu .bashrc. Para uma maquina que voce usa intensamente, 10000 ou mais e uma escolha razoavel.

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 voce sai do bash, os comandos da sessao sao escritos em ~/.bash_history. HISTFILESIZE limita quantas linhas esse arquivo pode conter.

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

6. HISTCONTROL — Remover Ruido do Historico

Conclusao: HISTCONTROL=ignoreboth remove duplicatas e comandos prefixados com espaco.

Lina: Eu sempre acabo com o mesmo comando repetido dez vezes seguidas no meu historico. 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 comecam com espaco
ignoredups Ignorar entradas duplicadas consecutivas
ignoreboth Ambos acima (escolha mais comum)
erasedups Remover todas as duplicatas de todo o historico

Manter comandos sensiveis fora do historico

$  secret-command --password=mypassword

Inicie um comando com um espaco inicial e (com ignorespace ativo) o bash nao o registrara. Util quando voce precisa digitar uma credencial na linha de comando.

7. HISTTIMEFORMAT — Adicionar Carimbos de Data/Hora

Conclusao: Defina HISTTIMEFORMAT para adicionar um carimbo de data/hora a cada entrada do historico.

Lina: Existe uma forma de ver quando eu executei cada comando? Isso seria util para investigacoes de incidentes.
Veterano Linny: Sim, defina HISTTIMEFORMAT e cada entrada do historico 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 revisoes pos-incidente ou trilhas de auditoria.

Proximas Leituras