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”?

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.


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


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ę


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


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.


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.




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


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 me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$ 42
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.