Domine o Histórico de Comandos Linux: Tutoriais e Truques!

O terminal do Linux armazena um registro dos comandos que você executou. Essa funcionalidade permite que você os consulte e repita, aumentando significativamente sua eficiência ao trabalhar com a linha de comando.

Dominando o Histórico de Comandos

Como diz o ditado, “Aqueles que não conseguem se lembrar do passado estão condenados a repeti-lo”. No contexto do Linux, se você não tem como revisitar suas ações anteriores, não poderá repeti-las, mesmo que seja necessário.

É nesse ponto que o comando ‘history’ do Linux se torna indispensável. Ele permite que você analise e execute novamente comandos passados, o que vai além de apenas economizar tempo. Existe um fator de eficiência e precisão envolvido. Comandos complexos são difíceis de lembrar e digitar corretamente sem erros. Esses erros podem tanto impedir o funcionamento do comando quanto fazer com que ele execute algo inesperado.

O comando ‘history’ soluciona esses problemas. Assim como a maioria dos comandos do Linux, ele possui mais detalhes do que aparenta. Aprender a usá-lo é um investimento valioso, pois aprimora seu uso diário da linha de comando. Existem formas muito mais eficientes de usar o histórico do que apenas pressionar a seta para cima repetidamente.

Utilizando o Comando ‘history’

Na sua forma mais simples, basta digitar ‘history’ no terminal:

history

Isso exibirá uma lista dos comandos executados anteriormente, ordenados por número. Os comandos mais recentes terão números mais altos e estarão no final da lista.

Para exibir um número específico de comandos, use ‘history’ seguido do número desejado. Por exemplo, para ver os últimos 10 comandos:

history 10

Você também pode usar o comando ‘tail’ para obter o mesmo resultado:

history | tail -n 10

Repetindo Comandos

Para executar novamente um comando da lista de histórico, use um ponto de exclamação (!) seguido pelo número do comando (sem espaços). Por exemplo, para repetir o comando número 37:

!37

Para executar o último comando, use dois pontos de exclamação (!!), também sem espaços:

!!

Isso é útil quando você se esquece de usar ‘sudo’ em um comando. Digite ‘sudo’, um espaço e ‘!!’ para executar o último comando com privilégios de administrador.

Por exemplo:

mv ./meu_script.sh /usr/local/bin/
sudo !!

Para repetir comandos anteriores ao último, use um ponto de exclamação, um hífen (-) e o número do comando (sem espaços). Para repetir o 13º comando anterior:

!-13

Buscando Comandos por Texto

Para repetir o último comando que começa com um texto específico, digite um ponto de exclamação seguido do texto (sem espaços). Por exemplo, para repetir o último comando que começa com ‘sudo’:

!sudo

Tenha cuidado ao usar este método, pois ele pode executar um comando inesperado. Para evitar surpresas, use o modificador ‘:p’ para imprimir o comando antes de executá-lo:

!sudo:p

Se este for o comando desejado, pressione a seta para cima e Enter para executá-lo.

Para encontrar e executar um comando que contenha um texto específico, use um ponto de exclamação e um ponto de interrogação. Para encontrar o primeiro comando que contém a palavra “aliases”:

!?aliases

Busca Interativa

A busca interativa permite navegar pelos comandos correspondentes e executar o desejado. Pressione Ctrl + r para iniciar a busca.

À medida que você digita, o primeiro comando correspondente aparecerá. Pressione Ctrl + r para exibir o próximo comando correspondente.


Pressione Enter para executar o comando exibido.

Para editar um comando antes de executá-lo, pressione a seta para a Esquerda ou Direita.

O comando aparecerá na linha de comando para que você possa modificá-lo.

Você pode usar outras ferramentas do Linux para pesquisar o histórico. Por exemplo, para encontrar comandos que contenham a palavra “aliases” com o ‘grep’:

history | grep aliases

Modificando o Último Comando

Use o acento circunflexo (^) para corrigir erros de digitação e repetir comandos. Digite (sem espaços) um acento circunflexo, o texto a ser substituído, outro acento circunflexo, o texto que o substituirá e outro acento circunflexo. Por exemplo:

sudo systemctl start shhd

Você pode corrigir facilmente ‘shhd’ para ‘sshd’ digitando:

^shhd^sshd^

Excluindo Comandos do Histórico

Use a opção ‘-d’ para excluir comandos do histórico. Exclua um comando com erro de digitação para mantê-lo limpo.

Por exemplo, use grep para encontrá-lo, e passe seu número para o histórico com a opção -d:

history | grep shhd
history -d 83
history | grep shhd

Você pode excluir uma sequência de comandos usando ‘-d’ seguido do primeiro e último número da sequência. Para excluir os comandos de 22 a 32 (inclusive):

history -d 22 32

Para excluir os últimos cinco comandos:

history -d -5

Atualização Manual do Arquivo de Histórico

O histórico é carregado de um arquivo quando você abre uma sessão. No Bash, o padrão é ‘.bash_history’. As alterações são salvas no arquivo quando você fecha o terminal ou faz logoff.

Use a opção ‘-a’ para salvar as alterações do histórico em um arquivo de histórico em uma sessão e disponibilizá-las para outras sessões antes de fechá-la. Para fazer isso, digite:

history -a

Para salvar todas as alterações (incluindo comandos excluídos) no arquivo de histórico, use a opção ‘-w’:

history -w

Limpando o Histórico

Para remover todos os comandos da lista de histórico, use a opção ‘-c’:

history -c

Para forçar a remoção também do arquivo de histórico, use a opção ‘-w’:

history -w

Segurança e o Arquivo de Histórico

Se você usar aplicativos que requerem informações confidenciais (como senhas) na linha de comando, elas serão salvas no histórico. Para evitar isso, você pode usar o seguinte método para excluir comandos do histórico imediatamente:

special-app minha-senha-secreta;history -d $(history 1)
history 5

Este comando consiste em duas partes, separadas por um ponto e vírgula (;):

  • ‘special-app minha-senha-secreta’: O primeiro comando que executa o programa com a senha.
  • ‘history -d $(history 1)’: O segundo comando, que usa ‘history -d’ para excluir o último comando, que contém a senha.

Você pode usar ‘history 5’ para verificar se o comando foi removido.

Um método ainda mais simples é adicionar um espaço no início da linha, pois o Bash ignora linhas que começam com um espaço. Por exemplo:

 special-app outra-senha
history 5

Este comando não será salvo no histórico. Esse comportamento está definido no arquivo ‘.bashrc’.

O Arquivo ‘.bashrc’

O arquivo ‘.bashrc’ é executado sempre que você faz login ou abre uma janela de terminal. Ele contém configurações que controlam o comportamento do comando ‘history’. Edite este arquivo com o gedit:

gedit .bashrc

Na parte superior do arquivo, você verá:

  • HISTSIZE: O número máximo de entradas na lista de histórico.
  • HISTFILESIZE: O número máximo de linhas que o arquivo de histórico pode conter.

Esses valores interagem da seguinte forma:

  • Ao fazer login ou abrir o terminal, o histórico é carregado do arquivo ‘.bash_history’.
  • Ao fechar o terminal, até ‘HISTSIZE’ comandos são salvos em ‘.bash_history’.
  • Se a opção ‘histappend’ estiver ativa, novos comandos são adicionados a ‘.bash_history’. Se não estiver ativa, ‘.bash_history’ é sobrescrito.
  • Após salvar os comandos, o arquivo de histórico é reduzido para não ultrapassar o número de linhas definido por ‘HISTFILESIZE’.

Você também verá uma entrada para o valor ‘HISTCONTROL’:

Você pode definir esse valor para:

  • ignorespaces: Linhas que começam com um espaço não são adicionadas ao histórico.
  • ignoredups: Comandos duplicados não são adicionados ao histórico.
  • ignoreboth: Ativa ambas as opções acima.

Você também pode listar comandos específicos para não serem adicionados ao histórico. Separe-os com dois pontos (:) e coloque-os entre aspas (“…”):

export HISTIGNORE="ls:history"

Usando Carimbos de Data/Hora

Para adicionar carimbos de data e hora à lista de histórico, use a configuração ‘HISTTIMEFORMAT’. Adicione uma linha como a seguinte ao arquivo ‘.bashrc’:

export HISTTIMEFORMAT="%c "

Agora, ao usar o comando ‘history’, você verá os carimbos de data e hora. Os comandos anteriores mostrarão a data e hora do primeiro comando que recebeu um carimbo.

Você pode usar outros tokens além de ‘%c’ para refinar o formato. Os outros tokens que você pode usar são:

  • %d: dia
  • %m: mês
  • %y: ano
  • %H: hora
  • %M: minutos
  • %S: segundos
  • %F: Data completa (ano-mês-dia)
  • %T: hora (hora:minutos:segundos)
  • %c: Data e hora completas (dia-mês-ano e hora:minutos:segundos)

Experimente outros tokens:

export HISTTIMEFORMAT="%d %m %T "

A saída exibirá o dia, mês e hora.

Se removermos o dia e o mês, ele exibirá apenas a hora.

As mudanças em ‘HISTTIMEFORMAT’ afetam toda a lista de histórico. O tempo de cada comando é armazenado em segundos desde a Época Unix, e ‘HISTTIMEFORMAT’ especifica como esse número é apresentado. Por exemplo:

export HISTTIMEFORMAT="%T "

A saída ficará mais concisa.

O histórico também pode ser usado para auditoria, ajudando a identificar possíveis problemas ao revisar ações anteriores.

Assim como na vida, você pode usar o comando ‘history’ para reviver os bons momentos e aprender com os maus.