Terminal 'modo incógnito'?

224

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 que eu quer executar um histórico de gravação de início de novo 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 gravar em algum lugar onde simplesmente não seria permitido, e acabaria por não gravá-lo.

    
por Great Uncle Bulgaria 18.05.2015 / 16:53

10 respostas

257

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ço echo "Some secret text"

Nota: Isso só funciona se a variável HISTCONTROL estiver definida como ignorespace ou ignoreboth .

Desativar o histórico temporariamente:

  • Execute Espaço set +o history ou Espaço shopt -uo history para desativar o histórico.
  • Execute set -o history ou shopt -so history para ativá-lo novamente.

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

unset HISTFILE

Nota: Você poderá ver os comandos pressionando Up até que você feche o terminal.

Remova um comando do histórico:

Executar Espaço history | 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 de entrada à esquerda do comando. Você pode copiá-lo com Ctrl + Deslocamento + C

Execute Espaço history -d <number> onde <number> é o número da entrada para remover a entrada.
Você pode colar esse número com Ctrl + Deslocar + V

Outras respostas interessantes:

por Helio 13.04.2017 / 14:23
39

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

    
por Moithil Biswas 19.05.2015 / 17:01
28

shopt -uo history deve ser o melhor.

Nuking as variáveis HISTFILE (et al) não vai parar o seu histórico de Up sendo registrado, ele simplesmente não irá empurrá-lo para o disco. Isso pode ou não ser uma coisa positiva para você, mas se você mencionar, acho que você quer algo melhor. A alteração da configuração do shopt do histórico impede que todo o mecanismo do histórico seja acionado.

Você pode ativar o logon novamente com shopt -so history (os -s e -u estão definidos e não foram redefinidos, respectivamente).

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

    
por Oli 18.05.2015 / 17:04
17

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.

    
por dolt 20.05.2015 / 00:00
13

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

unset HISTFILE

enquanto a sessão está ativa, você pode 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 registradas)

HISTFILE=$HOME/.bash_history
    
por Bruni 18.05.2015 / 17:02
10

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

Para deixar uma linha para trás sem executá-la, lembre-se de não pressionar Return ( Enter ). O que eu faço é retornar à mais nova linha do histórico por meio de Esc & gt; .

(Ao invés de Esc seguido por & gt; , na maioria dos terminais você pode segurar Alt e pressionar & gt; ; o mesmo vale para a sugestão Esc # acima.

Observação: 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.

    
por echristopherson 21.05.2015 / 02:12
6

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

 chattr +i .bash_history
    
por Webtm 20.05.2015 / 05:24
5

Você pode executar os comandos confidenciais em uma sessão de tela e, em seguida, destruir a sessão quando terminar.

Como alternativa, você pode manter essa sessão de tela viva, mas separada, e acessá-la somente quando realmente quiser usar a seta para os comandos perigosos.

    
por keag 21.05.2015 / 22:46
1

Pessoalmente eu uso mksh , e este shell por padrão não tem arquivo de histórico. Isso significa que você pode lançar um shell alternativo como mksh ou dash (que vem por padrão, por sinal) para executar o comando que você não deseja que os usuários vejam e saia assim que terminar. O histórico de bash registrará apenas que você lançou o shell alternativo e pronto.

    
por Sergiy Kolodyazhnyy 12.11.2015 / 20:31
1

Você também pode usar o multiplexador de terminal, como tmux , screen . Portanto, o histórico tmux ou screen não seria salvo.

    
por vusan 06.04.2016 / 12:50