Usando launchd per cancellare la cronologia di bash?

Oct 23 2020

Chiarimento: non sto cercando di distruggere history, sto cercando mezzi per eliminarlo periodicamente launchdper motivi di sicurezza

Ho usato cat /dev/null > ~/.bash_historyper cancellare la cronologia di bash come si è visto in molte conversazioni * nix come il modo più efficace per farlo.

Quindi l'ho inserito in uno script di shell che viene eseguito launchd, ma dopo un po 'di tempo mi sono reso conto che sebbene funzioni non cancella la cronologia.

È possibile cancellare la cronologia di bash in questo modo tramite lo script bash o può essere fatto solo manualmente come utente? Forse ho bisogno di eseguire il comando direttamente nel .plist e non tramite uno script bash?

Nota: ho altri script in esecuzione correttamente tramite launchd, quindi la domanda è strettamente sulla possibilità di cancellare la cronologia tramite un agente

Grazie

Aggiornamento: trovato questo fantastico sito che aiuta a generare launchdscript se questo aiuta qualcuno. Non posso garantirlo, ma è molto più facile che hackerare XML. Sembra essere utilizzato sh -cper tutti i comandi, quindi non sono sicuro del perché.

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

Risposte

5 Seamus Oct 23 2020 at 16:25

La tua bashstoria è composta da due "storie", non una. Una di queste cronologie è memorizzata in un file: la sua dimensione / profondità è regolata dal parametro HISTFILESIZE. L'altra cronologia è memorizzata nella cache: la sua dimensione è regolata dal parametro HISTSIZE.

Puoi controllare le dimensioni / profondità delle tue storie:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

Il motivo di due storie è che una è associata a ciascuna sessione di shell ( HISTSIZE), mentre l'altra è un file ~/.bash_history"permanente" e alla fine riceve le cronologie di sessione quando superano la loro profondità massima o quando la sessione viene terminata. È un po 'complicato da spiegare e l'immagine qui sotto può aiutare a rendere chiara la relazione tra queste due storie.

Ma torniamo al tuo obiettivo:

Anziché procedere per eliminare la cronologia, potresti semplicemente impostare HISTSIZEe HISTFILESIZEazzerare ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Se non è quello che vuoi, puoi certamente eliminare periodicamente il file della cronologia, ma sappi che non elimina la cronologia della sessione . .plistNon è necessario eliminare il file della cronologia creando un file. Il historycomando è lo strumento da utilizzare per questo lavoro (vedere history --helpper i dettagli). Il seguente comando eliminerà una cronologia di sessione :

$ history -cw

L'eliminazione del contenuto dal file di cronologia ( ~/.bash_history) viene eseguita in modo convenzionale:

$ > ~/.bash_history

Si potrebbe mettere uno o entrambi questi comandi in uno crontab, ma sarà necessario garantire la shell di default è bashcome historyè un built-in .

Per alcune informazioni di base sull'argomento della cronologia della shell, puoi leggere queste domande e risposte correlate . Riguarda zsh- no bash, ma i principi sono gli stessi.

5 jksoegaard Oct 23 2020 at 14:41

Sembra che tu abbia trovato una soluzione molto contorta al problema di non volere una bash_history.

Vorrei consigliare che invece di cancellare periodicamente la cronologia da launchd, dovresti semplicemente disabilitare la registrazione della cronologia:

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

Chiudi la scheda del terminale e aprine una nuova e la tua cronologia non verrà più registrata.