Що може спричинити несподіване очищення моєї історії башти?


16

Сьогодні я помітив, що моя історія басу очищена повністю. Я ні виконав, history -cні видалив .bash_historyфайл. Окрім видалення .bash_historyфайлу та history -cяк можна очистити історію помилок?


2
Це могло статися напр >.bash_history. Можливо, хтось був у вашому обліковому записі і намагався приховати його сліди. Перевірте незвичні часи входу за допомогою last, шукайте через /var/log/auth.log(залежно від вашої системи).
ott--

Відповіді:


17

Під час закриття декількох екземплярів bash одночасно, відомий стан перегонів, який може призвести до очищення історії. Це відбувається тому, що при записуванні файлу історії bash блокування не використовується.

Chet Ramey (поточний супровідник басу) дав хороший підсумок умов цього питання:

Поточний (bash-4.3-devel) код працює приблизно так, не допускаючи помилок (lib / readline / histfile.c: history_do_write ()):

  • перейменувати (histfile, histfile ~)
  • відкрити файл з O_CREAT | O_TRUNC
  • буфер malloc досить великий, щоб вмістити всі дані історії
  • написати всі записи історії в один дзвінок написати (2)
  • закрити файл
  • від’єднати (істор. файл ~)

Код bash-4.2 працює так само, за винятком того, що він не створює резервну копію файлу історії. Кожна оболонка робить те ж саме, коли вона завершується, припускаючи, що histappend не встановлено, як у вашій конфігурації.

Існує кілька способів, коли файл історії може закінчитися нульовою довжиною: malloc може вийти з ладу або записати не може. У bash-4.2 вже занадто пізно робити що-небудь щодо усіченого файлу історії на той момент. У bash-4.3 попередній файл історії буде відновлено.

Цей потік списку розсилки з помилки-баш містить гідне обговорення проблем, можливих рішень та проблем, пов'язаних із цим.

Є й інші можливості:

  • У якийсь момент ваш HISTSIZEабо HISTFILESIZEбув встановлений на 0
  • У якийсь момент ваша лінія читання history-sizeбула встановлена ​​на 0
  • Хтось, навмисно чи ненавмисно, витирав історію басу (через > "$HISTFILE"або подібне)

В останньому випадку ви, можливо, захочете перевірити, чи хтось не має доступу до вашого облікового запису і намагається приховати їхні сліди грубо. Подивіться на last, /var/log/auth(або /var/log/secureна CentOS / RHEL), і якщо у вас є, будь-який процес бухгалтерського обліку та / або програмне забезпечення , аудит може бути встановлений.


1

Як я випадково видалив історію башу:

Я розгортав свій власний сценарій для читання альтернативних терміналів із перших принципів: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

а потім тестувати його в терміналі. Цей GNU Readline має вбудований розмір історії та вбудовані інструкції щодо збереження історії, тому розмір історії може бути дефолтним, і, таким чином, вся ваша історія буде здута.

Відновлення історії, якщо залишилося в пам'яті:

Якщо ви впіймаєте його перед перезавантаженням, або якщо термінал залишився відкритим перед очищенням, ви зможете знайти свою історію в пам'яті. Запустити history | cut -c 8- > histback_user1.txtна всіх терміналах, які залишаються відкритими і для кожного користувача. Якщо це створює файл із розширеною історією, його можна замінити ~/.bash_historyна histback_user1.txt. Також перевірте історію всіх останніх користувачів у системі, а також історію root. Це легко випадково очистити історію баш за багатьох обставин, тому, якщо ви хочете бути впевненими у втраті історії, вам потрібно щоденний сценарій резервного копіювання.


Дякую . Я не знаю, що, до біса, трапилося, але вчора моя історія була скинута, і я до цього часу не помітив цього. Але, пощастило мені, у мене було не одне вікно терміналу, а 10 (!). Зараз все добре.
Марк.2377
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.