Czy terminal przechowuje dane?

9

To jest coś, o czym chciałem wiedzieć od bardzo dawna, ale nigdy nie przyszedłem, by postawić pytanie.

Wiem, że w terminalu udostępnianym w dystrybucji Linuksa całą historię poleceń można zobaczyć za pomocą klawiszy strzałek (jeśli jest jakaś inna metoda, nie jestem tego świadomy), więc jak to się dzieje?

Czy jest miejsce, w którym terminal rejestruje wszystkie naciśnięcia klawiszy? Czy to jakiś bufor? Ale z drugiej strony, jeśli byłby to bufor, po pewnym czasie zostałby wyczyszczony, prawda?

Jak działa ten system?

Projjol
źródło
Napisz historię, aby uzyskać wszystkie wcześniej używane polecenia.
Sukupa91,
OP nie pyta o historypolecenie, ale jak działa cały ten system zapamiętywania starych poleceń.
Tarun,
przepraszam, że źle zrozumiałem ...
Sukupa91,
2
Zwróć uwagę na ten wyjątek: jeśli polecenie zaczyna się od spacji, nie zakończy się w historii.
Rinzwind,
@Rinzwind, dodaje się do historii, jeśli zaczyna się spacją.
GC 13

Odpowiedzi:

10

To jest historia poleceń i jest ona raczej cechą powłoki niż terminala.

Na Ubuntu (i wiele, jeśli nie większość innych dystrybucji Linuksa) domyślną powłoką do użytku interaktywnego jest Bash ( /bin/bash). Bash zachowuje Twoją historię, czyli listę ostatnich poleceń na ~/.bash_history. Po otwarciu powłoki (zwykle przez otwarcie terminala) ten plik jest odczytywany i ładowany do wewnętrznej historii tej powłoki. Po zamknięciu powłoki zmiany są zapisywane z powrotem w pliku. Domyślnie jest to ograniczone do ostatnich 500 poleceń.

Istnieje kilka zmiennych i opcji powłoki, które mogą zmienić zachowanie tego, jak to dokładnie działa. Zajrzyj na stronę bash man ( man bash), jeśli chcesz dowiedzieć się więcej. Po prostu wyszukaj HISTORIĘ (wpisz /^HISTORYi potwierdź za pomocą Enter, przejdź do następnego wyszukiwania za pomocą n)

Również jest tam o wiele więcej sposobów, aby przejść wokół historię niż tylko Upi Down:

  • Na przykład naciśnij Ctrl+ Ri część poprzedniego polecenia, bash przeszuka w historii pasujące polecenie, powtórz naciśnięcie Ctrl+, Rjeśli pierwsze dopasowanie nie jest tym, którego szukasz. (Zobacz „Polecenia manipulowania historią” na stronie podręcznika bash)

  • Skopiować /etc/inputrcdo ~/.inputrcodkomentowane liniach history-search-forwardi history-search-backwardw nich. Jeśli wpiszesz pierwsze litery polecenia i naciśniesz PgUp, bash wyświetli tylko polecenia z historii rozpoczynające się tymi samymi literami. (Działa tylko w skorupach otwartych po wprowadzeniu tej zmiany)

  • Wpisz !!zamiast polecenia w powłoce, powtórzy to ostatnie polecenie (zobacz 'ROZSZERZENIE HISTORII' na stronie podręcznika bash, aby uzyskać więcej informacji na ten temat).

Adaefon
źródło
1
A jeśli nie chcesz, aby przechowywał historię, umieść unset HISTFILEw swoim ~ / .bashrc. Następnie zachowa tylko historię w pamięci, czyszcząc ją dla każdego nowego wywołania powłoki.
CVn
10

Historia poleceń jest zazwyczaj przechowywana dla poszczególnych użytkowników w .bash_historypliku w katalogu domowym. Oznacza to, że każdy użytkownik ma swój zestaw poleceń, które wykonał.

Gdy otwartych jest wiele sesji terminali, mogą one wyświetlać różne polecenia po naciśnięciu klawisza strzałki, ale kiedy zamkniesz wszystkie okna terminali, historia z różnych sesji terminalu zostanie scalona do wspólnego ~/.bash_historypliku.

Tarun
źródło