Jest wiele pytań związanych z tym, ale wszystkie zaczynają się od (właściwego) założenia, że dane wyjściowe nie są rejestrowane.
Więc moje pytanie brzmi: gdzie?
Nigdzie: dane wyjściowe Basha (i innych znanych mi powłok) nie są rejestrowane.
Ponieważ dane wyjściowe są wyświetlane na ekranie, muszą być gdzieś przechowywane.
Jest, ale najprawdopodobniej nie w postaci zwykłego tekstu, a nawet nie na dysku (chociaż tak naprawdę zależy od emulatora terminala): najprawdopodobniej, a przynajmniej w większości przypadków, w segmencie pamięci przydzielonym przez emulator terminala.
Jednak na pewno nie jest on logowany do pliku, przynajmniej nie przez powłokę, i nie znam emulatorów terminali, które domyślnie logują dane wyjściowe do pliku.
Rzeczywiście nie oznacza to, że nie można zalogować wyjścia terminala: najpierw wspomnę o czymś, o czym myślę, że niewielu jest świadomych, ponieważ nigdy nie widziałem, żeby ktoś wspominał o tym przynajmniej tutaj na Ask Ubuntu: Konsola pozwala zapisać przewiń do pliku (być może istnieją inne emulatory terminali, które zapewniają taką funkcjonalność, Konsole jest jedynym, jaki znam), chociaż jest to ograniczone przez limit rozmiaru przewijania Konsoli.
Często nie jest to jednak bardzo przydatne i najprawdopodobniej będziesz chciał znaleźć „właściwe” rozwiązania do rejestrowania danych wyjściowych całej sesji w pliku ( Jak mogę zarejestrować wszystkie dane wejściowe i wyjściowe w sesji terminalowej? I odpowiedź Rona ).
Nie ma to nic wspólnego z twoją powłoką (
bash
), nie jest funkcją emulatora terminala, którego używasz. Jest on przechowywany w „przewijanym buforze” terminala. Nie byłem w stanie znaleźć żadnego jasnego wyjaśnienia, gdzie dokładnie jest to przechowywane, ale osobiste doświadczenie pokazało mi, że jest gdzieś przechowywane/tmp
.Jak sugeruje odpowiedź na powyższe pytanie, najprawdopodobniej jest przechowywany w pliku bezimiennym. Aby zobaczyć, co mam na myśli, otwórz nowy plik za pomocą edytora tekstu:
Napisz wiersz pliku do pliku i zapisz go. Teraz, gdy ten plik jest nadal otwarty, otwórz terminal i usuń go:
Ponieważ plik jest nadal otwarty
gedit
, możesz kontynuować zapisywanie w nim. Możesz nawet zapisać w niej kilka gigabajtów danych, mimo że plik został usunięty. Jest tak, ponieważ usunięcie pliku po prostu usuwa link wskazujący jego i- węzeł . Jeśli jego deskryptor pliku jest utrzymywany przez inny program, można do niego zapisać dane, co świadczy o tym, że w systemie plików nie ma już rzeczywistego łącza (pliku) odpowiadającego deskryptorowi pliku.Wszystko to oznacza, że historia twojego terminala jest prawdopodobnie zapisywana za pomocą takiej sztuczki, gdzieś w usuniętym pliku w
/tmp
. To, czego prawdopodobnie naprawdę chcesz, to po prostu zwiększyć rozmiar bufora przewijania w emulatorze terminali, abyś mógł przewinąć w górę i zobaczyć go. Szczegóły tego, jak to zrobić, zależą od używanego emulatora terminala. Większość z nich ma przełącznik wiersza poleceń, który pozwala ci to zrobić, a wielu ma również GUI sposób ustawienia. Na przykład wgnome-terminal
(domyślnym w Ubuntu) jest Edycja -> Preferencje -> Profile --- kliknij swój profil -> Edytuj -> Przewijanie -> Ogranicz przewijanie do NNN:źródło
script
jak opisano w zaakceptowanej odpowiedzi.Sesja terminalowa jest przechowywana w
.bash_history
pliku. Wpisz to w swoim terminaluecho $HISTFILE
, to da ci ścieżkę do.bash_history
pliku.źródło