Якщо я біжу 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
закінчення, що не передбачає перезавантаження (особливо в графічних середовищах, де ви можете відкривати та закривати термінали за своїм бажанням).
Під час роботи історія зберігається лише в пам'яті (за замовчуванням), якщо:
H
in 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
для виправлення права власності, якщо це необхідно.