Se você for um usuário da linha de comando do Linux, concordará que há momentos em que não deseja que certos comandos executados sejam registrados no histórico da linha de comando. Pode haver muitas razões para isso. Por exemplo, você está em uma determinada posição na empresa e tem alguns privilégios que não deseja que outras pessoas abusem. Ou, existem alguns comandos críticos que você não deseja executar acidentalmente enquanto navega na lista de histórico.
Mas existe uma maneira de controlar o que vai para a lista de histórico e o que não vai? Ou, em outras palavras, podemos ativar um modo incógnito semelhante ao de um navegador da web na linha de comando do Linux? A resposta é sim, e há muitas maneiras de conseguir isso, dependendo do que você deseja exatamente. Neste artigo, discutiremos algumas das soluções populares disponíveis.
Nota: todos os comandos apresentados neste artigo foram testados no Ubuntu.
Diferentes formas disponíveis
As duas primeiras maneiras que descreveremos aqui já foram abordadas em um de nossos artigos anteriores. Se você já os conhece, pode pular estes. No entanto, se você não estiver ciente, é aconselhável analisá-los com cuidado.
1. Insira um espaço antes do comando
Sim, você leu corretamente. Insira um espaço no início de um comando, e ele será ignorado pelo shell, ou seja, o comando não será registrado no histórico. No entanto, há uma dependência – a referida solução só funcionará se a variável de ambiente HISTCONTROL estiver definida como “ignorespace” ou “ignoreboth”, que é o padrão na maioria dos casos.
Portanto, um comando como o seguinte:
[space]echo "this is a top secret"
Não aparecerá no histórico se você já tiver executado este comando:
export HISTCONTROL = ignorespace
A imagem abaixo é um exemplo desse comportamento.
O quarto comando “echo” não foi registrado no histórico porque foi executado com um espaço no início.
2. Desative todo o histórico da sessão atual
Se quiser desabilitar todo o histórico de uma sessão, você pode fazer isso facilmente desabilitando a variável de ambiente HISTSIZE antes de começar o trabalho com a linha de comando. Para remover a definição da variável, execute o seguinte comando:
export HISTFILE=0
HISTFILE é o número de linhas (ou comandos) que podem ser armazenados na lista de histórico para uma sessão bash em andamento. Por padrão, essa variável tem um valor definido – por exemplo, 1000 no meu caso.
Portanto, o comando mencionado acima irá definir o valor da variável de ambiente para zero e, conseqüentemente, nada será armazenado na lista de histórico até que você feche o terminal. Tenha em mente que você também não será capaz de ver os comandos executados anteriormente pressionando a tecla de seta para cima ou executando o history
comando.
3. Apague todo o histórico depois de terminar
Isso pode ser visto como uma alternativa à solução mencionada na seção anterior. A única diferença é que, neste caso, você executa um comando DEPOIS de terminar todo o seu trabalho. O seguinte é o comando em questão:
history -cw
Como já mencionado, isso terá o mesmo efeito que a solução HISTFILE mencionada acima.
4. Desative o histórico apenas para o trabalho que você faz
Embora as soluções (2 e 3) descritas acima façam o truque, elas apagam todo o histórico, algo que pode ser indesejado em muitas situações. Pode haver casos em que você deseja manter a lista de histórico até o ponto em que iniciar o trabalho de linha de comando. Para situações como essas, você precisa executar o seguinte comando antes de iniciar seu trabalho:
[space]set +o history
Nota: [space] representa um espaço em branco.
O comando acima desabilitará o histórico temporariamente, significando que tudo o que você fizer após executar este comando não será registrado no histórico, embora todas as coisas executadas antes do comando acima estarão lá como estão na lista de histórico.
Para reativar o histórico, execute o seguinte comando:
[Space]set -o history
Isso traz as coisas de volta ao normal novamente, o que significa que qualquer trabalho de linha de comando feito após o comando acima aparecerá no histórico.
5. Exclua comandos específicos do histórico
Agora suponha que a lista de histórico já contenha alguns comandos que você não deseja que sejam registrados. O que pode ser feito neste caso? É simples. Você pode ir em frente e removê-los. Veja a seguir como fazer isso:
[space]history | grep "part of command you want to remove"
O comando acima irá gerar uma lista de comandos correspondentes (que estão na lista de histórico) com um número [num] precedendo cada um deles.
Depois de identificar o comando que deseja remover, basta executar o seguinte comando para remover essa entrada específica da lista de histórico:
history -d [num]
A imagem a seguir é um exemplo disso.
O segundo comando ‘echo’ foi removido com sucesso.
Alternativamente, você pode simplesmente pressionar a tecla de seta para cima para dar um passeio de volta pela lista de histórico e, uma vez que o comando de seu interesse apareça no terminal, apenas pressione “Ctrl + U” para esvaziar totalmente a linha, removendo-a efetivamente do Lista.
Conclusão
Existem várias maneiras de manipular o histórico da linha de comando do Linux para atender às suas necessidades. Lembre-se, no entanto, de que geralmente não é uma boa prática ocultar ou remover um comando do histórico, embora também não seja errado, por si só, mas você deve estar ciente do que está fazendo e dos efeitos que isso pode ter.