Come posso cercare nella mia cronologia della riga di comando i comandi che ho usato prima?


186

Oltre a visualizzare la cronologia, esiste un modo per filtrare la mia cronologia?

Dire che voglio cercare un comando che è iniziato con "ssh"?

Risposte:


271

Premi Ctrl+ Re digita ssh. Ctrl+ Rinizierà la ricerca dal comando più recente a quello precedente (ricerca inversa). Se hai più di un comando che inizia con ssh, premi Ctrl+ Rancora e ancora fino a trovare la corrispondenza.

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

Non esiste un'opzione inversa predefinita per Ctrl+ Rper invertire la direzione della ricerca, ma qui troverai alcuni suggerimenti a riguardo.


90

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


Uso questo metodo, perché collego per vedere nella lista tutti i comandi corrispondenti al mio filtro.
Pisu,

15

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

Nella mia cartella home creo un file chiamato

.inputrc

Dentro va questo

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

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

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

Quindi digitando comunque gran parte di un comando precedente che desidero e usando i pulsanti pagina su / pagina dn si cerca la cronologia, iniziando sempre con pagina su


se hai permessi di root, puoi modificare / etc / inputrc in modo che funzionerà per tutti gli utenti.
Wolfy,

1
@doug, hmm .. Ho Ubuntu 15.04. Questa soluzione funziona ma confonde i tasti Ctrl + Freccia sinistra / Ctrl + Freccia destra. Il problema è simile alla creazione del file .inputrc e non alle voci in esso contenute.
Ravi,

Non dimenticare di ricollegare .inputrc o chiudere il terminale
David Brossard,

14

Premendo Ctrl+ Rsi avvierà la modalità "reverse-i-search", digitando "ssh" si cercherebbero nella cronologia i comandi che contengono "ssh".


9

Ecco un altro metodo che utilizza i comandi classici (è più probabile che funzioni tra le distro). La cronologia dei comandi è memorizzata nel file .bash_historynella tua home directory, quindi puoi farlo:

grep "ssh" ~/.bash_history

Non dimenticare la -ibandiera se hai bisogno di ricerca senza distinzione tra maiuscole e minuscole.


history | grep sshmostrerò solo la sessione temporanea ssh quindi vorrei andare per questa risposta.
Iniravpatel

3

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

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

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

hgrep ssh

Ti mostrerà un elenco di comandi corrispondenti dalla tua cronologia. Per eseguire un comando, digitare !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+ Rperché consente ricerche molto più flessibili e posso vedere più risultati contemporaneamente.




1

La cronologia è buona ma limitata - Preferisco impostare il mio ambiente bash in modo da registrare tutti i comandi che ho mai eseguito, oltre alla directory in cui sono stati eseguiti. Quindi eseguo un comando per elencare tutti i comandi Ho eseguito nella directory corrente, che posso reindirizzare a grep ecc. - Si chiama 'piatto', vedi:

https://github.com/wolfwoolford/dish

Se vuoi andare al sodo, procedi semplicemente nel tuo .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

C'è anche un comando davvero utile che ottieni gratuitamente chiamato 'dishg' - o piatto globale - che stampa ogni comando mai 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 eseguiti in file di testo in una directory nascosta (~ / .dish) .. Non ho mai avuto problemi con lo spazio su disco ...


0

Volevo scrivere questo come commento a @ssmy ma non sono riuscito a far collaborare la formattazione nel commento.

Dopo aver cercato nella cronologia con history | grep sshte puoi quindi eseguire il comando che desideri digitando il suo numero anteposto con un punto esclamativo, ad es !42.

Esempio:

$ history | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$! 42
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.