.bash_history: Czy zawsze rejestruje każde polecenie, które kiedykolwiek wykonałem?


Chciałbym mieć możliwość przeglądania historii moich poleceń (do początku użytkownika).
Czy jest jakaś gwarancja, że ​​.bash_history będzie nadal dodawane?
Jeśli istnieje limit, w którym plik zacznie się obcinać (miejmy nadzieję, że od początku), czy istnieje sposób na usunięcie tego ograniczenia?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Istnieje wiele zmiennych środowiskowych, które kontrolują działanie historii basha. Poniżej znajduje się odpowiedni fragment strony podręcznika bash:
HISTCONTROL
A colon-separated list of values controlling how commands are saved on the history list. If the list of values includes ignorespace, lines which
begin with a space character are not saved in the history list. A value of ignoredups causes lines matching the previous history entry to not be
saved. A value of ignoreboth is shorthand for ignorespace and ignoredups. A value of erasedups causes all previous lines matching the current
line to be removed from the history list before that line is saved. Any value not in the above list is ignored. If HISTCONTROL is unset, or does
not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value of HISTIGNORE. The second and
subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTCONTROL.
HISTFILE
The name of the file in which command history is saved (see HISTORY below). The default value is ~/.bash_history. If unset, the command history
is not saved when an interactive shell exits.
HISTFILESIZE
The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, by
removing the oldest entries, to contain no more than that number of lines. The default value is 500. The history file is also truncated to this
size after writing it when an interactive shell exits.
HISTIGNORE
A colon-separated list of patterns used to decide which command lines should be saved on the history list. Each pattern is anchored at the begin-
ning of the line and must match the complete line (no implicit `*' is appended). Each pattern is tested against the line after the checks speci-
fied by HISTCONTROL are applied. In addition to the normal shell pattern matching characters, `&' matches the previous history line. `&' may be
escaped using a backslash; the backslash is removed before attempting a match. The second and subsequent lines of a multi-line compound command
are not tested, and are added to the history regardless of the value of HISTIGNORE.
HISTSIZE
The number of commands to remember in the command history (see HISTORY below). The default value is 500.

Aby odpowiedzieć bezpośrednio na pytania:
Nie, nie ma gwarancji, ponieważ historia może być wyłączona, niektóre polecenia mogą nie być przechowywane (np. Zaczynając od białych znaków) i może istnieć ograniczenie rozmiaru historii.
Odnośnie ograniczenia rozmiaru historii: jeśli wyłączysz
HISTSIZE
i
HISTFILESIZE
:
unset HISTSIZE
unset HISTFILESIZE

nie pozwolisz powłoce na obcięcie twojego pliku historii. Jeśli jednak masz instancję powłoki działającą na tych dwóch zmiennych, spowoduje ona obcięcie historii przy wyjściu, więc rozwiązanie jest raczej kruche. W przypadku, gdy absolutnie musisz zachować długoterminową historię powłoki, nie powinieneś polegać na powłoce i regularnie kopiować pliki (na przykład używając zadania cron) do bezpiecznej lokalizacji.
Obcięcie historii zawsze powoduje najpierw usunięcie najstarszych rekordów, jak wskazano w powyższym fragmencie strony podręcznika.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

man bash
to twój przyjaciel: zmienna
HISTFILESIZE
:

Maksymalna liczba wierszy zawartych w pliku historii. Gdy tej zmiennej zostanie przypisana wartość, plik historii jest w razie potrzeby obcinany, usuwając większość
stare rekordy zawierają nie więcej niż tę liczbę wierszy. Wartość domyślna to 500. Plik historii jest również obcinany do tego rozmiaru po zapisaniu kiedy
wyjść z interaktywnej powłoki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chcesz, aby wszystkie polecenia ze wszystkich sesji były natychmiast dodawane do historii (abyś mógł używać poleceń z jednej sesji naraz w drugiej), możesz umieścić następujące wiersze w swoim .bashrc:
unset HISTSIZE
unset HISTFILESIZE
HISTCONTROL=erasedups# append to the history file, don't overwrite it
shopt -s histappend
# multi-line commands should be stored as a single command
shopt -s cmdhist# sharing of history between multiple terminals
# histfile has to be read and saved after each command execution
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"

Więcej informacji na temat tych poleceń można znaleźć tutaj:

zapisz historię bash w wielu oknach terminala
https://unix.stackexchange.com ... 55135
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zauważ też. Domyślnie, jeśli uruchamiasz wiele sesji logowania (zwykle mam 2 lub 3 okna putty zalogowane na tym samym serwerze), nie widzą swojej historii.
Okazuje się też, że kiedy wylogowuję się ze wszystkich muszelek, ostatnia jest tą, która jest zapisywana z powrotem do pliku (czyli widoczna, gdy zaczynam pracę następnego dnia). Domyślam się, że bash zachowuje historię w pamięci, a następnie zrzuca ją do pliku przy wyjściu, przynajmniej takie jest moje przypuszczenie na podstawie tego, co widzę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Adam zasugerował, że usunięcie ograniczeń rozmiaru nie eliminuje tego, ale
możesz uniknąć innych instancji powłoki, aby zmienić HISTSIZE, HISTFILESIZE, ...
ustawiając na nich flagę readonly w/etc/profile.
unset HISTSIZE
unset HISTFILESIZE
readonly HISTFILE HISTFILESIZE HISTSIZE HISTCONTROL HISTIGNORE HISTTIMEFORMAT

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się