perché eliminare la cronologia di bash non è abbastanza?


15

Pensavo che cancellare la mia cronologia di bash fosse abbastanza per cancellare la mia cronologia di bash, ma ieri il mio gatto stava scherzando sul lato destro della tastiera e quando sono tornato sul mio computer ho visto qualcosa che ho digitato un mese fa, quindi ho iniziato a premere tutti i tasti come un matto alla ricerca di ciò che avrebbe potuto innescarlo. Si scopre che il tasto UPARROW mostra la mia cronologia bash anche dopo aver eliminato .bash_history.

Come posso cancellare la mia cronologia di bash per davvero?


8
.bash_history viene sovrascritto ogni volta che chiudi una shell bash. Quindi, se avvii bash, elimini .bash_history e ti disconnetti, non avrai realizzato esattamente nulla.
Shadur,

14
Il tuo gatto merita un'enorme ricompensa. Hai usato bash per quanto tempo senza scoprire che ha il richiamo e la modifica della riga di comando? Riscrivi ogni riga di comando da zero ogni volta o qualcosa del genere? Ciò renderebbe la shell molto spiacevole da usare.
Cas

@cas dieci anni. Ora che lo dici premo Uparrow per ripetere i comandi, ma l'ho capito come una specie di memoria 'a breve termine' non più lunga di poche righe. Non sono stato avvisato che l'eliminazione di .bash_history non cancellerà la cronologia di bash.
Bunden,

L'eliminazione in ~/.bash_historyrealtà elimina ~/.bash_history.... ma (a meno che non si adottino misure per impedirlo, come cancellare la cronologia in memoria eseguendo history -cappena prima di disconnettersi o impostarla HISTFILE=/dev/nullo semplicemente unsetingerirla) bash salverà di nuovo la sua cronologia corrente quando esce . A proposito, HISTSIZEenv var dice a bash quante righe di storia tenere in memoria e HISTFILESIZEdice a bash il numero massimo di righe di cronologia da salvare. entrambi possono essere impostati, ad esempio, il tuo ~/.bashrc. PS: il tuo gatto merita una seconda ricompensa per averti insegnato una lezione preziosa :)
Cas

@cas Penso che la cancellazione di .bash_history dovrebbe cancellare la storia di bash. Mi sembra intuitivo. Ciò che non sembra intuitivo è la cronologia -c, la cronologia -w, le variabili di disinserimento .. questo è pazzo dal punto di vista dell'esperienza dell'utente.
Bunden,

Risposte:


26

In alcuni casi (alcune versioni bash), facendo un:

$ history -c; history -w

O semplicemente

$ history -cw

Sarà cancellare la cronologia in memoria (su e giù freccia avrà nessun comando alla lista) e poi scrivere che il $HISTFILEfile (se la $HISTFILEottiene troncato dall'istanza bash in esecuzione).

A volte bash sceglie di non troncare il $HISTFILEfile anche con l' histappendopzione non impostata e $HISFILEZIZEimpostata su 0.

In questi casi, l'opzione nuke funziona sempre:

history -c; >$HISTFILE

Ciò cancella l'elenco cronologico dei comandi registrati in memoria e tutti i comandi precedentemente registrati su file. Ciò assicurerà che la shell in esecuzione non abbia alcuna cronologia registrata né in memoria né su disco, tuttavia, altre istanze in esecuzione di bash (dove la cronologia è attiva) potrebbero avere una copia completa dei comandi letti $HISTFILEall'avvio di bash (o quando history -rviene eseguita una) .

Se si richiede anche che nient'altro (nessun nuovo comando) della presente sessione venga scritto nel file della cronologia, unset HISTFILEsi eviterà tale registrazione.


1
Modificando HISTFILE e facendo history -c && history -rsi sostituisce la cronologia corrente con cronologia modificata manualmente. In alcuni casi, potrebbe essere meglio che buttare via tutta la storia.
Mikko Rantalainen,

9

bash ha una cronologia delle sessioni in memoria che viene scritta nel file se la variabile shell HISTFILE è impostata su un nome file quando bashesce.

Se si elimina il file a cui punta HISTFILE , deseleziona quella variabile e esci bash, quella sessione della shell non lascerà alcuna cronologia persistente.

Se non si disattiva la HISTFILEvariabile ma si elimina il file si svuoterebbe semplicemente la cronologia persistente, ma la cronologia della sessione corrente verrebbe salvata quando la shell esce.


3
A history -c; history -wcancellerà sia la memoria che la cronologia dei file. È necessario annullare HISTFILE solo se non si devono registrare altri comandi nella cronologia (non esattamente ciò che è stato chiesto a IMhO).
Isaac,

-1

"Come posso cancellare la mia cronologia di bash per davvero?"

Esci da bash, avvia una shell diversa, elimina il file della cronologia di bash.

o

disconnettersi, accedere a un altro account con autorizzazione di scrittura sul file cronologico, eliminare il file cronologico.


-2

Mentre lasci il guscio, fallo tutto in una volta, come

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

@roaima, hai assolutamente ragione, grazie. Corretto.
user853069,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.