Якщо я біжу history, я бачу свої останні виконані команди.
Але якщо я tail -f $HISTFILEабо tail -f ~/.bash_historyвони не отримують в списку.
Чи закривається файл, є тимчасове місцеположення чи щось подібне?
Якщо я біжу history, я бачу свої останні виконані команди.
Але якщо я tail -f $HISTFILEабо tail -f ~/.bash_historyвони не отримують в списку.
Чи закривається файл, є тимчасове місцеположення чи щось подібне?
Відповіді:
Bash підтримує список команд всередині пам'яті під час роботи. Вони записуються .bash_historyпри виході :
Коли інтерактивна оболонка виходить, останні рядки $ HISTSIZE копіюються зі списку історії у файл, названий $ HISTFILE
Якщо ви хочете змусити записувати історію команд, ви можете скористатися history -aкомандою, яка:
Додайте нові рядки історії (рядки історії, введені з початку поточного сеансу Bash) у файл історії.
Також є -wваріант:
Запишіть поточну історію у файл історії.
що може вам більше подобатись залежно від того, як саме ви використовуєте свою історію.
Якщо ви хочете переконатися, що вони завжди написані негайно, ви можете помістити цю команду у свою PROMPT_COMMANDзмінну:
export PROMPT_COMMAND='history -a'
(Не відповідь, але я не можу додавати коментарі)
Якщо ви перевіряєте, .bash_historyоскільки ви просто хочете видалити певну команду (наприклад, містить чіткий пароль), ви можете безпосередньо видалити запис у пам'яті користувачем history -d <entry_id>.
Наприклад, припустимо, такий вихід:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
і ви хочете очистити exportлінію, ви можете просто досягти її:
history -d 928
bash зберігає його в робочій пам'яті, bash може бути налаштований так, щоб зберігати його, коли bash закривається або після кожної команди, і завантажуватися при запуску bash або за запитом.
Якщо ви налаштовуєте для збереження після кожної команди, то врахуйте наслідки запуску декількох башів одночасно. (командні рядки будуть переплетені)
bash. Я б написав "Це зберігається bashв пам'яті, ..."
Команди зберігаються в пам'яті (ОЗП) під час активного сеансу. Як тільки ви закриєте оболонку, список команд записується до .bash_historyвимкнення.
Таким чином, ви не побачите історію поточного сеансу в .bash_history.
bashзакінчення, що не передбачає перезавантаження (особливо в графічних середовищах, де ви можете відкривати та закривати термінали за своїм бажанням).
Під час роботи історія зберігається лише в пам'яті (за замовчуванням), якщо:
Hin echo "$-").0 і*(або якась інша дуже обмежуюча модель).Якщо будь-яке з перерахованих вище не вдається, жодна історія не зберігається в пам'яті, і, отже, жодна історія не може або не буде записана на диск.
Історія в пам'яті записується на диск, якщо:
Але лише тоді, коли оболонка виходить або якщо команди history -a(додавати) або history -w(записати) виконуються.
Для запуску негайного запису на диск можна використовувати змінну:
PROMPT_COMMAND='history -a'
які Воля appendв newісторії рядки в файл історія. Це рядки історії, введені з початку поточного сеансу bash, але ще не додані до файлу історії.
Або:
PROMPT_COMMAND='history -w'
Щоб перезаписати історію в HISTFILE зі списком із пам'яті.
Отже, ви можете видалити команду з історії в пам'яті:
$ history 5
6359 ls
6360 cd ..
6361 comand --private-password='^%^&$@#)!@*'
6362 top
6363 set +o | less
$ history -d 6361
$ history 5
6359 ls
6360 cd ..
6361 top
6362 set +o | less
$ history -w
І запишіть його на диск з останньою командою:
history -w # with `shopt -u histappend` unset
.bash_historyфайл випадково перебуває у власності root, речі припиняють свою роботу. У такому випадку перевірте право власності та використовуйтеsudoдля виправлення права власності, якщо це необхідно.