24Aug
O shell bash é o ambiente de terminal padrão incluído na maioria das distribuições Linux, incluído 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 fundamentos da história do bash, mas é muito mais poderoso do que você pode perceber.
Atalhos de teclado
Para percorrer o seu histórico de bash, você pode usar alguns dos muitos atalhos de teclado úteis do bash. Pressione esses atalhos e os comandos que você usou anteriormente aparecerão no prompt.
- Seta para cima ou Ctrl + P : Vá para o comando anterior em seu histórico. Pressione a tecla várias vezes para caminhar para trás através dos comandos que você usou.
- Seta para baixo ou Ctrl + N : Vá para o próximo comando do seu histórico. Pressione a tecla várias vezes para avançar através dos comandos que você usou.
- Alt + R : Reverte todas as alterações a um comando que você retirou do seu histórico se você o editou na linha atual.
Bash também possui um modo especial de "recall" que você pode usar para procurar comandos que você já executou, em vez de percorrê-los um a um.
- Ctrl + R : recorde o último comando que corresponde aos caracteres fornecidos. Pressione este atalho e comece a digitar para procurar seu histórico bash para um comando.
- Ctrl + O : Execute o comando que você encontrou com Ctrl + R.
- Ctrl + G : deixe o modo de pesquisa de histórico sem executar um comando.
Veja seu histórico de Bash
Você pode imprimir todo o seu histórico de bash na tela executando um único comando:
historyVocê verá uma lista de todos os comandos em seu histórico bash, juntamente com um número à esquerda de cada um. O comando com um "1" ao lado é o comando mais antigo do seu histórico 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ê poderia transformá-lo em grepcommand para pesquisar seu histórico de comandos. História
|grep your_searchVocê também pode transformá-lo no comando de cauda para visualizar apenas um pequeno número de comandos recentes que você executou. Por exemplo, o seguinte comando mostra as últimas 5 entradas no seu histórico. História
|Cauda -5Execute comandos do seu histórico
Bash pode rapidamente "expandir" os comandos anteriores, ou expandi-los e modificá-los. Esse recurso é conhecido como "expansão do histórico" e usa um ponto de exclamação, conhecido como "bang".Basta digitá-los no prompt e pressione Enter para executá-los como se você executasse qualquer outro comando.
Para executar um comando específico do seu histórico por seu número, use o seguinte comando:
! #Por exemplo, digamos que você queria executar o 12º comando do seu histórico bash. Esse é o comando com um "12" à esquerda dele quando você executa o comando do histórico. Você digitaria o seguinte comando.
! 12Para voltar a executar o último comando que você executou, digite o seguinte. Isso tem o mesmo efeito que pressionar a seta para cima uma vez para ver o comando anterior e depois pressionar Enter.
! !Você também pode consultar um comando com um certo número de linhas de volta. Por exemplo,! -2 executaria o segundo para o último comando que você executou.!!significa o mesmo que! -1.
Esta expansão funciona em qualquer lugar na linha. Você pode adicionar tudo 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 o último comando que você executou no sudo, dando privilégios de root. Isto é particularmente útil se você esquecer de adicionar sudo antes de executar um comando.
sudo! !Ou, por exemplo, você poderia executar novamente o comando anterior e canalizar sua saída para grep para procurar algum texto.
! !|texto grepPara procurar um comando no seu histórico e executá-lo, digite o seguinte. Isso executará o último comando que corresponde ao texto que você especifica:
! TextEntão, se você executou recentemente um comando que começou com o ping, você pode executar o seguinte comando para procurá-lo. Isso irá pesquisar para trás através do seu histórico, localize o comando mais recente que começa com "pi" e execute-o imediatamente:
! PiVocê pode anexar: p para qualquer uma das expansões acima e bash irá imprimir o comando para o terminal sem executá-lo. Isso é útil se você quiser confirmar que você está selecionando o comando correto antes de executá-lo.
! 12: p! !: p! Text: pArgumentos de reutilização do seu histórico
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 precisar reconfigurá-los. Comando
! $Por exemplo, digamos que você executou o comando toque /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. Ao invés de digitar tudo a partir do zero, você poderia executar:
nano! $O $ $ faria bash automaticamente preencher o último argumento do seu comando anterior.
Isso apenas preenche o último argumento. Então, se você executar o ping google.com -c 4 e depois executar o ping! $, Isso seria expandido para "ping 4".
Para corrigir esta situação, você pode usar o seguinte truque para expandir o primeiro argumento na linha, em vez do último: comando
! ^Então, se você executou ping google.com -c 4 e depois executou ping! ^,bash expandiria isso 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
! *Então, se você executou o ping!* em vez disso, bash preencheria automaticamente todos os argumentos que usou no comando anterior.
Você pode usar o mesmo truque que você usa para executar comandos do seu histórico para obter argumentos deles. Basta usar o seguinte formulário. Comando
! abc:#Por exemplo, executámos o comando sudo hostname ubuntu anteriormente. Se executarmos o seguinte comando, bash irá procurar para trás através do histórico para encontrar o último comando começando com as letras que escrevemos e preencher o argumento que especificamos. Então, senós executamos echo! su: 2, bash irá procurar novamente para encontrar o último comando começando com "su" e preencher seu segundo argumento, que é "ubuntu".
Outros truques funcionam como você poderia esperar. Por exemplo, substituir o número por um asterisco, conhecido como curinga, faz com que bash preencha todos os argumentos do comando: comando
! Abc: *Rerun o comando anterior e modificá-lo
Bash também permite que você execute novamente o comando anteriore especifique algo que deve ser alterado. Isso pode ser útil para corrigir um erro de digitação em um comando. Por exemplo, o seguinte comando irá executar novamente o comando anterior, substituindo o texto "abc" nele com o texto "xyz".
^ abc ^ xyzPor exemplo, se você acidentalmente executou ping gogle.com, você poderia executar ^ gog ^ goog e bash executaria o comando ping google.com em vez disso.
Onde seu histórico está armazenado e como desmarcá-lo
O shell bash armazena o histórico de comandos que você executou no arquivo de histórico da conta de usuário em ~ /. bash_history por padrão. Por exemplo, se o seu nome de usuário for bob, você encontrará este arquivo no /home/bob/. bash_history.
Como o 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 no seu arquivo histórico pronto para exibição e uso. Cada conta de usuário possui seu próprio arquivo de histórico com um histórico de comandos separado.
Para limpar seu histórico de bash, você pode executar o seguinte comando. Isso apaga o conteúdo do arquivo. bash_history da sua conta de usuário:
history -cBash só lembra um número limitado de comandos por padrão, evitando que o arquivo de histórico cresça muito grande. O número de entradas de histórico que bash lembra é controlado pela HISTSIZEvariable. O padrão geralmente é de 500 ou 1000 entradas. Você pode executar o seguinte comando para visualizar o tamanho do histórico do bash no seu sistema.
echo $ HISTSIZEPara definir seu histórico como zero, execute o seguinte comando.
HISTSIZE = 0Para a sessão atual, bash não armazenará nenhuma entrada do histórico, a menos que você execute um comando como HISTSIZE = 1000 para configurá-lo de volta para um certo número de entradas.
Como ignorar espaços e duplicações
Bash permite que você ignore as entradas de histórico que começam com um espaço se você definir HISTCONTROLvariable para ignorar o espaço.
HISTCONTROL = ignorespaceDigite um espaço antes de um comando antes de executá-lo no shell bash e o comando será executado normalmente, mas não aparecerá no seu histórico se você tiver essa variável habilitada. Isso permite que você mantenha seu histórico um pouco mais limpo, escolhendo executar comandos sem que eles apareçam em seu histórico.
Bash também permite que você ignore comandos duplicados que podem desordenar seu histórico. Para fazer isso, defina HISTCONTROL como ignorado.
HISTCONTROL = ignoredupsPara usar o recurso ignorespace e ignoredups, defina a variável HISTCONTROL para ignoreboth.
HISTCONTROL = ignorebothObserve que as variáveis bash que você definiu apenas persistirão para a sessão atual. Você precisará adicioná-los ao arquivo. bashrc da sua conta de usuário para que esses valores sejam configurados automaticamente em todas as sessões bash que você iniciar, se você preferir.
O bash shell é uma ferramenta complexa com muitas mais opções do que estas. Consulte as secções de História do Histórico do Bash e as secções de Expansão do Histórico no manual oficial bash, informações mais detalhadas e outros truques avançados que você pode usar.