Questão Terminal 'modo incógnito'?


Eu uso muito o Terminal, e às vezes eu estou executando comandos, que não são coisas que eu não quero que os outros vejam, mas mais comandos que se eu acidentalmente flechasse e fosse acidentalmente executado causariam muitos problemas.

Então, eu estou querendo saber se existe, ou posso fazer, algum tipo de 'modo incógnito' do Terminal que me permita, após a execução de um determinado comando, parar de gravar meu histórico e só começar a gravar depois de executar um começar a gravar o histórico novamente comando e sair 'modo incógnito', ou eu simplesmente reiniciar o terminal?

Porque eu me vejo mais tarde indo e removendo coisas do meu .bash_history, quando seria muito mais fácil se eu pudesse ter parado de gravar lá em primeiro lugar, ou pelo menos consegui-lo para tentar gravá-lo em algum lugar onde não seria permitido, e acabaria por não gravá-lo.


225
2018-05-18 14:53


origem


@Sparhawk: O que?
Bem, presumivelmente você é paranóico que sua história será lida por outras pessoas? - Sparhawk
@Sparhawk: Bem, é em parte isso, e eu não quero executar acidentalmente um comando de manutenção possivelmente fatal quando eu estou apenas arrumando o futuro! : D
Só para acrescentar, você não precisa se justificar: "que não são coisas que eu não quero que os outros vejam". Isso seria uma razão perfeitamente válida para mim também. (Especialmente nesta época em que todo mundo tenta fazer você parecer culpada por ter "coisas para esconder") - ereOn
Se você abrir duas abas, fazer coisas na primeira, fazer coisas na segunda, depois fechar a segunda ANTES da primeira, apenas a história da primeira parece ser escrita para a primeira. .bash_history. (Ubuntu 15.04 arruinou Terminal, sorte este é um USB ao vivo.) - Hitechcomputergeek


Respostas:


Execute um comando sem colocá-lo no histórico:

Basta colocar um espaço antes do comando. O Bash ignorará os comandos com um espaço pré-definido:

Exemplo: Espaçoecho "Some secret text"

Nota: Isso só funciona se o HISTCONTROL variável está definida para ignorespace ou ignoreboth.


Desativar o histórico temporariamente:

  • Corre Espaçoset +o history ou Espaçoshopt -uo history para desativar o histórico.
  • Corre set -o history ou shopt -so history para habilitar novamente.

Desativar histórico para a sessão atual (não se lembrará de nenhum comando da sessão):

unset HISTFILE

Nota: Você poderá ver os comandos pressionando Acima até fechar o terminal.


Remova um comando do histórico:

Corre Espaçohistory | grep "part of your secret command"

Ele mostrará uma lista de comandos previamente executados, neste formato:

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

Selecione o número de entrada à esquerda do comando. Você pode copiá-lo com Ctrl+Mudança+C

Corre Espaçohistory -d <number> Onde <number> é o número de entrada para remover a entrada.
Você pode colar esse número com Ctrl+Mudança+V


Outras respostas interessantes:


260
2018-05-19 15:01



Se você usar history -d para remover uma linha, isso removerá o conteúdo da linha, mas você nunca poderá remover o fato de ter executado history -d (a menos que você use primeiro set +o history antes de correr history -d) - AJFaraday
Isso me lembrou da lógica de super-injunção, isso é tudo;) - AJFaraday
(OT) Injunções são um documento legal que impede as pessoas de publicar algo. Uma super injunção também os impede de publicar o fato de que lhes foi negada a possibilidade de publicar. Alguns argumentos lógicos perguntam se eles podem publicar que lhes foi negada a capacidade de publicar algumas informações. Então isso se torna um argumento cíclico. - AJFaraday
@Helio Acho melhor que os usuários saibam a maneira "correta" de copiar - especialmente se acidentalmente selecionar algum texto. Não sei como fazer o espaço, talvez esclarecer mais que o espaço está aí? O [espaço] parece um pouco desajeitado para mim ... - Tim
o unset HISTFILE abordagem também funciona retroativamente para todos os comandos que não foram escritos para .bash_history ainda. - kasperd


Você pode simplesmente excluir o histórico de uma sessão de terminal específica adicionando o comando history -cw depois de trabalhar. Não feche o terminal antes de dar o comando.


39
2018-05-18 15:04



Isso não removerá todo o histórico? - Helio
Isso só removerá o histórico dessa sessão de terminal específica. - Moithil Biswas


shopt -uo history deve fazer melhor.

Nuking o HISTFILE (et al) variáveis ​​não vão parar o seu Acima histórico sendo registrado, ele simplesmente não o enviará para o disco. Isso pode ou não ser uma coisa positiva para você, mas se você mencionar, acho que você quer algo melhor. Alterando a shopt configuração de histórico impede que todo o mecanismo de histórico seja acionado.

Você pode ativar o log de volta com shopt -so history (a -s e -u estão definidos e desfeitos respectivamente).

Observe que o comando em si provavelmente será registrado, portanto, adicione um espaço para que ele seja adicionado ao histórico antes de limpar a variável.


28
2018-05-19 22:00





Outra maneira de eliminar o shell atual sem efetuar login no arquivo de histórico é fazer:

kill -9 $$

Isso faz com que o bash (e provavelmente outros shells também) enviem o sinal SIGKILL para si mesmo, matando-o no local e impedindo que ele grave nada no disco.


17
2018-05-18 15:02



a.k.a. 'Atire na cabeça' :). Isso tem a vantagem de você não precisar se lembrar de fazer nada antes de escrever os comandos. - Guido
Eu uso zsh com gravação de histórico incremental, então eu duvido que isso funcionaria no meu caso - Wayne Werner


Para desabilitar temporariamente o histórico de comandos da sessão atual, você pode desabilitar temporariamente a variável de ambiente HISTFILE.

unset HISTFILE

Enquanto a sessão estiver ativa, você poderá acessar o histórico como de costume, mas não será salvo no disco.

Para reverter na mesma sessão (todas as alterações serão gravadas)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



E há uma maneira fácil na sessão atual para reverter isso e fazê-lo continuar?
@ParanoidPanda Eu adicionei um comando para reverter na sessão atual. - Bruni
@ParanoidPanda: Por que você precisa de um comando para definir HISTFILE novamente na sessão atual? Se você desfizer a mudança (mesmo depois de executar os comandos secretos), eles serão armazenados no histórico quando você sair. - Helio
@ Helio: Ah, não, eu quis dizer um comando que iria então começar a gravar novamente, mas não salvar os comandos que eu não queria salvar.
@ParanoidPanda, Helio parece estar certo sobre este como a história é salva na saída. Eu não tinha considerado isso. - Bruni


Você pode modificar as linhas do histórico na sessão atual do shell. Se você voltar no histórico (por exemplo, com Acima ou Ctrl+P) e mudar uma linha sem executá-lo, somente a versão modificada da linha será salva. Você pode modificá-lo da maneira que quiser; boas escolhas incluiria usando Ctrl+você para totalmente em branco a linha ou usando Esc# colocar um # comentário personagem no início.

Para deixar uma linha sem executá-la, lembre-se de não acertar Retorna (Entrar). O que eu faço é voltar para a mais nova linha da história via Esc>.

(Ao invés de Esc Seguido por >, na maioria dos terminais você pode segurar Alt e pressione >; o mesmo vale para o Esc# sugestão acima.)

Nota: Você não pode modificar permanentemente entradas de sessões anteriores dessa maneira. Essas alterações não serão aplicadas ao HISTFILE no final da sessão.


10
2018-05-20 03:24





Você também pode fazer .bash_history somente leitura. Eu esvaziaria o arquivo primeiro e depois faria:

 chattr +i .bash_history

6
2018-05-21 20:46