Terminal 'modo anônimo'?


230

Eu uso muito o Terminal e, às vezes, 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 disparasse e executasse causaria muitos problemas.

Por isso, estou me perguntando se existe, ou posso fazer, algum tipo de 'modo de navegação anônima' do Terminal que me permitiria, 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 do "modo de navegação anônima", ou simplesmente reinicio o terminal?

Porque eu me vejo mais tarde removendo coisas do meu .bash_history, quando seria muito mais fácil se eu pudesse parar a gravação lá em primeiro lugar, ou pelo menos consegui tentar gravar em algum lugar onde simplesmente não estaria permitido, e acabaria não gravando.


6
Bem, presumivelmente você está paranóico porque sua história será lida por outros?
— Sparhawk

6
@ Sparhawk: Bem, em parte é isso, e a parte que eu não quero executar acidentalmente um comando de manutenção possivelmente mortal quando eu estiver aparecendo no futuro! : D

19
Só para acrescentar, você não precisa se justificar: "que não são coisas que eu não quero que os outros vejam" . Essa seria uma razão perfeitamente válida para mim também. (Especialmente nesta época em que todos tentam fazer com que você pareça culpado por ter "coisas a esconder")
— antes de

2
Se você abrir duas guias, faça as coisas na primeira, faça as coisas na segunda e feche a segunda antes da primeira, apenas o histórico da primeira parece estar gravado .bash_history. (Ubuntu 15.04 arruinada Terminal, sorte este é um USB ao vivo.)
— Hitechcomputergeek

1
Veja esta pergunta em serverfault
— Luc M

Respostas:


265

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

Simplesmente coloque um espaço antes do comando. O Bash ignorará os comandos com um espaço precedido:

Exemplo: Spaceecho "Some secret text"

Nota: Isso funciona apenas se a HISTCONTROLvariável estiver definida como ignorespaceou ignoreboth.


Desative o histórico temporariamente:

  • Execute Spaceset +o historyou Spaceshopt -uo historydesative o histórico.
  • Execute set -o historyou shopt -so historypara habilitá-lo novamente.

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

unset HISTFILE

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


Remova um comando do histórico:

Corre Spacehistory | grep "part of your secret command"

Ele mostrará uma lista de comandos executados anteriormente, 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 da entrada à esquerda do comando. Você pode copiá-lo com Ctrl+ Shift+C

Execute Spacehistory -d <number>onde <number>está o número da entrada para remover a entrada.
Você pode colar esse número com Ctrl+ Shift+V


Outras respostas interessantes:


7
Se você usar history -dpara remover uma linha, isso irá remover o conteúdo da linha, mas você nunca pode remover o fato de que você executou history -d(a menos que você primeiro uso set +o historyantes de executar history -d)
— AJFaraday

1
Apenas me lembrou a lógica da super injunção, só isso;) #
— AJFaraday

4
(OT) Injunções são um documento legal que impede as pessoas de publicar algo. Uma super liminar também os impede de publicar o fato de lhes ter sido negada a capacidade de publicar. Alguns argumentos lógicos perguntam se eles podem publicar que foi negada a capacidade de publicar algumas informações. Então se torna um argumento cíclico.
— AJFaraday

1
@ Helio Eu acho que é melhor para os usuários saber a maneira "correta" de copiar - especialmente se eles acidentalmente selecionarem algum texto. Não sei bem como fazer o espaço, talvez esclareça mais que o espaço existe? O [espaço] parece um pouco desajeitado para mim ... #
— 181 de Tim

2
A unset HISTFILEabordagem também funciona retroativamente para todos os comandos que ainda não foram gravados .bash_history.
— Kasperd

40

Você pode simplesmente excluir o histórico de uma sessão de terminal específica, adicionando o comando history -cwapós o trabalho.

Não feche o terminal antes de dar este comando.


Isso não removerá todo o histórico?
— Helio

6
Isso removerá apenas o histórico daquela sessão de terminal específica.
— Moithil Biswas

28

shopt -uo history deve fazer melhor.

Nuking as HISTFILEvariáveis ​​(et al) não impedirá o Upregistro do seu histórico, apenas não o empurrará para o disco. Isso pode ou não ser positivo para você, mas, como você mencionou, acho que você quer algo melhor. Alterar a shoptconfiguração do histórico impede que todo o mecanismo do histórico seja acionado.

Você pode ativar o logon novamente com shopt -so history( -se -usão definidos e desativados, respectivamente).

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


17

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

kill -9 $$

Isso faz com que o bash (e provavelmente outras conchas também) envie o sinal SIGKILL para si mesmo, matando-o no local e impedindo que ele grave qualquer coisa no disco.


7
aka 'Atire na sua cabeça' :). Isso tem a vantagem de que você não precisa se lembrar de fazer nada antes de escrever os comandos.
— Guido

3
Eu uso zsh com write história incremental, por isso duvido que isso iria funcionar no meu caso
— Wayne Werner

13

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 ele não será salvo no disco.

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

HISTFILE=$HOME/.bash_history

1
E existe uma maneira fácil na sessão atual de reverter isso e fazê-lo continuar?

@ParanoidPanda Adicionei um comando para reverter na sessão atual.
— Bruni

1
@ParanoidPanda: Por que você precisa de um comando para definir HISTFILEnovamente na sessão atual? Se você desfazer a alteração (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 começaria a gravar novamente, mas não salvaria os comandos que não queria que ele salvasse.

1
@ParanoidPanda, Helio parece estar certo nesse caso, pois a história é salva na saída. Eu não tinha considerado esse.
— Bruni

10

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

Para deixar para trás uma linha sem executá-la, lembre-se de não pressionar Return( Enter). O que faço é retornar à mais nova linha da história via Esc>.

(Em vez de Escseguido por >, na maioria dos terminais, você pode segurar Alte pressionar >; o mesmo vale para a Esc#sugestão acima.)

Nota: Você não pode modificar permanentemente as entradas das sessões anteriores dessa maneira. Essas alterações não serão aplicadas HISTFILEno final da sessão.


6

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

 chattr +i .bash_history

5

Você pode executar os comandos sensíveis em uma sessão da tela e destruir a sessão quando terminar.

Como alternativa, você pode manter a sessão da tela ativa, mas desanexada, e acessá-la somente quando você realmente deseja ativar a seta para os comandos de outra forma perigosos.


1

Pessoalmente, eu uso mksh, e esse shell por padrão não tem arquivo de histórico. Isso significa que você pode iniciar um shell alternativo como mkshor dash(que vem por padrão) para executar o comando que você não quer que os usuários vejam e sair depois que terminar. basho histórico registrará apenas que você lançou o shell alternativo e é isso.


1

Você também pode usar multiplexer terminal, como tmux, screen. Portanto, o histórico tmuxou a screenhistória não seriam salvos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.