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?
command-line
gnome-terminal
Projjol
źródło
źródło
history
polecenie, ale jak działa cały ten system zapamiętywania starych poleceń.Odpowiedzi:
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/^HISTORY
i 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/inputrc
do~/.inputrc
odkomentowane liniachhistory-search-forward
ihistory-search-backward
w 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).źródło
unset HISTFILE
w swoim ~ / .bashrc. Następnie zachowa tylko historię w pamięci, czyszcząc ją dla każdego nowego wywołania powłoki.Historia poleceń jest zazwyczaj przechowywana dla poszczególnych użytkowników w
.bash_history
pliku 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_history
pliku.źródło