web-dev-qa-db-fra.com

Suppression de l'historique de ~ / .bash_history

J'ai quelques questions à propos de l'historique du terminal ou de la ligne de commande stocké dans ~/.bash_history.

  1. Je peux voir le fichier dans le terminal avec la commande history mais si j'essaie de l'ouvrir avec gedit bash_history, le fichier est complètement vide. Pourquoi?

  2. J'ai trouvé comment supprimer un certain nombre de lignes dans le fichier du terminal avec cette ligne de code:

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

    où N est le nombre de lignes (ou de commandes) que vous souhaitez supprimer, mais le fichier d'historique affiche maintenant cette dernière commande, ce qui n'est pas très intelligent si vous essayez de couvrir vos données. La question est donc la suivante: comment puis-je donner la dernière ligne de code et s’assurer que celle-ci n’est pas enregistrée?

8
IDK
  1. Vous venez d’oublier le point précédent, la commande pour ouvrir votre fichier d’historique de terminal (bash) est

    gedit ~/.bash_history
    

    Ce fichier est mis à jour uniquement lorsque vous fermez un terminal.

  2. Pour supprimer les dernières 10 lignes de ce fichier et ne pas enregistrer cette commande elle-même, ouvrez un nouveau terminal et exécutez la chaîne de commandes suivante:

    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 supprime respectivement les lignes sélectionnées de ~/.bash_history, history -c efface l'historique du terminal et exit le ferme.

18
dessert

Le fichier bash_history est un fichier caché, commençant par un point. Tu as besoin de faire

gedit ~/.bash_history

Cela ouvrira le fichier dans gedit.

4
user732773

Si vous souhaitez uniquement supprimer certaines parties de votre journal de commandes, les méthodes ci-dessus conviennent parfaitement. Si vous souhaitez arrêter la journalisation des commandes pour une session bash particulière, lancez la commande

unset HISTFILE

Pour être plus radical, si vous ne voulez pas qu’une de vos commandes soit enregistrée, alors vous pouvez le faire.

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

Notez que la première méthode ne serait effective que pour une seule session, tandis que la seconde arrêterait la journalisation des commandes pour toutes les sessions futures.

1
Mukesh Sai Kumar

Je sais que cela a déjà été accepté, mais c’est comme ça que je le fais depuis les années 80. C'est un excellent moyen de cacher vos traces et c'est une approche en plusieurs phases. Pour l’essentiel, c’est celui qui n’est remarqué que si on y prête vraiment attention. Voici comment c'est fait.

Ouvrez un terminal/shell/session et faites:

 chmod 444 ~/.bash_history

quittez le shell et ouvrez un terminal/shell/session et faites: Voici quelques moyens créatifs de supprimer définitivement l'historique

1:

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

2 (create a fake history)

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

alors pour faire bonne mesure:

 chmod 444 ~/.bash_history

sortir de la coquille

ouvrez un nouveau shell et tapez

 history

ce qui le rend moins visible, c’est que si on fait un ls -ratl, le ~/.bash_history finira par disparaître dans le hochet de la liste des répertoires. Il ne sera pas présenté comme un lien qui attirerait une attention inutile. La plupart des gens ne font pas de -a sur leur racine, ce qui est utile lorsque l’émulation est souhaitée.

L'inconvénient de cette approche est que vous perdez votre capacité à revenir en arrière et à récupérer votre historique. Le fichier ~/.bash_history peut également se retrouver en haut d’une liste de répertoires, car il peut se retrouver avec une date de modification très ancienne au fil du temps, ce qui peut en soi conduire à la découverte d’un problème.

1
Div

L'historique n'est sauvegardé que lorsque vous vous déconnectez du shell. Essayez de vous déconnecter du shell, puis consultez à nouveau .bash_history. L'historique des commandes devrait être là.

0

1) Exécutez sh; cela engendre un sous-shell de cendres, qui n'enregistre pas l'histoire du tout. Modifier à partir de là

2) Ajoutez la ligne HISTCONTROL=ignoreboth à .bashrc et faites exec bash pour remplacer définitivement le shell en cours par un autre réinitialisé, puis exécutez toutes les commandes que vous ne souhaitez pas enregistrer avec un espace de début.

0
Joshua

puisque je ne peux pas encore commenter, je vais ajouter mes commentaires comme réponse:

man history répondra à tout.

la réponse à la question 1 est que l’histoire est en mémoire. history -a à enregistrer dans un fichier immédiatement. history -w permettra également de sauvegarder mais pourrait gâcher d'autres sessions.

réponse n ° 2: history -a, gedit, supprimer les lignes souhaitées, history -r

0
gcb