Bash utrzymuje listę poleceń wewnętrznie w pamięci podczas działania. Są zapisywane .bash_history
przy wyjściu :
Po wyjściu powłoki interaktywnej ostatnie wiersze $ HISTSIZE są kopiowane z listy historii do pliku o nazwie $ HISTFILE
Jeśli chcesz wymusić zapisanie historii poleceń, możesz użyć history -a
polecenia, które:
Dołącz nowe linie historii (linie historii wprowadzone od początku bieżącej sesji Bash) do pliku historii.
Istnieje również -w
opcja:
Zapisz bieżącą historię do pliku historii.
co może ci bardziej odpowiadać w zależności od tego, jak korzystasz z historii.
Jeśli chcesz mieć pewność, że zawsze są one zapisywane natychmiast, możesz umieścić to polecenie w PROMPT_COMMAND
zmiennej:
export PROMPT_COMMAND='history -a'
.bash_history
plik przypadkowo stanie się własnością root, rzeczy przestaną działać. W takim przypadku sprawdź własność i użyj,sudo
aby naprawić własność w razie potrzeby.(Brak odpowiedzi, ale nie mogę dodawać komentarzy)
Jeśli sprawdzasz,
.bash_history
ponieważ chcesz po prostu usunąć określone polecenie (np. Zawierające wyraźne hasło), możesz bezpośrednio usunąć wpis w pamięci za pomocąhistory -d <entry_id>
.Załóżmy na przykład, że dane wyjściowe:
i chcesz oczyścić
export
linię, możesz to po prostu osiągnąć poprzez:źródło
bash zachowuje go w pamięci roboczej, bash można skonfigurować tak, aby zapisywał go po zamknięciu bash lub po każdym poleceniu, i by był ładowany po uruchomieniu bash lub na żądanie.
Jeśli skonfigurujesz zapisywanie po każdym poleceniu, zastanów się nad konsekwencjami uruchamiania wielu bashów jednocześnie. (wiersze poleceń będą przeplatane)
źródło
bash
pliku wykonywalnym. Napisałbym: „Jest przechowywanybash
w pamięci ...”Polecenia są zapisywane w pamięci (RAM), gdy sesja jest aktywna. Jak tylko zamkniesz powłokę, lista poleceń zostanie zapisana
.bash_history
przed zamknięciem.Dlatego nie zobaczysz historii bieżącej sesji w
.bash_history
.źródło
bash
zakończeniu, co nie oznacza ponownego uruchomienia komputera (szczególnie w środowisku graficznym, w którym można otwierać i zamykać terminale według własnego uznania).Podczas działania historia jest przechowywana tylko w pamięci (domyślnie), jeżeli:
H
in inecho "$-"
) jest ustawiona.0
i*
(lub jakimś innym bardzo restrykcyjnym wzorem).Jeśli którakolwiek z powyższych sytuacji zawiedzie, żadna historia nie jest zapisywana w pamięci, w wyniku czego historia nie może lub nie zostanie zapisana na dysku.
Historia w pamięci jest zapisywana na dysk, jeśli:
Ale tylko po wyjściu powłoki lub wykonaniu poleceń
history -a
(append) lubhistory -w
(write).Aby uruchomić natychmiastowy zapis na dysk, możesz użyć zmiennej:
które
append
tonew
linie historii do pliku historii. Są to wiersze historii wprowadzone od początku bieżącej sesji bash, ale jeszcze nie dołączone do pliku historii.Lub:
Aby zastąpić historię w HISTFILE listą z pamięci.
Możesz więc usunąć polecenie z historii w pamięci:
I zapisz go na dysk za pomocą ostatniego polecenia:
źródło