Bóson Treinamentos em Ciência e Tecnologia

Comando history – Visualizar e editar histórico de comandos no Shell – Certificação LPIC 1

Comando history

Comando history – Visualizar e editar histórico de comandos no Shell – Curso de Linux / LPI 1

Vamos estudar neste artigo o comando do shell bash history. Quando usamos o shell bash, é natural digitarmos comandos longos e complexos, e muitas vezes precisamos repeti-los depois, ou executá-lo diversas vezes com algumas pequenas variações.

O shell bash (e outros shells modernos) incluem um conjunto de recursos muito interessante conhecidos como histórico, expansão e edição de comandos. Com esses comandos, é bastante simples ter acesso a comandos digitados anteriormente, tornando mais eficiente nosso uso do shell.

Vamos falar primeiramente do histórico. Quando usamos o shell bash de forma interativa, temos acesso a uma lista de comandos digitados anteriormente. Esses comandos são armazenados no shell antes mesmo de serem interpretados, ou seja, antes dos coringas serem expandidos e de as substituições de comandos serem realizadas.

A lista do histórico da sessão atual é controlada por uma variável especial do shell chamada de HISTSIZE. Por padrão, essa variável é ajustada para gravar 1000 linhas, mas podemos alterar esse valor configurando a variável HISTSIZE. Vejamos o conteúdo dessa variável:

$ echo $HISTSIZE

Algumas distribuições possuem um valor diferente na variável HISTSIZE. Veja o valor no Linux Debian:

Além disso, os comandos de sessões anteriores do bash são armazenados em um arquivo de nome ~/.bash_history, ou então em um arquivo nomeado na própria variável HISTSIZE.

Uma outra variável de ambiente especial que lida com o histórico é a variável HISTFILESIZE, que contém o número de entradas gerais armazenadas no histórico do computador. Vejamos o tamanho configurado nela:

$ echo $HISTFILESIZE

Se quisermos, é possível alterar os valores dessas duas variáveis de forma permanente no perfil de um usuário, bastando para isso editar o arquivo ~/.bashrc:

$ vi ~/.bashrc

Basta aumentar os valores conforme desejado, salvar e fechar o arquivo.

Podemos visualizar o histórico de comandos usando o comando history:

$ history

Note que antes de cada comando aparece um número, que poderá ser usado quando desejado na expansão do histórico para reexecutar um comando executado anteriormente. A expansão do histórico também permite que editemos os comandos, até um certo limite.

Alguns caracteres, usados para que executemos outra vez comandos anteriores, e chamados de designadores de expansão do histórico, são listados na tabela a seguir:

Designador Descrição
!! Referência ao comando mais recente.
!n Referência ao comando de número n do histórico.
!-n Comando atual menos n do histórico.
!string Referência ao comando mais recente que comece com a string informada.
!?string Referência ao comando mais recente que contenha a string informada.
^string1^string2 Executa novamente o último comando, substituindo a primeira ocorrência da string1 pela string2

Podemos também explorar o conteúdo do arquivo ~/.bash_history:

$ cat .bash_history

Ele contém uma lista de comandos armazenados na última sessão do shell executada.

Podemos nos movimentar pelas linhas do histórico usando alguns atalhos de teclado e vinculações de teclas estilo Emacs, como podemos ver na tabela abaixo:

Teclas Descrição
Seta acima ou Ctrl-p Mover uma linha acima no histórico de comandos (comandos anteriores)
Seta abaixo ou Ctrl-n Mover uma linha abaixo no histórico de comandos
Ctrl-b ou seta à esquerda Voltar um caractere
Ctrl-f ou seta à direita Avançar um caractere
Ctrl-a (home) Início da linha
Ctrl-e (end) Fim da linha
Alt-< Início do histórico (primeiro comando da lista)
Ctrl-k Apaga o texto desde a posição do cursor até o final da linha
Alt-d Apaga uma palavra inteira (onde estiver o cursor)

Exemplos:

1. Listar todos os comandos digitados pelo usuário:

$ history

2. Executar novamente o comando de número 12:

$ !12

3. Executar novamente o comando para copiar o arquivo /etc/passwd (último digitado) para o diretório atual, porém dessa vez copiando o arquivo /etc/group:

$ cp /etc/passwd .
$ ^passwd^group

4. Listar os comandos mostrando a data e hora em que forma executados:

$ export HISTTIMEFORMAT= ‘%F %T ‘
$ history

Para desativarmos a exibição dos dados de data e hora, basta eliminar a variável HISTTIMEFORMAT:

$ unset export HISTTIMEFORMAT
$ history

5. Visualizar somente os 10 últimos comandos digitados pelo usuário:

$ history 10

6. Procurar comandos específicos no histórico filtrando com grep:

$ history | grep uname

7. Repetir o último comando digitado no terminal:

$ !!

8. Limpar todo o histórico de comandos:

$ history -c
$ history

Há muitas outras opções disponíveis para o comando history. Digite man history para ver a ajuda completa do comando. E aproveite para assistir a um vídeo demonstrativo sobre o assunto:

 

Sair da versão mobile