Linux e Unix
Comando history - Histórico e edição de comandos no bash - Linux
Vamos estudar neste artigo o comando do 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 digitada |
!?string | Referência ao comando mais recente que contenha a string digitada |
^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 com grep:
$ history | grep uname
7. Repetir o último comando digitado:
$ !!
8. Limpar 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.
loading...
-
Curso De Linux Completo / Certificação Lpi - 1
Curso de Linux Completo / Certificação LPI - 1 Este é um Curso de Linux Básico Completo, com o conteúdo equivalente ao da Certificação linux LPI - 1, que consiste em mais de uma centena de aulas, compostas por textos explicativos e um vídeo sobre...
-
Criando Caixas De Diálogo Em Shell Scripting Com Dialog - Linux
O pacote dialog é uma ferramenta criada originalmente por Savio Lam. Este pacote permite criar caixas de diálogo padrão em janelas em um ambiente de texto, usando códigos de controle de escape ANSI.Podemos incorporar estas caixas de diálogo em...
-
Vulnerabilidade Shellshock Do Bash
Recentemente foi descoberta uma vulnerabilidade no Bash (Bourne Again Shell) que permite que uma máquina Linux ou OS X seja atacada por meio da execução de código remoto. O nome dessa falha de segurança é Shellshock, descoberta por Stephane Schazelas,...
-
Criando Números Aleatórios No Linux
Números e Dados aleatóriosPodemos gerar dados e números aleatórios no Linux para uma série de tarefas importantes, como tarefas relacionadas à segurança, reinicializar dispositivos de storage, apagar e sobrescrever dados existentes e até mesmo...
-
Comando Su
O comando su (“substitute user”) permite alterar o proprietário de uma sessão de login sem que o usuário atual tenha de efetuar logout do sistema.O comando su permite mudar o proprietário de uma sessão para qualquer usuário, mas é geralmente...
Linux e Unix