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


Oltre a visualizzare la cronologia, c'è un modo per filtrare la mia cronologia?

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


148
2017-11-02 01:25


origine




risposte:


stampa Ctrl+R e scrivi ssh. Ctrl+R inizierà la ricerca dal comando più recente a quello vecchio (ricerca inversa). Se hai più di un comando che inizia con ssh, Stampa Ctrl+R ancora e ancora fino a trovare la corrispondenza.

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

Non esiste un'opzione di inversione predefinita per Ctrl+R per invertire la direzione della ricerca ma Qui troverai alcuni suggerimenti a riguardo.


230
2017-11-02 01:32





Se vuoi solo cercare la tua cronologia, puoi semplicemente usarla history | grep ssh, sostituendo ssh per qualunque cosa tu voglia cercare.


76
2017-11-02 01:36



Io uso questo metodo, perché collego per vedere in elenco ogni comando che corrisponde al mio filtro. - Pisu


urgente Ctrl+R inizierà la modalità "reverse-i-search", digitando "ssh" cercherebbe la tua cronologia per i comandi che contengono "ssh".


13
2017-11-02 01:33





Faccio una leggera variazione di quanto sopra, funziona bene per me (se ti riferisci alla tua storia di 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 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 gran parte di un comando precedente che desidero e usando i pulsanti page up / page dn cerca la cronologia, iniziando sempre con page up


13
2017-11-02 01:42



se hai permessi di root, puoi modificare / etc / inputrc così questo funzionerà per tutti gli utenti. - Wolfy
@doug, hmm .. Ho Ubuntu 15.04. Questa soluzione funziona ma incasina i tasti Ctrl + LeftArrow / Ctrl + RightArrow. Il problema si presenta con la creazione del file .inputrc e non con le voci al suo interno. - Ravi
Non dimenticare di rebindare .inputrc o chiudere il terminale - David Brossard


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 directory home, così puoi farlo:

grep "ssh" ~/.bash_history

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


5
2017-11-02 09:49





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, digitare ! seguito dal numero di 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.


2
2017-11-09 03:14





Metti questo nel tuo ~/.bashrc :

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

esempio:


2
2017-10-15 10:59





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


1
2017-08-26 15:33





La storia è buona ma limitata - preferisco impostare il mio ambiente bash in modo che effettui il log tutti dei comandi che ho mai eseguito, oltre alla directory in cui sono stati eseguiti. Quindi eseguo un comando per elencare tutti i comandi che 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, basta farlo nel tuo .bashrc (https://github.com/wolfwoolford/dish/blob/master/dishrc)

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 imposto 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 ...


1
2017-08-25 23:53





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

Dopo aver cercato nella storia con history | grep ssh puoi quindi eseguire il comando desiderato digitandone il numero preceduto da un punto esclamativo, ad es. !42.

Esempio:

$ storia | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$! 42

0
2018-01-31 21:12