Cosa potrebbe causare la cancellazione della mia cronologia bash inaspettatamente?


16

Oggi ho notato che la mia storia di bash è stata cancellata completamente. Non ho eseguito history -cné eliminato il .bash_historyfile. Oltre all'eliminazione del .bash_historyfile e history -c, come si può cancellare la cronologia di bash?


2
Potrebbe essere successo ad es >.bash_history. Forse qualcuno era nel tuo account e ha cercato di nascondere le sue tracce. Controlla i tempi di accesso insoliti con last, cerca attraverso /var/log/auth.log(a seconda del sistema).
ott--

Risposte:


17

Quando si chiudono più istanze bash contemporaneamente, esiste una condizione di razza nota che può causare l'eliminazione della cronologia. Ciò si verifica perché non viene utilizzato alcun blocco quando viene scritto il file della cronologia di bash.

Chet Ramey (l'attuale manutentore di bash) ha fornito un buon riassunto delle condizioni per questo problema:

L'attuale codice (bash-4.3-devel) funziona in questo modo, supponendo che non vi siano errori (lib / readline / histfile.c: history_do_write ()):

  • rinomina (histfile, histfile ~)
  • aprire il file con O_CREAT | O_TRUNC
  • buffer malloc abbastanza grande da contenere tutti i dati storici
  • scrivere tutte le voci della cronologia in una chiamata di scrittura (2)
  • chiudere il file
  • scollega (histfile ~)

Il codice bash-4.2 funziona allo stesso modo, tranne per il fatto che non esegue il backup del file della cronologia. Ogni shell fa la stessa cosa quando esce, supponendo che histappend non sia impostato, come nella tua configurazione.

Ci sono un paio di modi in cui il file della cronologia può finire a lunghezza zero: il malloc può fallire o la scrittura può fallire. In bash-4.2, è troppo tardi per fare qualcosa sul file di cronologia troncato a quel punto. In bash-4.3, il file della cronologia precedente verrà ripristinato.

Questo thread della mailing list di bug-bash contiene una discussione decente dei problemi, delle possibili soluzioni e dei problemi che lo circondano.

Ci sono anche altre possibilità:

  • Ad un certo punto, il tuo HISTSIZEo HISTFILESIZEera impostato su 0
  • Ad un certo punto, il tuo readline history-sizeera impostato su 0
  • Qualcuno, intenzionalmente o non intenzionalmente, ha cancellato la storia di Bash (via > "$HISTFILE"o simile)

In quest'ultimo caso, potresti voler verificare che qualcuno non abbia avuto accesso al tuo account e stia cercando di nascondere le proprie tracce in modo rozzo. Date un'occhiata a last, /var/log/auth(o /var/log/securesu CentOS / RHEL), e se lo avete, qualsiasi processo di contabilità e / o il software di controllo si può avere installato.


1

Come ho cancellato accidentalmente la mia cronologia di bash:

Stavo estraendo il mio script readline terminale alternativo dai primi principi: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

e poi testarlo in un terminale. Che GNU Readline abbia una dimensione della cronologia e istruzioni per la conservazione della cronologia integrate, quindi la sua dimensione può essere predefinita e quindi tutta la tua cronologia viene spazzata via.

Ripristino della storia se lasciato in memoria:

Se lo catturi prima di un riavvio, o se un terminale è stato lasciato aperto prima della cancellazione, potresti essere in grado di trovare la tua cronologia in memoria. Esegui history | cut -c 8- > histback_user1.txtsu tutti i terminali lasciati aperti e per ogni utente. Se questo produce un file con la tua cronologia estesa, puoi sostituirlo ~/.bash_historycon histback_user1.txt. Controlla anche la cronologia di tutti gli utenti registrati di recente nel sistema e la cronologia di root. È facile cancellare accidentalmente la cronologia di bash in molte circostanze, quindi se vuoi essere sicuro di non perdere la cronologia, hai bisogno di uno script di backup giornaliero.


Grazie . Non so che diavolo sia successo, ma ieri la mia storia è stata ripristinata e non è stato fino ad ora che l'ho notato. Ma, per fortuna, non avevo una finestra terminale aperta, ma 10 (!). Va tutto bene adesso.
Marc.2377,
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.