Excluindo o histórico de ~ / .bash_history

8

Eu tenho algumas perguntas sobre o terminal ou o histórico da linha de comando que está armazenado em ~/.bash_history .

  1. Eu posso ver o arquivo no terminal com o comando history , mas se eu tentar abri-lo com gedit bash_history , o arquivo estará completamente vazio. Por quê?

  2. Descobri como excluir um determinado número de linhas no arquivo do terminal com esta linha de código:

    for i in {1..N}; do history -d N; done
    

    onde N é o número de linhas (ou comandos) que você deseja excluir, mas agora o arquivo de histórico mostra este último comando e isso não é muito inteligente se você estiver tentando cobrir suas coisas. Então a questão é: Como posso dar a última linha de código e garantir que isso não seja gravado?

por IDK 04.09.2017 / 06:57

7 respostas

18
  1. Você acabou de esquecer o ponto anterior, o comando para abrir o arquivo de histórico do terminal (bash) é

    gedit ~/.bash_history
    

    Este arquivo só é atualizado quando você fecha um terminal.

  2. Para remover as últimas 10 linhas deste arquivo e não obter este comando gravado, abra um novo terminal e execute a seguinte cadeia de comandos:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit
    

    ou

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit
    

    ou

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit
    

    sed ou head , respectivamente, exclui as linhas selecionadas de ~/.bash_history , history -c limpa o histórico do terminal e exit fecha esse histórico.

por dessert 04.09.2017 / 07:12
4

O arquivo bash_history é um arquivo oculto, começando com um ponto. Você precisa fazer

gedit ~/.bash_history

Isso abrirá o arquivo no gedit.

    
por user732773 04.09.2017 / 07:48
1

Se você quiser excluir apenas certas partes do seu log de comando , os métodos acima são bons. Se você quiser parar o log de comandos para uma determinada sessão bash, emita o comando

unset HISTFILE

Para ser mais drástico, se você não quiser que nenhum dos seus comandos seja logado , então você pode fazer

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

Observe que o primeiro método estaria em vigor apenas para uma única sessão, enquanto o segundo método interromperia o registro de comandos para todas as sessões futuras.

    
por Mukesh Sai Kumar 04.09.2017 / 11:43
1

Eu percebo que isso já tem uma resposta aceita, mas é assim que faço desde os anos 80. É uma ótima maneira de esconder suas faixas e é uma abordagem multi-fase. Na maioria das vezes é uma que não é notada a menos que esteja realmente prestando atenção. Veja como isso é feito.

Abra um terminal / shell / session e faça:

 chmod 444 ~/.bash_history

saia da casca abra um terminal / shell / session e faça: Aqui estão algumas maneiras criativas de apagar a história permanentemente

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (crie um histórico falso)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

depois, para uma boa medida:

 chmod 444 ~/.bash_history

saia do shell

abra um novo shell e digite

 history

o que torna menos perceptível é se alguém faz um ls -ratl, a ~ / .bash_history irá eventualmente desaparecer no chocalho da lista de diretórios. Ele não aparecerá como um link que atrairia atenção desnecessária. A maioria das pessoas não faz um -a na raiz, o que é útil quando a emulação é desejada.

A desvantagem dessa abordagem é que você perde sua capacidade de voltar e recuperar seu histórico. o arquivo ~ / .bash_history real também pode acabar no topo de uma listagem de diretório, uma vez que pode acabar com uma data de modificação realmente antiga ao longo do tempo, o que por si só pode levar à descoberta de que algo está errado.

    
por Div 04.09.2017 / 19:48
0

1) Execute sh ; isso gera um subnível de cinzas, que não registra a história. Edite de lá

2) Adicione a linha HISTCONTROL=ignoreboth a .bashrc e use exec bash para substituir permanentemente o shell atual por um reinicializado. Em seguida, faça todos os comandos que você não deseja registrar em log com um espaço à esquerda.

    
por Joshua 04.09.2017 / 17:51
0

desde que eu não posso comentar ainda, irá adicionar meus comentários como resposta:

man history irá responder tudo.

resposta para # 1 é que a história está na memória. history -a para salvar no arquivo imediatamente. history -w também salvará, mas poderá atrapalhar outras sessões.

answer # 2: history -a , gedit, exclua as linhas desejadas, history -r

    
por gcb 04.09.2017 / 19:54
0

O histórico não é salvo até você sair do shell. Tente sair do shell e depois olhe para .bash_history novamente. O histórico de comandos deve estar lá.

    
por The Lightning Stalker 04.09.2017 / 16:27