Используете launchd для очистки истории bash?

Oct 23 2020

Уточнение: не historyсобираюсь уничтожать , ищу средства для периодической очистки launchdв целях безопасности

Используется cat /dev/null > ~/.bash_historyдля очистки истории bash, как это было замечено во многих обсуждениях * nix, как наиболее эффективный способ сделать это.

Поэтому я поместил его в сценарий оболочки, который запускается launchd, но через некоторое время я понял, что хотя он запускается, он не очищает историю.

Можно ли очистить историю bash таким образом с помощью сценария bash или это можно сделать только вручную от имени пользователя? Возможно, мне нужно запустить команду непосредственно в .plist, а не через сценарий bash?

Примечание: у меня есть другие скрипты, которые работают правильно через launchd, поэтому вопрос строго касается возможности очистки истории через агент.

Спасибо

Обновление: нашел этот классный сайт, который помогает генерировать launchdскрипты, если это кому-то помогает. За это ручаться не могу, но это намного проще, чем взломать XML. Кажется, он используется sh -cдля всех команд, поэтому не уверен, почему это так.

генератор списков запуска http://launched.zerowidth.com/

Ответы

5 Seamus Oct 23 2020 at 16:25

Ваша bashистория состоит из двух «историй», а не из одной. Одна из этих историй хранится в файле - ее размер / глубина определяется параметром HISTFILESIZE. Другая история кэшируется в памяти - ее размер регулируется параметром HISTSIZE.

Вы можете проверить размер / глубину ваших историй:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

Причина двух историй в том, что одна связана с каждым сеансом оболочки ( HISTSIZE), а другая история - это файл, ~/.bash_historyкоторый является «постоянным» и в конечном итоге получает истории сеансов, когда они превышают свою максимальную глубину или когда сеанс завершается. Это немного сложно объяснить, и рисунок ниже может помочь прояснить связь между этими двумя историями.

Но вернемся к вашей цели:

Вместо того, чтобы предпринимать шаги для удаления вашей истории, вы можете просто установить HISTSIZEи HISTFILESIZEна ноль ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Если это не то, что вы хотите, вы, конечно, можете периодически удалять файл истории, но знайте, что это не удаляет историю сеанса . Удалять файл истории путем создания .plistфайла необязательно. Команда history- это инструмент, который нужно использовать для этого задания ( history --helpподробности см. ). Следующая команда удалит историю одного сеанса :

$ history -cw

Удаление содержимого из файла истории ( ~/.bash_history) выполняется обычным образом:

$ > ~/.bash_history

Вы можете поместить один или оба из этих команд в crontab, но вы должны обеспечить оболочки по умолчанию , bashкак historyэто встроенный .

Для получения дополнительной информации по теме истории оболочки вы можете прочитать эти вопросы и ответы . Это касается zsh- нет bash, но принципы те же.

5 jksoegaard Oct 23 2020 at 14:41

Похоже, вы придумали очень запутанное решение проблемы отказа от bash_history.

Я бы посоветовал вместо периодической очистки истории из launchd просто отключить запись истории:

echo 'set +o history' >> ~/.bashrc

Закройте вкладку терминала и откройте новую - и ваша история больше не будет записываться.