Jak wyszukiwać w historii wiersza poleceń polecenia, których wcześniej użyłem?

186

Czy oprócz przeglądania historii istnieje sposób na odfiltrowanie mojej historii?

Powiedz, że chcę wyszukać polecenie, które rozpoczęło się od „ssh”?

Blankman
źródło

Odpowiedzi:

271

Naciśnij Ctrl+ Ri wpisz ssh. Ctrl+ Rrozpocznie wyszukiwanie od ostatniego polecenia do starego (wyszukiwanie do tyłu). Jeśli masz więcej niż jedno polecenie, które zaczyna się od ssh, naciśnij Ctrl+ Rraz po raz, aż znajdziesz dopasowanie.

Po znalezieniu dopasowania możesz nacisnąć, Enteraby wykonać polecenie, lub kursor w lewo / w prawo, aby wybrać tekst polecenia.

Nie ma domyślnej opcji odwrotnej dla Ctrl+, Raby odwrócić kierunek wyszukiwania, ale tutaj znajdziesz kilka sugestii na ten temat.

Książę John Wesley
źródło
90

Jeśli chcesz tylko przeszukać swoją historię, możesz po prostu użyć history | grep ssh, zastępując ssh tym, co chcesz przeszukać.

ssmy
źródło
Korzystam z tej metody, ponieważ łączę, aby zobaczyć na liście każde polecenie pasujące do mojego filtra.
Pisu,
15

Robię niewielką odmianę powyższego, działa dobrze dla mnie (jeśli masz na myśli historię bashów)

W moim katalogu domowym tworzę plik o nazwie

.inputrc

Wewnątrz jest to

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

Uwaga: powyższe wydaje się już nie działać w 14.04, więc robi to to samo -

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

Następnie wpisując dowolną część poprzedniego polecenia, którego pragnę, a przyciskami strona w górę / strona dn przeszukuje historię, zawsze zaczynając od strony w górę

doug
źródło
jeśli masz uprawnienia roota, możesz edytować / etc / inputrc, więc będzie to działać dla wszystkich użytkowników.
Wolfy,
1
@doug, hmm .. Mam Ubuntu 15.04. To rozwiązanie działa, ale zepsuć Ctrl + LeftArrow / Ctrl + RightArrow. Problem wygląda jak przy tworzeniu pliku .inputrc, a nie z wpisami.
Ravi
Nie zapomnij ponownie powiązać .inputrc lub zamknąć terminal
David Brossard,
14

Naciśnięcie Ctrl+ Ruruchomi tryb „wstecz-i-szukaj”, wpisanie „ssh” przeszuka Twoją historię pod kątem poleceń zawierających „ssh”.

Siergiej
źródło
9

Oto kolejna metoda wykorzystująca klasyczne polecenia (bardziej prawdopodobne, że zadziała między dystrybucjami). Historia poleceń jest przechowywana w pliku .bash_historyw katalogu domowym, więc możesz to zrobić:

grep "ssh" ~/.bash_history

Nie zapomnij -iflagi, jeśli potrzebujesz wyszukiwania bez rozróżniania wielkości liter.

DisgruntledGoat
źródło
history | grep sshpokaże tylko ssh sesji tymczasowej, więc wybrałbym tę odpowiedź.
iniravpatel
3

Znalazłem następującą funkcję gdzieś w Internecie i wykorzystałem ją z doskonałym skutkiem. Umieść to w ~/.bashrc:

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

Teraz ponownie załadować powłokę: exec bash. Masz teraz nowe polecenie, którego możesz użyć w następujący sposób:

hgrep ssh

Pokaże ci listę pasujących poleceń z twojej historii. Aby uruchomić polecenie, wpisz !numer polecenia. Oto przykład:

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

Podobało mi się to podejście bardziej niż Ctrl+, Rponieważ umożliwia znacznie bardziej elastyczne wyszukiwanie i widzę wiele wyników jednocześnie.

Scott Severance
źródło
2

Umieść to w ~/.bashrc:

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

przykład:

hadj messaoud
źródło
1

Historia jest dobra, ale ograniczona - wolę skonfigurować środowisko bash, aby rejestrować wszystkie polecenia, które kiedykolwiek uruchomiłem, oprócz katalogu, w którym zostały uruchomione. Następnie uruchamiam polecenie, aby wyświetlić listę wszystkich poleceń Uruchomiłem w bieżącym katalogu, który mogę potokować do grep itp. - nazywa się to „dish” patrz:

https://github.com/wolfwoolford/dish

Jeśli chcesz przejść do pościgu, po prostu pobierz to w swoim .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Istnieje również bardzo przydatne polecenie, które otrzymujesz za darmo, o nazwie „dishg” - lub dish global - które wypisuje każde polecenie, które kiedykolwiek uruchomiono, niezależnie od katalogu. Oczywiście ten przydaje się tylko w połączeniu z grepem i ogonem itp.

Używam go od lat i jest to dosłownie pierwsza rzecz, którą instaluję za każdym razem, gdy instaluję nowe pudełko. Rejestruje polecenia uruchamiane w plikach tekstowych w ukrytym katalogu (~ / .dish) .. Nigdy nie miałem problemu z miejscem na dysku ...

David Woolford
źródło
0

Chciałem napisać to jako komentarz do @ssmy, ale nie mogłem uzyskać sformatowania w komentarzu do współpracy.

Po przeszukaniu historii history | grep sshmożesz wykonać żądane polecenie, wpisując jego numer poprzedzony wykrzyknikiem, np !42.

Przykład:

$ historia | grep ssh
  5 ssh [email protected]
 13 ssh [email protected]
 42 ssh [email protected]
$ 42
magikMaker
źródło