Jak znaleźć historię poleceń powłoki od czasu utworzenia maszyny?

23

Stworzyłem maszynę wirtualną Ubuntu kilka tygodni temu i od tego czasu pracuję nad projektami.

Teraz chciałbym znaleźć składnię niektórych poleceń, które wpisałem w terminalu tydzień temu, ale otworzyłem i zamknąłem okno terminala i kilkakrotnie ponownie uruchomiłem maszynę.

Jak mogę uzyskać historypolecenie powrotu do pierwszego polecenia, które wpisałem po utworzeniu komputera?
Czy jest jeszcze inne miejsce, w którym wszystkie polecenia są przechowywane w Ubuntu?

Edward Tanguay
źródło
2
O ile wiem, nie możesz. Możesz cofnąć się tylko do momentu ustawienia bufora historii. Jeśli pytasz o pakiet, który możesz zainstalować, aby w nieskończoność zapisywać historię poleceń w przyszłości, być może powinieneś zmienić swoje pytanie.
RobotHumans

Odpowiedzi:

26

Uzyskanie wszystkich poleceń może być lub może nie być możliwe. Zależy to od liczby wykonanych poleceń i od ustawienia limitu historii.

Możesz jednak zobaczyć, że lista historii jest tutaj przechowywana

/home/<YOUR_USERNAME>/.bash_history

Powiązane pytanie (do obsługi historii wielu powłok):

Czy możliwe jest natychmiastowe zapisanie do .bash_history?

Web-E
źródło
3
To nieprawda, że ​​historia jest zapisywana tylko z jednego terminala / powłoki. Po uruchomieniu historywyświetla historię bieżącej powłoki jako najnowszą oraz historię wszystkich innych powłok (w tym powłok z poprzednich sesji, w tym z różnych cykli zasilania) przed tym. Wszystkie instancje powłoki zapisują swoją historię do .bash_historymomentu wyjścia. Przed tym punktem żadne instancje nie zapisują go tam automatycznie.
Eliah Kagan
6

Domyślnie nie ma miejsca, w którym wszystkie polecenia są rejestrowane i przechowywane w nieskończoność, chociaż ~/.bash_historyzawiera kilka ostatnich poleceń (jeśli używasz bash, który jest domyślną powłoką w Ubuntu).

Jeśli chcesz, aby każde polecenie zostało bashzapisane na zawsze , musisz je skonfigurować samodzielnie. Na przykład możesz umieścić w ~/.bashrcpliku następujące polecenie , aby zapisać w pliku wszystkie polecenia wpisane w bashpowłoce ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Powyżej ustawia pułapkę DEBUG, która jest wykonywana tuż przed wykonaniem zwykłego polecenia. callerWbudowaną służy do badania, czy polecenie jest wpisane na interaktywnej powłoki lub prowadzonym przez coś podobnego ~/.bashrc. Wartość ${BASH_COMMAND}zawiera aktualnie wykonywane polecenie.

Richard Hansen
źródło
Chciałbym zauważyć, że w systemie macOS ta technika rejestruje również update_terminal_cwdplik historii, który jest poleceniem, którego użytkownik nie uruchamia, ale jest uruchamiany automatycznie.
Ashish Ahuja
5

Interesujące może być również wyszukiwanie w historii poprzednich poleceń. Możesz przeszukać historię w wierszu poleceń, naciskając, Ctrl+ra następnie wpisując litery, które chcesz dopasować. Jeśli masz więcej niż jedno pasujące polecenie, naciśnij Ctrl+rponownie. Aby wyjść z wyszukiwania wstecznego, naciśnij Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html

Sepero
źródło
4

Możesz cofnąć się tylko o ile ustawiony jest limit historii; gdy osiągnie ten punkt, historia zacznie być nadpisywana. W przyszłości można jednak mieć większy rozmiar historii. Umieść to w swoim .bashrc i określ wartość (moja jest ustawiona na 1000):

export HISTSIZE=1000

źródło