Utiliser launchd pour effacer l'historique de bash?

Oct 23 2020

Clarification: Je ne cherche pas à détruire history, je cherche des moyens de le purger périodiquement via launchdà des fins de sécurité

J'ai utilisé cat /dev/null > ~/.bash_historypour effacer l'historique de bash comme l'ont vu dans de nombreuses conversations * nix comme le moyen le plus efficace de le faire.

Je l'ai donc mis dans un script shell qui s'exécute launchd, mais après un certain temps, je me suis rendu compte que même s'il fonctionnait, il n'effaçait pas l'historique.

Est-il possible d'effacer l'historique de bash de cette façon via un script bash ou cela ne peut-il être fait que manuellement en tant qu'utilisateur? Peut-être ai-je besoin d'exécuter la commande directement dans le .plist et non via un script bash?

Remarque: j'ai d'autres scripts qui fonctionnent correctement via launchd, donc la question est strictement de pouvoir effacer l'historique via un agent

Je vous remercie

Mise à jour: trouvé ce site sympa qui permet de générer des launchdscripts si cela aide quelqu'un. Je ne peux pas en garantir, mais c'est beaucoup plus facile que de pirater XML. Il semble cependant être utilisé sh -cpour toutes les commandes, donc je ne sais pas pourquoi.

générateur de plist de launchd http://launched.zerowidth.com/

Réponses

5 Seamus Oct 23 2020 at 16:25

Votre bashhistoire se compose de deux «histoires», pas une. L'un de ces historiques est stocké dans un fichier - sa taille / profondeur est régie par le paramètre HISTFILESIZE. L'autre historique est mis en cache en mémoire - sa taille est régie par le paramètre HISTSIZE.

Vous pouvez vérifier la taille / la profondeur de vos historiques:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

La raison de deux historiques est que l'un est associé à chaque session shell ( HISTSIZE), tandis que l'autre historique est un fichier ~/.bash_historyqui est "permanent", et reçoit finalement les historiques de session lorsqu'ils dépassent leur profondeur maximale, ou lorsque la session est terminée. C'est un peu compliqué à expliquer, et l'image ci-dessous peut aider à clarifier la relation entre ces deux histoires.

Mais revenons à votre objectif:

Plutôt que de prendre des mesures pour supprimer votre historique, vous pouvez simplement définir HISTSIZEet mettre HISTFILESIZEà zéro ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Si ce n'est pas ce que vous voulez, vous pouvez certainement supprimer le fichier d'historique périodiquement, mais sachez que cela ne supprime pas l' historique de session . Il .plistn'est pas nécessaire de supprimer votre fichier d'historique en créant un fichier. La historycommande est l'outil à utiliser pour ce travail (voir history --helppour plus de détails). La commande suivante supprimera un historique de session :

$ history -cw

La suppression du contenu du fichier historique ( ~/.bash_history) se fait de manière conventionnelle:

$ > ~/.bash_history

Vous pouvez mettre un ou les deux de ces commandes dans un crontab, mais vous devrez vous assurer le shell par défaut est bashcomme historyun intégré .

Pour obtenir des informations sur le sujet de l'histoire du shell, vous pouvez lire ces questions et réponses connexes . Cela concerne zsh- non bash, mais les principes sont les mêmes.

5 jksoegaard Oct 23 2020 at 14:41

Il semble que vous ayez trouvé une solution très compliquée au problème de ne pas vouloir de bash_history.

Je conseillerais qu'au lieu d'effacer périodiquement l'historique de launchd, vous devriez simplement désactiver l'enregistrement de l'historique:

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

Fermez l'onglet du terminal et ouvrez-en un nouveau - et votre historique ne sera plus enregistré.