чому видалення історії bash недостатньо?


15

Раніше я вважав, що видалення моєї історії башів було достатньо, щоб очистити історію башів, але вчора мій кіт псувався навколо правої частини моєї клавіатури, і коли я повернувся до свого комп'ютера, я побачив щось, що я набрав місяць тому, тоді я почав натисніть всі клавіші, як божевільний, шукаючи те, що могло викликати це. Виявляється клавіша UPARROW показує мою історію баш навіть після видалення .bash_history.

Як я можу видалити історію башів реально?


8
.bash_history перезаписується кожного разу, коли ви закриваєте bash shell. Тож якщо ви запустите bash, видалите .bash_history та вийдете з системи, ви нічого не зробите.
Шадур

14
Ваша кішка заслуговує величезної винагороди. Ви використовували Баш для як довго , не знайшовши у нього є командний рядок згадати і редагування? Ви просто повторюєте кожен командний рядок з нуля кожен раз чи щось? Це зробить оболонку дуже неприємною у використанні.
cas

@cas десять років. Тепер, коли ви це говорите, я натискаю Uparrow, щоб повторити команди, але я зрозумів це як своєрідну 'короткочасну' пам'ять довжиною не більше кількох рядків. Мене не попередили, що видалення .bash_history не видалить історію баш.
bunden

Видалення ~/.bash_historyдійсно видаляє ~/.bash_history.... але (якщо ви не вживаєте заходів для його запобігання, як, наприклад, очищення історії пам’яті, запустившись history -cперед тим, як вийти з системи або встановити її HISTFILE=/dev/nullабо просто unsetїї), bash просто збереже свою поточну історію ще раз, коли вона вийде . BTW, HISTSIZEenv var повідомляє bash скільки рядків історії, які потрібно зберегти в пам'яті, і HISTFILESIZEповідомляє bash максимальну кількість ліній історії, які потрібно зберегти. обидва вони можуть бути встановлені, наприклад, у вашому ~/.bashrc. PS: ваша кішка заслуговує на другу нагороду за те, що ви навчили вас цінного уроку :)
cas

@cas Я думаю, що видалення .bash_history має видалити історію баш. Мені це здається інтуїтивно зрозумілим. Те, що здається непривабливим, це історія -c, історія -w, змінні змінні .. Це гайки з точки зору досвіду користувача.
bunden

Відповіді:


26

У деяких випадках (деякі версії bash):

$ history -c; history -w

Або просто

$ history -cw

Буду чи очистити історію в пам'яті (вгору і стрілка вниз не матимуть ніяких команд в список) , а потім написати , що в $HISTFILEфайл (якщо $HISTFILEотримує усічений запущений екземпляр Баша).

Іноді bash вибирає не усікати $HISTFILEфайл навіть із histappendвимкненою опцією та $HISFILEZIZEвстановити 0.

У таких випадках параметр nuke завжди працює:

history -c; >$HISTFILE

Це очистить список історії команд, записаних у пам'яті, і всіх команд, раніше записаних у файл. Це забезпечить, що у запущеної оболонки немає записаної історії ні в пам'яті, ні на диску, однак, інші запущені екземпляри bash (де історія активна) можуть мати повну копію команд, прочитаних з $HISTFILEмоменту запуску bash (або коли a history -rвиконується) .

Якщо також потрібно, щоб нічого іншого (жодних нових команд) цього сеансу не було записано у файл історії, то це unset HISTFILEне завадить будь-якого подібного журналу.


1
Редагування HISTFILE та його виконання history -c && history -rзамінять вашу поточну історію на історію, змінену вручну. У деяких випадках це може бути краще, ніж викидати всю історію.
Мікко Ранталайнен

9

bashмає історію сеансу в пам'яті, яка записується у файл, якщо змінна оболонки HISTFILEвстановлена ​​на ім'я файлу при bashвиході.

Якщо ви видалите файл, на який вказує HISTFILE, вимкніть цю змінну та вийдете bash, цей сеанс оболонки не залишить постійної історії.

Якщо не HISTFILEвидалити змінну, а видалити файл, це просто спорожнить постійну історію, але історія поточного сеансу буде збережена при виході оболонки.


3
A history -c; history -wочистить пам'ять і історію файлів. Відміняти HISTFILE потрібно лише в тому випадку, якщо в історію не входитимуть ніяких подальших команд (не саме те, що було запропоновано IMhO).
Ісаак

-1

"Як я можу видалити історію башів реально?"

Вийдіть з bash, запустіть іншу оболонку, видаліть файл історії bash.

або

вийдіть, увійдіть в інший обліковий запис, який має дозвіл на запис у файл історії, видаліть файл історії.


-2

Залишаючи оболонку, робіть це все за один раз, як

echo "" > ~/.bash_history && history -c && exit

@roaima, ти абсолютно прав, дякую. Виправлено.
користувач853069
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.