Pré-requisitos:
Para executar as etapas demonstradas neste tutorial, você precisa dos seguintes componentes:
- Um sistema Linux devidamente configurado. Confira como configurar uma VM Ubuntu no VirtualBox .
- Familiaridade básica com a interface de linha de comando.
Histórico do Bash
Bash é o shell padrão na maioria dos sistemas Linux modernos. Como sucessor do “sh”, o shell original do UNIX, ele vem com vários recursos e melhorias, como manipulação de diretório, controle de tarefas, aliases, histórico de comandos e muito mais.
O Bash acompanha todos os comandos que foram executados anteriormente no terminal. Isso pode ser incrivelmente útil em várias situações, como depuração. Também pode reduzir a necessidade de digitar os mesmos comandos/semelhantes repetidamente.
Para gerenciamento de histórico, o Bash vem com dois comandos integrados:
$ tipo história
$ tipo FC
Para armazenar o histórico, o Bash usa duas técnicas diferentes:
- Sempre que se trabalha com uma sessão de shell, seu histórico é armazenado na memória.
- Quando fechado, o histórico armazenado na memória é despejado em um arquivo de histórico.
O arquivo de histórico padrão que o Bash usa está localizado em:
$ gato ~ / .bash_history
Há também um punhado de variáveis de ambiente e atalhos de teclado que mudam como o Bash lida com o histórico.
Trabalhando com o histórico do Bash
Uso básico
Para obter a lista de comandos executados recentemente, use o seguinte comando:
$ história
Aqui, todos os comandos armazenados no buffer são listados. Cada comando tem um valor numérico atribuído. O comando mais antigo é atribuído com 1.
Podemos limitar o número de comandos a serem impressos usando o seguinte comando:
$ história N
Aqui, N é um inteiro onde N >= 0. A saída contém os últimos N comandos do histórico.
Também podemos usar a saída em conjunto com grep para filtragem:
$ história | pegada < corda >
Para navegar por um longo histórico, podemos usar o comando “less”:
$ história | menos
Excluindo comandos do histórico
Se você precisar remover um comando específico do histórico, use os seguintes comandos:
$ história$ história -d < command_number >
$ história
Da mesma forma, para remover os comandos de M a N do histórico, podemos usar os seguintes comandos:
$ história$ história -d M-N
$ história
Para limpar o histórico do buffer de RAM da sessão de terminal atual, use os seguintes comandos:
$ história -c$ história
Para limpar o histórico do arquivo de histórico armazenado no disco, podemos sobrescrevê-lo completamente com NULL:
$ gato / desenvolvedor / nulo > $HISTFILE
Configurações do Histórico do Bash
Existem várias maneiras de ajustar como o Bash lida com o histórico. Muitas dessas opções são gerenciadas por variáveis de ambiente.
Para alterar seu valor, editamos o arquivo “bashrc”:
$ nano ~ / .bashrc
Após a edição, salve o arquivo e recarregue-o no Bash.
$ fonte ~ / .bashrc
Para fazer alterações em todo o sistema, edite o “bashrc” localizado nos seguintes locais:
$ nano / etc / bash.bashrc$ nano / etc / bashrc
Tamanho do buffer
Conforme mencionado anteriormente, o Bash usa dois buffers para armazenar o histórico de comandos na RAM (para a sessão atual) e em um arquivo de disco (para todas as sessões anteriores).
Os tamanhos desses buffers são controlados por duas variáveis de ambiente:
- HISTSIZE : Define o número de entradas a armazenar no buffer de RAM.
- HISTFILESIZE : Define o número de entradas a serem armazenadas no arquivo em disco.
Podemos alterar seu valor no “bashrc” para atender às nossas necessidades:
$ nano ~ / .bashrcPor exemplo, para armazenar 5.000 entradas em ambos os buffers, atualize “bashrc” com o seguinte código:
$ HISTSIZE = 5000$ HISTFILESIZE = 5000
Exclusão de comando
Por padrão, o Bash armazena todos os comandos executados nos buffers do histórico. No entanto, podemos configurá-lo para que o Bash ignore determinados comandos. Pode ser útil em situações em que você precisa executar os mesmos comandos inúmeras vezes, enchendo o buffer com spam.
- HISTCONTROL
Vamos começar com o seguinte exemplo de comando:
$ eco 'monge' && história 5$ eco 'bonk' && história 5
Como demonstra a saída do comando history, apenas o primeiro comando echo é registrado, mas não o segundo.
Este é o funcionamento da variável de ambiente HISTIGNORE. Ele diz ao Bash para não registrar os comandos no buffer do histórico com base em certos padrões. Estão disponíveis os seguintes valores:
- ups ignorados : não é registrado se um comando corresponder à entrada do histórico anterior.
- ignorespace : Não será registrado se um comando começar com um espaço no início.
- ignorar ambos : Aplica-se a regra de ignoreups e ignorespace.
- apagados : Todas as linhas anteriores que correspondem ao comando atual serão apagadas do histórico.
No primeiro exemplo, demonstramos o uso de ignorespace. No entanto, nem todas as distros podem fornecer o Bash com essa configuração. Como sempre, podemos adicioná-los ao “bashrc”:
$ HISTCONTROL =ignorar ambos
Também é possível ativar várias opções usando o seguinte comando:
$ HISTCONTROL =ignoredups:ignorespaceAqui, ignoreups:ignorespace é o equivalente a ignoreboths.
- HISTIGNORE
Essa variável de ambiente pode conter um ou mais padrões. Qualquer comando que corresponda a qualquer padrão descrito pelo HISTIGNORE não será registrado em nenhum buffer de histórico. Os padrões são definidos usando as expressões regulares.
A estrutura é a seguinte:
$ HISTIGNORE = 'Por exemplo, para excluir os comandos history e echo do histórico Bash, atualize HISTIGNORE da seguinte maneira:
$ HISTIGNORE = 'história' : 'eco *'
Podemos usar a seguinte cadeia de comandos para testá-lo:
$ ls -eu / era / lob &> / desenvolvedor / nulo$ história
$ eco Olá Mundo
$ história
Carimbo de data/hora
O Bash também pode ser configurado para registrar a hora em que um comando foi executado. Pode ser útil em várias situações, como depuração.
Para habilitar os timestamps no histórico do Bash, atualize o valor de HISTTIMEFORMAT:
$ HIST HORA FORMATO = 'Todos os caracteres de controle de formato de hora disponíveis estão disponíveis na página man do comando date.
$ homem data
A lista a seguir inclui alguns simples:
- %T: Tempo
- %d: Dia
- %m: Mês
- %y:Ano
Persistência do Histórico
Ao trabalhar com a CLI, em muitos casos, você se encontrará trabalhando com vários terminais. É aqui que o gerenciamento do histórico do Bash pode se tornar uma fonte de dor.
Por padrão, o arquivo de histórico é atualizado assim que a sessão é encerrada. Embora seja bom para uma única sessão, não é adequado para várias sessões simultâneas. Podemos resolver esse problema forçando o Bash a atualizar o arquivo de histórico toda vez que um comando é executado.
Para isso, atualize o valor de PROMPT_COMMAND:
$ PROMPT_COMMAND = 'história -a'Aqui, a variável PROMPT_COMMAND pode conter comandos válidos. O conteúdo de PROMPT_COMMAND é executado antes que o Bash comece a receber a entrada do usuário. O comando “history –a” força o histórico a anexar o conteúdo ao arquivo de histórico.
Expansão da História e Designadores
O Bash vem com alguns atalhos integrados para aproveitar seu recurso de histórico. Aqui está a lista dos designadores:
- !! : Executa o último comando do histórico.
- !N : Executa o comando Nth do histórico.
- !-N : Executa o comando Nth antes do comando mais recente do histórico.
- !
: executa o comando mais recente.
A seguinte cadeia de comandos demonstra seu uso:
$ eco 1$ eco 2
$ eco 3
$ história
$ ! eco
$ ! - 3
$ ! 1
$ !!
Alguns designadores também trabalham com os argumentos de comando do histórico:
- !:* : Use todos os argumentos do comando mais recente.
- !:^ : Use o primeiro argumento do comando mais recente.
- !:N : Use o enésimo argumento do comando mais recente.
- !:M-N : Use os argumentos de M a N do comando mais recente.
- !:$ : Use o último argumento do comando mais recente.
A seguinte cadeia de comandos demonstra seu uso:
$ eco 1 2 3 4 5 6 7$ eco ! : *
$ eco 1 2 3 4 5 6 7
$ eco ! :^
$ eco 1 2 3 4 5 6 7
$ eco ! : 5
$ eco 1 2 3 4 5 6 7
$ eco ! : 1 - 5
$ eco 1 2 3 4 5 6 7
$ eco ! :$
Se você precisar trabalhar com os parâmetros de um comando diferente, os designadores ficarão assim:
- !
^ : Usa o primeiro argumento do comando. - !
$ : Usa o último argumento do comando.
A cadeia de comandos a seguir demonstra seus usos:
$ ls -lh / era / registro &> / desenvolvedor / nulo$ tocar 1 .TXT 2 .TXT 3 .TXT 4 .TXT 5 .TXT
$ eco ! tocar ^
$ eco ! tocar $
Atalhos de teclado do histórico
Além de todos os comandos e variáveis de ambiente, o Bash também oferece suporte a vários atalhos de teclado para facilitar a navegação no histórico:
- Acima tecla de seta: rolar para trás
- Abaixo tecla de seta: Rolar para frente
Há também atalhos de teclado disponíveis para uma pesquisa de histórico interativa:
- Ctrl + R : Pesquise comandos no histórico.
- Ctrl + O : Executa o comando selecionado.
- Ctrl + G : Sair da pesquisa interativa.
Conclusão
Discutimos sobre a história do Bash em detalhes. Aprendemos como o Bash armazena o histórico de comandos e como aproveitá-lo de diferentes maneiras. Demonstramos como trabalhar com o histórico do Bash usando vários exemplos.
Interessado em aprender mais sobre o Bash? O Subcategoria de programação Bash contém centenas de guias sobre diferentes recursos do Bash.
Feliz computação!