Come faccio a cercare nella mia cronologia della riga di comando i comandi che ho usato in precedenza?

157

Oltre alla visualizzazione della cronologia, esiste un modo per filtrare la cronologia?

Dire che voglio cercare un comando che inizia con "ssh"?

    
posta Blankman 02.11.2011 - 02:25
fonte

10 risposte

237

Premi Ctrl + R e digita ssh . Ctrl + R avvierà la ricerca dal comando più recente a quello vecchio (ricerca inversa). Se hai più di un comando che inizia con ssh , premi ripetutamente Ctrl + R fino a trovare la corrispondenza.

Una volta trovata la corrispondenza, puoi premere Invio per eseguire il comando o il cursore sinistra / destra per selezionare semplicemente il testo del comando.

Non esiste alcuna opzione inversa predefinita per Ctrl + R per invertire la direzione della ricerca ma qui troverai alcuni suggerimenti a riguardo.

    
risposta data Prince John Wesley 02.11.2011 - 02:32
fonte
80

Se vuoi solo cercare la tua cronologia, puoi semplicemente usare history | grep ssh , sostituendo ssh con qualsiasi cosa tu voglia cercare.

    
risposta data ssmy 02.11.2011 - 02:36
fonte
14

Premendo Ctrl + R si avvierà la modalità "reverse-i-search", digitando "ssh" si cercherà la cronologia per i comandi che contengono "ssh".

    
risposta data Sergey 02.11.2011 - 02:33
fonte
14

Faccio una leggera variazione di quanto sopra, funziona bene per me (se ti riferisci alla tua cronologia di bash

Nella mia cartella home creo un file chiamato

.inputrc

Inside goes this

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

Nota: quanto sopra non sembra funzionare più in 14.04 quindi questo fa la stessa cosa -

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

Quindi digitando comunque molto di un comando precedente che desidero & amp; utilizzando i pulsanti pagina su / pagina dn cerca la cronologia, iniziando sempre con la pagina su

    
risposta data doug 02.11.2011 - 02:42
fonte
6

Ecco un altro metodo che utilizza i comandi classici (più probabile che funzioni su distribuzioni). La cronologia dei comandi è memorizzata nel file .bash_history nella tua home directory, quindi puoi fare ciò:

grep "ssh" ~/.bash_history

Non dimenticare il flag -i se hai bisogno di ricerca maiuscole / minuscole.

    
risposta data DisgruntledGoat 02.11.2011 - 10:49
fonte
2

Ho trovato la seguente funzione da qualche parte su Internet e l'ho usata con grande effetto. Metti questo nel tuo ~/.bashrc :

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

Ora ri-carica la tua shell: exec bash . Ora hai un nuovo comando, che puoi usare in questo modo:

hgrep ssh

Ti mostrerà una lista di comandi corrispondenti dalla tua cronologia. Per eseguire un comando, digita ! seguito dal numero del comando. Ecco un esempio:

~:$ 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

Mi piace questo approccio meglio di Ctrl + R perché consente ricerche molto più flessibili e posso visualizzare più risultati contemporaneamente.

    
risposta data Scott Severance 09.11.2011 - 04:14
fonte
2

Metti questo in ~/.bashrc :

% Bl0ck_qu0te%

esempio:

    
risposta data hadj messaoud 15.10.2017 - 12:59
fonte
1

La storia è buona ma limitata - Preferisco configurare il mio ambiente bash in modo che io acceda tutti dei comandi che ho mai eseguito, oltre alla directory in cui sono stati eseguiti. Poi Eseguo un comando per elencare tutti i comandi che ho eseguito nella directory corrente, che posso reindirizzare a grep ecc. - Si chiama 'dish' vedi:

link

Se vuoi andare al sodo, puoi solo trovarlo nel tuo .bashrc ( link )

C'è anche un comando veramente utile che si ottiene gratuitamente chiamato 'dishg' - o dish globale - che stampa ogni comando eseguito, indipendentemente dalla directory. Ovviamente questo è utile solo se usato con grep e tail ecc ...

Lo uso da anni ed è letteralmente la prima cosa che installo ogni volta che installo una nuova scatola. Registra i comandi che esegui in file di testo in una directory nascosta (~ / .dish) .. Non ho mai avuto un problema con lo spazio su disco ...

    
risposta data 26.08.2018 - 01:53
fonte
1

Se usi shell in Emacs ( M-x shell ) puoi usare M-r (è equivalente a Ctrl + R in un terminale).

    
risposta data N.N. 26.08.2012 - 17:33
fonte
0

Volevo scrivere questo come commento a @ ssmy ma non è stato possibile ottenere la formattazione nel commento per collaborare.

Dopo aver cercato nella cronologia con history | grep ssh puoi quindi eseguire il comando che desideri digitando il suo numero preceduto da un punto esclamativo, ad es. % Co_de%.

Esempio:

$ history | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$ !42
    
risposta data magikMaker 31.01.2018 - 22:12
fonte

Leggi altre domande sui tag