Eliminazione della cronologia da ~ / .bash_history


8

Ho un paio di domande sulla cronologia del terminale o della riga di comando in cui è memorizzata ~/.bash_history.

  1. Posso vedere il file nel terminale con il historycomando ma se provo ad aprirlo con gedit bash_historyil file è completamente vuoto. Perché?

  2. Ho trovato come eliminare un certo numero di righe nel file dal terminale con questa riga di codice:

    for i in {1..N}; do history -d N; done

    dove N è il numero di righe (o comandi) che si desidera eliminare, ma ora il file della cronologia mostra l'ultimo comando e non è molto intelligente se si sta tentando di coprire le proprie cose. Quindi la domanda è: come posso dare l'ultima riga di codice e assicurarmi che non venga registrato?



Per una nota futura, se si avvia un comando con uno spazio, quel comando non verrà salvato nella cronologia.
Paddy Landau,

Risposte:


18
  1. Hai appena dimenticato il punto precedente, il comando per aprire il file della cronologia del terminale (bash) è

    gedit ~/.bash_history

    Questo file viene aggiornato solo quando si chiude un terminale.

  2. Per rimuovere le ultime 10 righe da questo file e non registrare questo comando, aprire un nuovo terminale ed eseguire la seguente catena di comandi:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    o

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    o

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sedo headcancella rispettivamente le linee selezionate da ~/.bash_history, history -ccancella la cronologia del terminale e la exitchiude.


Un'alternativa più breve e speriamo più veloce a for+ sed: head -n -Ndove maiuscolo Nè il numero di righe da rimuovere. stackoverflow.com/a/13380679/711006
Melebius

2
@Melebius Sembra promettente, ma come si reindirizza l'output al file di input sovrascrivendolo? head -n -N testfile > testfilecancella semplicemente il file! Ho aggiunto una soluzione alternativa, tuttavia non è certamente più breve.
Dessert

Hai ragione, ho dimenticato che headnon può funzionare sul posto come sed. Cercavo principalmente un singolo sedcomando che sostituisse il tuo forloop. Ci sono alcune opzioni nella pagina che ho collegato ma non sembrano comprensibili come il tuo codice.
Melebio

@Melebius Vedi sed1line.txt per questo - l'ho aggiunto sopra, non è molto più corto ma dovrebbe essere più veloce.
Dessert

4

Il file bash_history è un file nascosto, che inizia con un punto. Devi fare

gedit ~/.bash_history

Questo aprirà il file in gedit.


1

Se si desidera eliminare solo alcune parti del registro dei comandi, i metodi sopra indicati vanno bene. Se si desidera interrompere la registrazione dei comandi per una particolare sessione bash, emettere il comando

unset HISTFILE

Per essere più drastici, se non vuoi che nessuno dei tuoi comandi sia registrato , puoi farlo

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

Si noti che il primo metodo sarebbe efficace solo per una singola sessione, mentre il secondo metodo interromperebbe la registrazione dei comandi per tutte le sessioni future.


1

Mi rendo conto che questa ha già una risposta accettata, ma è così che lo faccio dagli anni '80. È un ottimo modo per nascondere le tue tracce ed è un approccio multifase. Per la maggior parte è quello che non si nota a meno che non si presti davvero attenzione. Ecco come è fatto.

Apri un terminale / shell / sessione e fai:

 chmod 444 ~/.bash_history

esci dalla shell apri un terminale / shell / sessione e fai: Ecco alcuni modi creativi per cancellare definitivamente la cronologia

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (crea una storia falsa)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

quindi per buona misura:

 chmod 444 ~/.bash_history

esci dalla shell

aprire una nuova shell e digitare

 history

ciò che lo rende meno evidente è che se si fa un ls -ratl, ~ / .bash_history alla fine scomparirà nel crepitio della directory list. Non verrà visualizzato come un collegamento che attirerebbe l'attenzione non necessaria. La maggior parte delle persone non fa un -a alla radice, il che è utile quando si desidera l'emulazione.

L'aspetto negativo di questo approccio è che perdi la capacità di tornare indietro e recuperare la tua storia. l'attuale file ~ / .bash_history potrebbe anche finire nella parte superiore di un elenco di directory, poiché potrebbe finire con una data di modifica molto vecchia nel tempo, che di per sé potrebbe portare alla scoperta che qualcosa non va.


se si utilizza 9999999 ddper eliminare tutte le righe nel file, allora :%d, :1,$do di dGlavoro molto meglio
phuclv

0

1) Esegui sh; questo genera un sottoguscio di cenere, che non registra affatto la storia. Modifica da lì

2) Aggiungi la linea HISTCONTROL=ignorebotha .bashrc, e fai exec bashper sostituire permanentemente la shell corrente con una reinizializzata, quindi esegui tutti i comandi che non desideri vengano registrati con uno spazio iniziale.


0

poiché non posso ancora commentare, aggiungerò i miei commenti come risposta:

man history risponderà a tutto.

la risposta al n. 1 è che la storia è nella memoria. history -aper salvare immediatamente nel file. history -wsalverà anche, ma potrebbe incasinare altre sessioni.

risposta n. 2 history -a:, gedit, elimina le righe desiderate,history -r


0

La cronologia non viene salvata fino a quando non ci si disconnette dalla shell. Prova a uscire dalla shell e poi guarda di nuovo .bash_history. La cronologia dei comandi dovrebbe essere lì.


Modificato come suggerito Abbastanza buono ora?
The Lightning Stalker,
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.