Como pesquiso no histórico da linha de comando os comandos que eu usei antes?

186

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

Digamos que eu queira procurar um comando que comece com "ssh"?

Blankman
fonte

Respostas:

271

Pressione Ctrl+ Re digite ssh. Ctrl+ Riniciará a pesquisa do comando mais recente para o antigo (pesquisa reversa). Se você tiver mais de um comando que começa com ssh, pressione Ctrl+ Rrepetidamente até encontrar a correspondência.

Depois de encontrar a correspondência, você pode pressionar Enterpara executar o comando ou o cursor esquerda / direita para selecionar apenas o texto do comando.

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

Prince John Wesley
fonte
90

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

ssmy
fonte
Eu uso esse método, porque vinculo para ver na lista todos os comandos correspondentes ao meu filtro.
Pisu
15

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

Na minha pasta pessoal, crio um arquivo chamado

.inputrc

Por dentro vai isso

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

Nota: o item acima parece não funcionar mais na versão 14.04, portanto, é o mesmo -

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

Em seguida, digitar o comando anterior que desejar e usar os botões page up / page dn pesquisam o histórico, sempre começando com page up

doug
fonte
se você possui permissões de root, pode editar o arquivo / etc / inputrc, para que isso funcione para todos os usuários.
Wolfy
1
@doug, hmm .. Eu tenho o Ubuntu 15.04. Esta solução funciona, mas atrapalha as teclas Ctrl + LeftArrow / Ctrl + RightArrow. O problema parece com a criação do arquivo .inputrc e não com as entradas nele.
Ravi
Não se esqueça de religar .inputrc ou fechar o terminal
David Brossard
14

Pressionar Ctrl+ Riniciará o modo "reverse-i-search"; digitar "ssh" pesquisará no seu histórico comandos que contenham "ssh".

Sergey
fonte
9

Aqui está outro método usando comandos clássicos (com maior probabilidade de funcionar em distribuições). O histórico de comandos é armazenado no arquivo .bash_historyno diretório inicial, para que você possa fazer isso:

grep "ssh" ~/.bash_history

Não esqueça a -ibandeira se precisar de uma pesquisa sem distinção entre maiúsculas e minúsculas.

DisgruntledGoat
fonte
history | grep sshmostrará apenas o ssh da sessão temporária, então eu iria para esta resposta.
iniravpatel 25/06
3

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

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

Agora re-carregar seu shell: exec bash. Agora você tem um novo comando, que pode ser usado 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 mais dessa abordagem do que Ctrl+ Rporque ela permite pesquisas muito mais flexíveis e posso ver vários resultados ao mesmo tempo.

Scott Severance
fonte
2

Coloque isso no seu ~/.bashrc:

alias hgrep = 'histórico | grep --color = auto '

exemplo:

hadj messaoud
fonte
1

O histórico é bom, mas limitado - prefiro configurar meu ambiente bash para registrar todos os comandos que já executei, além do diretório em que foram executados. Em seguida, executei um comando para listar todos os comandos Eu corri no diretório atual, que eu posso canalizar para grep etc - é chamado de 'prato' veja:

https://github.com/wolfwoolford/dish

Se você quiser ir direto ao assunto, basta fonte isso no seu .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Também existe um comando realmente útil que você obtém de graça chamado 'dishg' - ou dish global - que imprime todos os comandos já executados, independentemente do diretório. Obviamente, este só é útil quando usado com grep e tail, etc ...

Uso-o há anos e é literalmente a primeira coisa que instalo sempre que configuro uma nova caixa. Ele registra os comandos que você executa nos arquivos de texto em um diretório oculto (~ / .dish). Nunca tive problemas com espaço em disco ...

David Woolford
fonte
0

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

Após pesquisar o histórico, history | grep sshvocê pode executar o comando que deseja, digitando seu número anexado com um ponto de exclamação, por exemplo !42.

Exemplo:

$ história | grep ssh
  5 ssh [email protected]
 13 ssh [email protected]
 42 ssh [email protected]
$! 42
magikMaker
fonte