¿Estás usando launchd para borrar el historial de bash?

Oct 23 2020

Aclaración: no busco destruir history, busco medios para purgarlo periódicamente launchdpor motivos de seguridad

He estado usando cat /dev/null > ~/.bash_historypara borrar el historial de bash como se ha visto en muchas conversaciones * nix como la forma más efectiva de hacerlo.

Así que lo puse en un script de shell que se ejecuta launchd, pero después de un tiempo me di cuenta de que, aunque se ejecuta, no está borrando el historial.

¿Es posible borrar el historial de bash de esta manera a través del script bash o solo se puede hacer manualmente como usuario? ¿Quizás necesito ejecutar el comando directamente en el .plist y no a través de un script bash?

Nota: tengo otros scripts que se ejecutan correctamente a través de launchd, por lo que la pregunta es estrictamente sobre poder borrar el historial a través de un agente

Gracias

Actualización: Encontré este sitio genial que ayuda a generar launchdscripts si esto ayuda a alguien. No puedo responder por ello, pero es mucho más fácil que piratear XML. Sin sh -cembargo, parece usarse para todos los comandos, así que no estoy seguro de por qué.

generador plist launchd http://launched.zerowidth.com/

Respuestas

5 Seamus Oct 23 2020 at 16:25

Tu bashhistoria consta de dos "historias", no una. Uno de estos historiales se almacena en un archivo; su tamaño / profundidad se rige por el parámetro HISTFILESIZE. El otro historial se almacena en la memoria caché; su tamaño se rige por el parámetro HISTSIZE.

Puede comprobar el tamaño / profundidad de sus historias:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

El motivo de dos historiales es que uno está asociado con cada sesión de shell ( HISTSIZE), mientras que el otro historial es un archivo ~/.bash_historyque es "permanente" y, finalmente, recibe los historiales de sesión cuando superan su profundidad máxima o cuando la sesión finaliza. Eso es un poco complicado de explicar, y la imagen a continuación puede ayudar a aclarar la relación entre estas dos historias.

Pero volvamos a tu objetivo:

En lugar de tomar medidas para eliminar su historial, simplemente puede establecer HISTSIZEy poner HISTFILESIZEa cero ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Si eso no es lo que desea, ciertamente puede eliminar el archivo del historial periódicamente, pero sepa que eso no elimina el historial de la sesión . .plistNo es necesario eliminar su archivo de historial creando un archivo. El historycomando es la herramienta que se debe utilizar para este trabajo (consulte los history --helpdetalles). El siguiente comando eliminará el historial de una sesión :

$ history -cw

La eliminación del contenido del archivo histórico ( ~/.bash_history) se realiza de forma convencional:

$ > ~/.bash_history

Puede poner uno o ambos de estos comandos en a crontab, pero deberá asegurarse de que el shell predeterminado sea el bashque historyestá integrado .

Para obtener algunos antecedentes relacionados sobre el tema del historial de shell, puede leer estas preguntas y respuestas relacionadas . Pertenece a zsh- no bash, pero los principios son los mismos.

5 jksoegaard Oct 23 2020 at 14:41

Parece que ha encontrado una solución muy complicada al problema de no querer un bash_history.

Le aconsejaría que, en lugar de borrar periódicamente el historial de launchd, simplemente debe deshabilitar la grabación del historial:

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

Cierre la pestaña del terminal y abra una nueva, y su historial ya no se registrará.