Suppression de l'historique de ~ / .bash_history

8

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

  1. Je peux voir le fichier dans le terminal avec la historycommande mais si j'essaye de l'ouvrir avec gedit bash_historyle 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 commandes) que vous souhaitez supprimer, mais maintenant le fichier historique affiche cette dernière commande et ce n'est pas très intelligent si vous essayez de couvrir vos affaires. La question est donc: comment puis-je donner la dernière ligne de code et m'assurer que cela ne soit pas enregistré?

IDK
la source
Pour une note ultérieure, si vous démarrez une commande avec un espace, cette commande ne sera pas enregistrée dans votre historique.
Paddy Landau

Réponses:

18
  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 n'est mis à jour que lorsque vous fermez un terminal.

  2. Pour supprimer les 10 dernières 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

    sedou headsupprime respectivement les lignes sélectionnées ~/.bash_history, history -cefface l'historique du terminal et le exitferme.

dessert
la source
Une alternative plus courte et, espérons-le, plus rapide à for+ sed: head -n -Noù majuscule Nest le nombre de lignes à supprimer. stackoverflow.com/a/13380679/711006
Melebius
2
@Melebius semble prometteur, mais comment redirigez-vous la sortie vers le fichier d'entrée en la remplaçant? head -n -N testfile > testfileefface simplement le fichier! J'ai ajouté une solution de contournement, mais elle n'est certainement pas plus courte.
dessert du
Vous avez raison, j'ai oublié que ça headne peut pas fonctionner sur place comme sed. Je cherchais principalement une seule sedcommande remplaçant votre forboucle. Il y a quelques options sur la page que j'ai liée mais elles ne semblent pas aussi compréhensibles que votre code.
Melebius
@Melebius Voir sed1line.txt pour cela - je l'ai ajouté ci-dessus, ce n'est pas vraiment plus court mais devrait être plus rapide.
dessert du
4

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.

George Udosen
la source
1

Si vous souhaitez supprimer uniquement 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, exécutez la commande

unset HISTFILE

Pour être plus drastique, si vous ne voulez pas que vos commandes soient enregistrées , vous pouvez le faire

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

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

Mukesh Sai Kumar
la source
1

Je me rends compte que cela a déjà une réponse acceptée, mais c'est ainsi que je le fais depuis les années 80. C'est un excellent moyen de masquer vos pistes et c'est une approche multi-phases. Pour la plupart, c'est celui qui n'est pas remarqué à moins que l'on n'y prête vraiment attention. Voici comment c'est fait.

Ouvrez un terminal / shell / session et faites:

 chmod 444 ~/.bash_history

quitter le shell ouvrir un terminal / shell / session et faire: Voici quelques façons créatives de supprimer définitivement l'historique

1:

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

2 (créer une fausse histoire)

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

alors pour faire bonne mesure:

 chmod 444 ~/.bash_history

quitter le shell

ouvrir un nouveau shell et taper

 history

ce qui le rend moins visible, c'est que si l'on fait un ls -ratl, le ~ / .bash_history finira par disparaître dans le hochet de la liste des répertoires. Il n'apparaîtra pas 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 réel pourrait é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 en soi pourrait conduire à la découverte que quelque chose ne va pas.

Div
la source
si vous utilisez alors 9999999 ddpour supprimer toutes les lignes du fichier :%d, :1,$dou si vous dGtravaillez beaucoup mieux
phuclv
0

1) Courez sh; cela engendre une sous-couche de cendres, qui n'enregistre pas du tout l'histoire. Modifier à partir de là

2) Ajoutez la ligne HISTCONTROL=ignorebothà .bashrc, et faites exec bashpour remplacer définitivement le shell actuel par un shell réinitialisé, puis exécutez toutes les commandes que vous ne souhaitez pas enregistrer avec un espace de tête.

Joshua
la source
0

puisque je ne peux pas encore commenter, j'ajouterai mes commentaires comme réponse:

man history répondra à tout.

réponse à # 1 est que l'histoire est dans la mémoire. history -apour enregistrer dans un fichier immédiatement. history -wsauvera également mais pourrait gâcher d'autres sessions.

réponse # 2 history -a:, gedit, supprimez les lignes que vous voulez,history -r

gcb
la source
0

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

The Lightning Stalker
la source
Modifié comme suggéré Assez bien maintenant?
The Lightning Stalker