Comando history – Visualizar e editar histórico de comandos no Shell – Certificação LPIC 1
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:
Boa tarde Reis!
Muito instrutivo e prático suas colocações. Sou novato no do Linux Mint, não sei o que fiz, mas não consigo abrir nenhum documento nas pastas da minha área de trabalho; pois aparece um mensagem de erro dizendo que é um arquivo.
Você me ajudar a desvendar esse enigma?
Fala Reis, torço para que esteja tudo bem com você.
Obrigado por dedicar seu tempo criando conteúdos ricos e didáticos. Me ajudou de mais esse seu artigo.