J'ai quelques questions à propos de l'historique du terminal ou de la ligne de commande stocké dans ~/.bash_history
.
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?
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?
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.
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.
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.
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.
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
vi ~/.bash_history
9999999 dd
<esc>wq!
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.
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à.
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.
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