Como eu procuro meu histórico de linha de comando para os comandos que usei antes?

174

Além de visualizar o histórico, existe uma maneira de filtrar meu histórico?

Digamos que eu queira procurar um comando que tenha começado com "ssh"?

    
por Blankman 02.11.2011 / 02:25

10 respostas

254

Pressione Ctrl + R e digite ssh . Ctrl + R iniciará a pesquisa do comando mais recente para o antigo (pesquisa inversa). Se você tiver mais de um comando que começa com ssh , pressione Ctrl + R várias vezes até encontrar a correspondência.

Depois de encontrar a correspondência, você pode pressionar Enter para executar o comando ou o cursor esquerdo / direito apenas para selecionar o texto do comando.

Não há nenhuma opção reversa padrão para Ctrl + R para inverter a direção da pesquisa, mas aqui você encontrará algumas sugestões sobre isso.

    
por Prince John Wesley 02.11.2011 / 02:32
87

Se você quiser apenas pesquisar seu histórico, basta usar history | grep ssh , substituindo ssh pelo que quiser pesquisar.

    
por ssmy 02.11.2011 / 02:36
15

Eu faço uma ligeira variação do acima, funciona bem para mim (se você está se referindo ao seu histórico bash

Na minha pasta pessoal eu crio um arquivo chamado

.inputrc

Dentro disso vai

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Nota: o acima não parece funcionar mais em 14.04, então isso faz a mesma coisa -

"\e[A":history-search-backward
"\e[B":history-search-forward

Em seguida, digitando muito de um comando anterior, desejo & usar os botões page up / page dn pesquisa o histórico, sempre começando com page up

    
por doug 02.11.2011 / 02:42
14

Pressionando Ctrl + R iniciará o modo "reverse-i-search", digitar "ssh" procuraria em seu histórico por comandos que contenham "ssh".

    
por Sergey 02.11.2011 / 02:33
7

Aqui está outro método usando comandos clássicos (mais propensos a trabalhar com distros). O histórico de comandos é armazenado no arquivo .bash_history em seu diretório inicial, portanto, você pode fazer isso:

grep "ssh" ~/.bash_history

Não se esqueça do sinal -i se você precisar de uma pesquisa insensível a maiúsculas e minúsculas.

    
por DisgruntledGoat 02.11.2011 / 10:49
2

Encontrei a seguinte função em algum lugar da Internet e usei-a com grande eficácia. Coloque isso no seu ~/.bashrc :

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

Agora recarregue seu shell: exec bash . Você agora tem um novo comando, que você pode usar assim:

hgrep ssh

Ele mostrará uma lista de comandos correspondentes do seu histórico. Para executar um comando, digite ! seguido pelo número do comando. Aqui está um exemplo:

~:$ hgrep scp
  207  tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
  421  tn scp scott-laptop __HOST__:Scott\ Severance.asc .
  422  tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
  468  tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  469  tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207

Eu gosto dessa abordagem melhor do que Ctrl + R porque permite pesquisas muito mais flexíveis, e posso ver vários resultados de uma vez.

    
por Scott Severance 09.11.2011 / 04:14
2

Coloque isso no seu ~/.bashrc :

alias hgrep='history | grep --color=auto '

exemplo:

    
por hadj messaoud 15.10.2017 / 12:59
1

A história é boa, mas limitada - eu prefiro configurar meu ambiente bash para que eu registre todos os comandos que já executei, além do diretório no qual eles foram executados. Eu corro um comando para listar todos os comandos que tenho executado no diretório atual, que eu posso canalizar para o grep etc - é chamado 'prato' ver:

link

Se você quiser ir direto ao assunto, basta colocar isso em seu .bashrc ( link )

Há também um comando realmente útil que você recebe gratuitamente chamado 'dishg' - ou prato global - que imprime todos os comandos já executados, independentemente do diretório. Obviamente, este é apenas útil quando usado com grep e cauda, etc ...

Eu tenho usado isso há anos e é literalmente a primeira coisa que eu instalo sempre que eu configuro uma nova caixa. Ele registra os comandos que você executa em arquivos de texto em um diretório oculto (~ / .dish) .. Eu nunca tive um problema com o espaço em disco ...

    
por 26.08.2018 / 01:53
1

Se você usar o shell no Emacs ( M-x shell ) você pode usar M-r (é equivalente a Ctrl + R em um terminal ).

    
por N.N. 26.08.2012 / 17:33
0

Queria escrever isso como um comentário para @ ssmy mas não conseguiu a formatação no comentário para cooperar.

Depois de pesquisar o histórico com history | grep ssh , você poderá executar o comando desejado digitando o número precedido por um ponto de exclamação, por exemplo, !42 .

Exemplo:

$ history | grep ssh
  5 ssh [email protected]
 13 ssh [email protected]
 42 ssh [email protected]
$ !42
    
por magikMaker 31.01.2018 / 22:12