Domanda Terminal 'modalità di navigazione in incognito'?


Io uso molto il terminale, e a volte sto eseguendo comandi, che non sono cose che non voglio che gli altri vedano, ma più comandi che se accidentalmente ho fatto un salto e che sono stati eseguiti accidentalmente causerebbero molti problemi.

Quindi mi chiedo se ci sia, o posso creare, una sorta di "modalità di navigazione in incognito" di Terminale che mi consenta, dopo l'esecuzione di un determinato comando, di interrompere la registrazione della mia cronologia e quindi di iniziare a registrare solo dopo aver eseguito una avviare nuovamente la cronologia delle registrazioni e uscire dalla modalità 'in incognito', oppure riavviare semplicemente il terminale?

Perché in seguito mi ritrovo ad andare e rimuovere roba dal mio .bash_history, quando sarebbe stato molto più facile se avessi potuto fermarlo registrando lì, in primo luogo, o almeno ottenuto di provare a registrarlo da qualche parte dove non sarebbe stato permesso, e finirebbe semplicemente per non registrarlo.


225
2018-05-18 14:53


origine


@Sparhawk: cosa?
Beh, presumibilmente lo sei paranoico che la tua storia sarà letta dagli altri? - Sparhawk
@Sparhawk: beh, è ​​in parte questo, e la festa non voglio eseguire accidentalmente un comando di manutenzione forse mortale quando sto facendo un salto nel futuro! : D
Per aggiungere, non devi giustificarti: "che non sono cose che non voglio che gli altri vedano". Questo sarebbe un motivo perfettamente valido anche per me. (Specialmente in questo momento ed età in cui tutti cercano di farti sembrare colpevole per avere "cose ​​da nascondere") - ereOn
Se apri due schede, fai cose nella prima, fai cose nella seconda, poi chiudi la seconda PRIMA della prima, solo la storia della prima sembra scritta .bash_history. (Terminale rovinato da Ubuntu 15.04, fortunatamente questo è un USB live.) - Hitechcomputergeek


risposte:


Esegui un comando senza inserirlo nella cronologia:

Metti semplicemente uno spazio prima del comando. Bash ignorerà i comandi con uno spazio preposto:

Esempio: Spazioecho "Some secret text"

Nota: funziona solo se il HISTCONTROL la variabile è impostata su ignorespace o ignoreboth.


Disattiva temporaneamente la cronologia:

  • Correre Spazioset +o history o Spazioshopt -uo history per disabilitare la cronologia.
  • Correre set -o history o shopt -so history per abilitarlo di nuovo.

Disattiva la cronologia per la sessione corrente (non ricorderà alcun comando dalla sessione):

unset HISTFILE

Nota: sarete in grado di vedere i comandi premendo Su finché non chiudi il terminale.


Rimuovi un comando dalla cronologia:

Correre Spaziohistory | grep "part of your secret command"

Mostrerà un elenco di comandi eseguiti in precedenza, in questo formato:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Selezionare il numero di voce alla sinistra del comando. Puoi copiarlo con Ctrl+Cambio+C

Correre Spaziohistory -d <number> dove <number> è il numero di voce per rimuovere la voce.
Puoi incollare quel numero con Ctrl+Cambio+V


Altre risposte interessanti:


260
2018-05-19 15:01



Se usi history -d per rimuovere una linea, questo rimuoverà il contenuto della linea, ma non potrai mai rimuovere il fatto che hai eseguito history -d(a meno che non lo usi per la prima volta set +o history prima di correre history -d) - AJFaraday
Mi ha appena ricordato la logica della super-ingiunzione, tutto qui;) - AJFaraday
(OT) Le ingiunzioni sono un documento legale che impedisce alle persone di pubblicare qualcosa. Una super-ingiunzione inoltre impedisce loro di pubblicare il fatto che gli è stata negata la possibilità di pubblicare. Alcuni argomenti logici chiedono se possono pubblicare che gli è stata negata la possibilità di pubblicare alcune informazioni. Quindi diventa un argomento ciclico. - AJFaraday
@Helio Penso che sia meglio per gli utenti conoscere il modo "corretto" di copiare, specialmente se vanno accidentalmente a selezionare del testo. Non sono sicuro di come fare lo spazio, forse chiarire di più che lo spazio è lì? Lo [spazio] mi sembra un po 'maldestro ... - Tim
Il unset HISTFILE approccio funziona anche retroattivamente per tutti i comandi a cui non è stato scritto .bash_history ancora. - kasperd


Puoi semplicemente cancellare la cronologia di una sessione terminale specifica aggiungendo un comando history -cw dopo il lavoro. Non chiudere il terminale prima di dare il comando.


39
2018-05-18 15:04



Questo non rimuoverà tutta la cronologia? - Helio
Questo rimuoverà solo la cronologia di quella particolare sessione terminale. - Moithil Biswas


shopt -uo history dovrebbe farlo meglio

Nuking the HISTFILE (et al) le variabili non fermeranno il tuo Su la cronologia viene registrata, semplicemente non la spinge su disco. Questa potrebbe essere o non essere una cosa positiva per te, ma dato che ne hai parlato, credo che tu voglia qualcosa di meglio. Cambiare il shopt l'impostazione della cronologia impedisce l'attivazione dell'intero meccanismo della cronologia.

È possibile riattivare la registrazione shopt -so history (il -s e -u sono impostati e disinseriti rispettivamente).

Si noti che il comando stesso verrà probabilmente registrato, quindi anteporlo a uno spazio per impedirne l'aggiunta alla cronologia prima di cancellare la variabile.


28
2018-05-19 22:00





Un altro modo per uccidere la shell corrente senza accedere al file di cronologia è:

kill -9 $$

Questo fa sì che bash (e probabilmente anche altre shell) inviino il segnale SIGKILL a se stesso, uccidendolo sul posto e impedendogli di scrivere qualcosa sul disco.


17
2018-05-18 15:02



a.k.a. "Spara te stesso in testa" :). Questo ha il vantaggio che non è necessario ricordare di fare nulla prima di scrivere i comandi. - Guido
Io uso zsh con la scrittura della cronologia incrementale, quindi dubito che ciò funzionerebbe nel mio caso - Wayne Werner


Per disabilitare temporaneamente la cronologia dei comandi per la sessione corrente, è possibile annullare temporaneamente la variabile di ambiente HISTFILE.

unset HISTFILE

mentre la sessione è attiva puoi accedere alla cronologia come al solito, ma non verrà salvata sul disco.

Per invertire nella stessa sessione (tutte le modifiche saranno registrate)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



E c'è un modo semplice nella sessione corrente per invertire questo e farlo andare avanti?
@ParanoidPanda Ho aggiunto un comando per tornare alla sessione corrente. - Bruni
@ParanoidPanda: Perché hai bisogno di un comando da impostare HISTFILE di nuovo nella sessione corrente? Se annulli la modifica (anche dopo aver eseguito i comandi segreti), questi verranno memorizzati nella cronologia quando esci. - Helio
@ Helio: Oh, no, intendevo un comando che avrebbe poi iniziato a registrare di nuovo, ma non salvare i comandi che non volevo che salvasse.
@ParanoidPanda, Helio sembra avere ragione su questo dato che la cronologia viene salvata all'uscita. Non l'avevo considerato. - Bruni


È possibile modificare le linee della cronologia nella sessione di shell corrente. Se passi indietro nella cronologia (ad es. Con Su o Ctrl+P) e modificare una linea senza eseguirlo, verrà salvata solo la versione modificata della linea. Puoi modificarlo in qualsiasi modo tu voglia; le buone scelte includevano l'uso Ctrl+U per cancellare completamente la linea o l'utilizzo Esc# mettere a # carattere di commento all'inizio.

Per lasciare una linea senza eseguirla, ricorda di non colpire Ritorno (accedere). Quello che faccio è tornare alla linea più recente nella storia tramite Esc>.

(Invece di Esc seguito da >, nella maggior parte dei terminali puoi tenere alt e premere >; lo stesso vale per il Esc# suggerimento sopra.)

Nota: Non è possibile modificare in modo permanente le voci delle sessioni precedenti in questo modo. Quelle modifiche non saranno applicate al HISTFILE alla fine della sessione.


10
2018-05-20 03:24





Potresti anche creare .bash_history in sola lettura. Vorrei prima svuotare il file e poi fare:

 chattr +i .bash_history

6
2018-05-21 20:46





È possibile eseguire i comandi sensibili in una sessione dello schermo, quindi distruggere la sessione quando hai finito.

In alternativa, è possibile mantenere viva la sessione dello schermo ma staccarla, e accedervi solo quando si desidera effettivamente poter risalire la freccia ai comandi altrimenti pericolosi.


5
2017-11-12 19:31





Personalmente io uso mkshe questa shell di default non ha file di cronologia. Ciò significa che è possibile avviare shell alternative come mksh o dash (che per impostazione predefinita viene fornito in modo predefinito) per eseguire il comando che non vuoi che gli utenti vedano, e uscire una volta fatto. bash la cronologia registrerà solo che hai lanciato una shell alternativa e il gioco è fatto.


1
2018-04-06 10:50