O shell bash é o ambiente de terminal padrão incluído na maioria das distribuições Linux, incluídas no macOS e disponível para instalação no Windows 10 . Ele lembra os comandos que você digita e os armazena em um arquivo de histórico. Você provavelmente conhece alguns princípios básicos da história do bash, mas é muito mais poderoso do que você pode imaginar.
Índice
Atalhos do teclado
Para rolar pelo histórico do bash, você pode usar alguns dos muitos atalhos de teclado úteis do bash . Pressione esses atalhos e comandos que você usou anteriormente aparecerão no prompt.
- Seta para cima ou Ctrl + P : vai para o comando anterior em seu histórico. Pressione a tecla várias vezes para retroceder pelos comandos que você usou.
- Seta para baixo ou Ctrl + N : vai para o próximo comando em seu histórico. Pressione a tecla várias vezes para avançar pelos comandos que você usou.
- Alt + R : Reverte qualquer alteração em um comando que você puxou de seu histórico, se você o editou na linha atual.
O Bash também tem um modo especial de “rechamada” que você pode usar para pesquisar comandos executados anteriormente, em vez de rolar por eles um por um.
- Ctrl + R : Recupera o último comando que corresponde aos caracteres fornecidos. Pressione este atalho e comece a digitar para pesquisar um comando no histórico do bash.
- Ctrl + O : execute o comando que você encontrou com Ctrl + R.
- Ctrl + G : sai do modo de pesquisa de histórico sem executar um comando.
Veja o seu histórico do Bash
Você pode imprimir todo o seu histórico do bash na tela executando um único comando:
história
Você verá uma lista de todos os comandos em seu histórico do bash, junto com um número à esquerda de cada um. O comando com um “1” próximo a ele é o comando mais antigo em seu histórico do bash, enquanto o comando com o número mais alto é o mais recente.
Você pode fazer o que quiser com a saída. Por exemplo, você pode canalizá-lo para o grep
comando para pesquisar seu histórico de comandos.
história | grep your_search
Você também pode canalizá-lo para o tail
comando para visualizar apenas um pequeno número dos comandos recentes que você executou. Por exemplo, o comando a seguir mostraria as últimas 5 entradas em seu histórico.
história | cauda -5
Execute comandos do seu histórico
O Bash pode “expandir” rapidamente os comandos anteriores ou expandi-los e modificá-los. Esse recurso é conhecido como “expansão de histórico” e usa um ponto de exclamação, conhecido como “bang”. Basta digitá-los no prompt e pressionar Enter para executá-los como você executaria qualquer outro comando.
Para executar um comando específico de seu histórico por número, use o seguinte comando:
! #
Por exemplo, digamos que você queira executar o 12º comando de seu histórico do bash. Esse é o comando com um “12” à esquerda quando você executa o history
comando. Você digitaria o seguinte comando.
12
Para executar novamente o último comando executado, digite o seguinte. Isso tem o mesmo efeito que pressionar a seta para cima uma vez para visualizar o comando anterior e, em seguida, pressionar Enter.
!!
Você também pode consultar um comando um certo número de linhas atrás. Por exemplo, !-2
executaria o penúltimo comando executado. !!
significa a mesma coisa que !-1
.
Essa expansão funciona em qualquer lugar da linha. Você pode adicionar o que quiser antes ou depois !!
ou qualquer uma das outras expressões nesta seção. Por exemplo, você pode digitar o seguinte comando para executar novamente o último comando executado sudo
, concedendo a ele privilégios de root. Isso é particularmente útil se você se esquecer de adicionar sudo
antes de executar um comando.
sudo !!
Ou, por exemplo, você pode executar novamente o comando anterior e canalizar sua saída para grep para pesquisar algum texto.
!! | texto grep
Para pesquisar um comando em seu histórico e executá-lo, digite o seguinte. Isso executará o último comando que corresponde ao texto que você especificar:
!texto
Portanto, se você executou recentemente um comando que começou com ping
, pode executar o seguinte comando para pesquisá-lo. Isso pesquisará para trás em seu histórico, localizará o comando mais recente que começa com “ pi
“ e executará imediatamente:
! pi
Você pode anexar um :p
a qualquer uma das expansões acima e o bash imprimirá o comando no terminal sem executá-lo. Isso é útil se você deseja confirmar que está selecionando o comando correto antes de executá-lo.
! 12: p
!!: p
! texto: p
Reutilize argumentos de sua história
O Bash também permite que você execute um novo comando, mas use argumentos de comandos anteriores em seu histórico. Isso pode ajudá-lo a reutilizar rapidamente argumentos longos ou complicados sem ter que digitá-los novamente.
comando! $
Por exemplo, digamos que você executou o comando touch /home/chris/some_long_file_name_you_dont_want_to_type_again
. Agora você deseja executar o comando nano /home/chris/some_long_file_name_you_dont_want_to_type_again
. Em vez de digitar tudo do zero, você pode executar:
nano! $
A !$
faria festa preencher automaticamente o último argumento do seu comando anterior.
Isso apenas preenche o último argumento. Portanto, se você executar ping google.com -c 4
e depois executar ping !$
, isso apenas se expandirá para “ ping 4
“.
Para corrigir essa situação, você pode usar o seguinte truque para expandir o primeiro argumento na linha, em vez do último:
comando! ^
Portanto, se você executasse ping google.com -c 4
e depois executasse ping !^
, o bash expandiria para “ ping google.com"
.
Para preencher todos os argumentos usados no comando anterior, em vez de apenas um único argumento, você usaria o seguinte:
comando! *
Portanto, se você executou em ping !*
vez disso, o bash preencherá automaticamente todos os argumentos usados no comando anterior.
Você pode usar o mesmo truque que usa para executar comandos de seu histórico para obter argumentos deles. Basta usar o seguinte formulário.
comando! abc: #
Por exemplo, executamos o comando sudo hostname ubuntu
anteriormente. Se executarmos o seguinte comando, o bash pesquisará para trás no histórico para encontrar o último comando começando com as letras que digitamos e preencher o argumento que especificamos. Portanto, se executarmos echo !su:2
, o bash pesquisará novamente para encontrar o último comando que começa com “ su
” e preencherá seu segundo argumento, que é “ ubuntu
“.
Outros truques funcionam conforme o esperado. Por exemplo, substituir o número por um asterisco, conhecido como curinga, faz com que o bash preencha todos os argumentos do comando:
comando! abc: *
Execute novamente o comando anterior e modifique-o
O Bash também permite que você execute novamente o comando anterior e especifique algo que deve ser alterado. Isso pode ser útil para corrigir um erro de digitação em um comando. Por exemplo, o comando a seguir executará novamente o comando anterior, substituindo o texto “ abc
” nele pelo texto “ xyz
“.
^ abc ^ xyz
Por exemplo, se você executou acidentalmente ping gogle.com
, pode então executar ^gog^goog
e o bash executará o comando ping google.com
.
Onde seu histórico é armazenado e como limpá-lo
O shell bash armazena o histórico de comandos que você executou no arquivo de histórico da sua conta de usuário em ~ / .bash_history por padrão. Por exemplo, se o seu nome de usuário for bob, você encontrará esse arquivo em /home/bob/.bash_history.
Como seu histórico é armazenado em um arquivo, ele persiste entre as sessões. Você pode executar alguns comandos, sair, voltar no dia seguinte e esses comandos ainda estarão em seu arquivo de histórico, prontos para serem exibidos e usados. Cada conta de usuário tem seu próprio arquivo de histórico com um histórico de comandos separado.
Para limpar o histórico do bash, você pode executar o seguinte comando. Isso apaga o conteúdo do arquivo .bash_history da sua conta de usuário:
história -c
O Bash lembra apenas um número limitado de comandos por padrão, evitando que o arquivo de histórico fique muito grande. O número de entradas do histórico que o bash lembra é controlado pela HISTSIZE
variável. O padrão é geralmente 500 ou 1000 entradas. Você pode executar o seguinte comando para ver o tamanho do histórico do bash em seu sistema.
echo $ HISTSIZE
Para definir seu histórico como zero, execute o seguinte comando.
HISTSIZE = 0
Para a sessão atual, o bash não armazenará nenhuma entrada de histórico a menos que você execute um comando como HISTSIZE=1000
defini-lo de volta para um certo número de entradas.
Como ignorar espaços e duplicatas
O Bash permite que você ignore as entradas do histórico que começam com um espaço se você definir a HISTCONTROL
variável paraignorespace.
HISTCONTROL = ignorespace
Digite um espaço antes de um comando antes de executá-lo no shell bash e o comando será executado normalmente, mas não aparecerá em seu histórico se você tiver essa variável habilitada. Isso permite que você mantenha seu histórico um pouco mais limpo, optando por executar comandos sem que eles apareçam em seu histórico.
O Bash também permite que você ignore comandos duplicados que podem atrapalhar seu histórico. Para fazer isso, defina HISTCONTROL
comoignoredups.
HISTCONTROL = ignoreups
Para usar o recurso ignorespace
e ignoredups
, defina a HISTCONTROL
variável paraignoreboth.
HISTCONTROL=ignoreboth
Note that bash variables you set will only persist for the current session. You’ll need to add these to your user account’s .bashrc file to have these values automatically set in every bash session you start, if you prefer that.
The bash shell is a complex tool with many more options than these. Consult the Bash History Builtins and History Expansion sections in the official bash manual more detailed information and other advanced tricks you can use.