24Aug

Jak korzystać z historii Bash w Linux lub MacOS Terminal

Powłoka bash jest standardowym środowiskiem terminala dołączonym do większości dystrybucji Linuksa, zawartym w macOSie i dostępnym do instalacji w systemie Windows 10. Zapamiętuje polecenia, które wpisujesz i zapisuje je w pliku historii. Prawdopodobnie znasz kilka podstaw historii basha, ale jest o wiele potężniejsza, niż możesz sobie wyobrazić.

Skróty klawiszowe

Aby przewinąć historię basha, możesz użyć kilku przydatnych skrótów klawiszowych basha. Naciśnij skróty, a polecenia, których używałeś poprzednio, pojawią się w monicie.

  • Strzałka w górę lub Ctrl + P : Przejdź do poprzedniego polecenia w historii. Naciśnij klawisz kilka razy, aby przejść wstecz za pomocą poleceń, których używałeś.
  • Strzałka w dół lub Ctrl + N : Przejdź do następnego polecenia w historii. Naciśnij klawisz kilka razy, aby przejść dalej przez polecenia, których używałeś.
  • Alt + R : Przywróć wszelkie zmiany w poleceniu, które wyciągnąłeś z historii, jeśli edytowałeś je w bieżącym wierszu.

Bash ma również specjalny tryb "przywracania", którego możesz używać do wyszukiwania wcześniej wykonanych poleceń, zamiast przewijać je jeden po drugim.

  • Ctrl + R : Przywołaj ostatnie polecenie pasujące do podanych znaków. Naciśnij ten skrót i zacznij pisać, aby wyszukać historię basha dla polecenia.
  • Ctrl + O : Uruchom polecenie znalezione przy pomocy Ctrl + R.
  • Ctrl + G : Opuść tryb wyszukiwania historii bez uruchamiania polecenia.

Wyświetl historię swojego basha

Możesz wydrukować całą historię basha na ekranie, wykonując jedną komendę:

historia

Zobaczysz listę wszystkich poleceń w historii bash wraz z liczbą po lewej stronie każdego z nich. Polecenie z "1" obok niego jest najstarszym poleceniem w historii basha, natomiast polecenie o najwyższym numerze jest najnowszym.

Możesz zrobić cokolwiek chcesz z wyjściem. Na przykład możesz przepuścić go do grepcommand, aby przeszukać historię poleceń.Historia

grep your_search

Możesz również potokować do polecenia ogon, aby wyświetlić tylko niewielką liczbę ostatnio wykonanych poleceń.Na przykład poniższe polecenie wyświetli 5 ostatnich wpisów w historii. Historia

ogon -5

Uruchom polecenie z twojej historii

Bash może szybko "rozwinąć" poprzednie polecenia lub rozwinąć je i zmodyfikować.Ta funkcja jest znana jako "rozszerzenie historii" i używa wykrzyknika, znanego jako "bang".Po prostu wpisz je w monicie i naciśnij Enter, aby uruchomić je tak, jakbyś uruchamiał inne polecenie.

Aby uruchomić określone polecenie z historii według jego numeru, użyj następującego polecenia:

! #

Na przykład, powiedzmy, że chcesz uruchomić 12. polecenie z historii bash. To polecenie z "12" po lewej stronie po uruchomieniu polecenia historii. Możesz wpisać następujące polecenie.

! 12

Aby ponownie uruchomić ostatnie uruchomione polecenie, wpisz następujące polecenie. Ma to taki sam efekt, jak naciśnięcie strzałki w górę raz, aby wyświetlić poprzednie polecenie, a następnie naciśnięcie klawisza Enter.

! !

Możesz również odnieść się do polecenia z określoną liczbą linii. Na przykład:! -2 uruchomi drugie, ostatnie polecenie, które uruchomiłeś.!!oznacza to samo co! -1.

Rozszerzenie to działa w dowolnym miejscu na linii. Możesz dodać wszystko, co chcesz przed lub po! !lub dowolne inne wyrażenia w tej sekcji. Na przykład możesz wpisać następujące polecenie, aby ponownie uruchomić ostatnie polecenie uruchamiane przez sudo, nadając mu uprawnienia root. Jest to szczególnie przydatne, jeśli zapomnisz dodać sudo przed uruchomieniem polecenia.

sudo! !

Lub na przykład możesz ponownie uruchomić poprzednie polecenie i potokować jego wynik do grep, aby wyszukać jakiś tekst.

! !|grep text

Aby wyszukać polecenie w historii i uruchomić je, wpisz następujące polecenie. Spowoduje to uruchomienie ostatniego polecenia pasującego do podanego tekstu:

! Text

Tak więc, jeśli ostatnio uruchomiłeś polecenie zaczynające się od polecenia ping, możesz uruchomić następujące polecenie, aby je wyszukać.Spowoduje to przeszukanie wstecz w historii, zlokalizowanie najnowszego polecenia rozpoczynającego się od "pi" i natychmiastowe uruchomienie:

! Pi

Możesz dołączyć: p do dowolnego z powyższych rozszerzeń, a bash wydrukuje polecenie do terminala bez jego uruchamiania. Jest to przydatne, jeśli chcesz potwierdzić, że wybierasz właściwe polecenie, zanim je uruchomisz.

! 12: p! !: p! Text: p

Wykorzystaj ponownie argumenty ze swojej historii

Bash pozwala ci również na uruchamianie nowego polecenia, ale użyj argumentów z poprzednich poleceń w historii. Może to pomóc w szybkim ponownym użyciu długich lub skomplikowanych argumentów bez konieczności ponownego wpisywania ich.

command! $

Na przykład powiedzmy, że uruchomiłeś polecenie touch /home/chris/ some_long_file_name_you_dont_want_to_type_again. Teraz chcesz uruchomić polecenie nano /home/chris/ some_long_file_name_you_dont_want_to_type_again. Zamiast pisać wszystko od zera, możesz uruchomić:

nano! $

!! Sprawi, że bash automatycznie uzupełni ostatni argument z poprzedniego polecenia.

To tylko wypełnia ostatni argument. Tak więc, jeśli uruchomisz ping google.com -c 4, a następnie uruchom ping! $, To po prostu rozwiniesz na "ping 4".

Aby naprawić tę sytuację, możesz użyć poniższej sztuczki, aby rozwinąć pierwszy argument na linii, zamiast ostatniego polecenia

! ^

Tak więc, jeśli uruchomiłeś ping google.com -c 4, a następnie uruchomiłeś ping! ^,bash rozszerzyłoby to na "ping google.com"

Aby wypełnić wszystkie argumenty użyte w poprzednim poleceniu, zamiast tylko jednego argumentu, użyłbyś następującego polecenia:

! *

Tak więc, jeśli uruchomiłeś ping!* zamiast tego, bash automatycznie uzupełniłby wszystkie argumenty użyte w poprzednim poleceniu

Możesz użyć tej samej sztuczki, której używasz do uruchamiania poleceń z historii, aby uzyskać od nich argumenty, wystarczy użyć następującego formularza:

command! abc:#

Na przykład wcześniej uruchomiliśmy polecenie sudo hostname ubuntu, jeśli uruchomimy następujące polecenie, bash będzie przeszukiwać wstecz historię, aby znaleźć ostatnie polecenie zaczynające się od liter, które wpisujemy, i wpisać argument, który określamy.uruchamiamy echo! su: 2, bash wyszuka ponownie, aby znaleźć ostatnie polecenie zaczynające się od "su" i wpisać jego drugi argument, którym jest "ubuntu".

Inne triki działają tak, jak można się spodziewać.Na przykład zastąpienie liczby gwiazdką, znaną jako symbol wieloznaczny, powoduje, że bash wypełnia wszystkie argumenty z polecenia:

command! Abc: *

Ponownie uruchom poprzednie polecenie i zmodyfikuj je

Bash pozwala również ponownie uruchomić poprzednie poleceniei podaj coś, co powinno zostać zmienione. Może to być przydatne do korekty literówki w poleceniu. Na przykład następujące polecenie ponownie uruchom poprzednie polecenie, zastępując tekst "abc" tekstem "xyz".

^ abc ^ xyz

Na przykład, jeśli przypadkowo uruchomiłeś ping gogle.com, możesz uruchomić ^ gog ^ goog, a bash uruchomi komendę ping google.com.

Gdzie przechowywana jest twoja historia i jak to czyścić

Powłoka bash przechowuje historię poleceń, które uruchomiłeś w pliku historii twojego konta użytkownika w ~ /. bash_history domyślnie. Na przykład, jeśli twoja nazwa użytkownika jest bob, znajdziesz ten plik w /home/bob/. bash_history.

Ponieważ twoja historia jest przechowywana w pliku, utrzymuje się pomiędzy sesjami. Możesz uruchomić niektóre polecenia, wylogować się, wrócić następnego dnia, a te polecenia będą nadal w pliku historii, gotowe do wyświetlenia i użycia. Każde konto użytkownika ma swój własny plik historii z osobną historią poleceń.

Aby wyczyścić historię bash, możesz uruchomić następujące polecenie. Spowoduje to usunięcie zawartości pliku. bash_history twojego konta użytkownika:

-c

Bash domyślnie zapamiętuje ograniczoną liczbę poleceń, co zapobiega zbyt dużemu powiększaniu się pliku historii. Liczba wpisów historii bash jest kontrolowana przez HISTSIZEvariable. Wartością domyślną jest zwykle 500 lub 1000 wpisów. Możesz uruchomić następujące polecenie, aby wyświetlić rozmiar historii bash w systemie.

echo $ HISTSIZE

Aby ustawić historię na zero, uruchom następujące polecenie.

HISTSIZE = 0

Dla bieżącej sesji bash nie przechowuje żadnych wpisów historii, chyba że uruchomisz polecenie takie jak HISTSIZE = 1000, aby ustawić je z powrotem na określoną liczbę wpisów.

Jak zignorować spacje i duplikaty Bash

pozwala ignorować wpisy historii zaczynające się spacją, jeśli ustawisz HISTCONTROLvariable na ignorespace.

HISTCONTROL = ignorespace

Wpisz spację przed poleceniem przed uruchomieniem jej w powłoce bash, a polecenie uruchomi się normalnie, ale nie pojawi się w historii, jeśli ta zmienna jest włączona. Dzięki temu możesz zachować nieco czystszą historię, wybierając opcję uruchamiania poleceń bez wyświetlania ich w historii.

Bash pozwala także ignorować zduplikowane polecenia, które mogą zaśmiecić twoją historię.Aby to zrobić, ustaw HISTCONTROL na ignorowane.

HISTCONTROL = ignoredups

Aby użyć zarówno funkcji ignorespace, jak i ignoredups, ustaw zmienną HISTCONTROL na ignoreboth.

HISTCONTROL = ignoreboth

Zwróć uwagę, że ustawiane zmienne bash będą obowiązywały tylko dla bieżącej sesji. Musisz je dodać do pliku. bashrc Twojego konta użytkownika, aby te wartości były automatycznie ustawiane podczas każdej rozpoczętej sesji bash, jeśli wolisz.

Powłoka basha to złożone narzędzie z wieloma opcjami. Zapoznaj się z sekcjami Wbuduj historię i rozbudowę historii w oficjalnej instrukcji basha, aby uzyskać bardziej szczegółowe informacje i inne zaawansowane triki, których możesz użyć.