Comment puis-je supprimer une certaine ligne de history
la base de données?
linux
bash
history
command-history
w0rldart
la source
la source
vim ~/.bash_history
) avec un espace; les commandes commençant par un espace ne sont généralement pas enregistrées (voir$HISTCONTROL
).Vous pouvez supprimer le fichier d'historique à l'aide de la ligne de commande en deux étapes:
history -d <line_number>
supprime une ligne spécifiée de l'historique en mémoire.history -w
écrit l'historique actuel en mémoire dans le~/.bash_history
fichier.Les deux étapes combinées suppriment la ligne de façon permanente de l' historique en mémoire et du fichier .bash_history .
la source
history -w
de l'historique?<line_number>
justehistory | grep [unwanted_content]
pour obtenir une liste avec toutes les lignes contenant[unwanted_content]
(comme les mots de passe).Pour éviter qu'une commande ne soit ajoutée à l'historique en premier lieu, assurez-vous que la variable d'environnement
HISTCONTROL
contient parmi ses valeurs séparées par des deux-points la valeurignorespace
, par exemple (add eg to.bashrc
):Cela empêchera toute commande avec un espace de début d'être ajoutée à l'historique. Vous pouvez ensuite effacer complètement l'historique en exécutant
la source
Tout d'abord, si la commande que vous êtes sur le point d'émettre est sensible, dangereuse ou si vous n'avez pas besoin de l'encombrer dans votre historique, il est préférable de l'empêcher d'entrer dans l'historique en premier lieu. Assurez-vous que cela
$HISTCONTROL
contientignorespace
:Ensuite, effectuez toute commande que vous ne voulez pas dans votre historique avec un espace:
Si vous avez accidentellement ajouté une commande indésirable à l'historique, à condition que votre session bash soit toujours ouverte, la commande n'a pas encore touché le disque. Pour supprimer la commande précédente de l'historique, tapez:
Notez l'espace de premier plan; cette commande nécessite
ignorespace
, sinon elle va juste se supprimer!Si vous souhaitez supprimer les dernières commandes, recherchez le dernier et le premier numéro d'historique:
Dans ce cas, 602 et 599. Ensuite, publiez:
(Sans
ignorespace
, ce serait 603..599.)Si vous ne souhaitez pas que l' historique de votre session actuelle accède au disque, quittez en utilisant:
Jusqu'à présent, l'approche consiste à ne même pas laisser les éléments de l'historique sensibles être écrits sur le disque pour plus de sécurité, car en théorie, les données supprimées d'un support non volatile peuvent toujours être récupérées.
Si, toutefois, les commandes que vous souhaitez supprimer proviennent d'une session précédente, elles auront déjà été ajoutées à la
$HISTFILE
sortie. L'histoire avec la manipulation des commandes ci - dessus encore que append les autres nouveaux éléments à la$HISTFILE
, à la sortie . Pour écraser la vue$HISTFILE
avec la vue de la session en cours de tout l' historique, tapez maintenant :Bien sûr, pour les éléments d’historique déjà présents sur le disque, l’alternative à l’édition de l’historique avec les
history -d
commandeshistory -w
, est l’édition$HISTFILE
avec un éditeur de texte.la source
$HISTFILE
, à la sortie . » En fait, ce n'est pas tout à fait vrai. Il semble ajouter uniquement les nouveaux éléments restants qui "ressortent" de la longueur de l'historique d'origine. Par exemple, si je supprime 5 éléments originaux et en ajoute 15 nouveaux, seules les 10 dernières nouvelles sont ajoutées, alors que je m'attendrais à ce que les 15 nouveaux soient ajoutés. Je pense que c'est un bug parce que je ne vois pas en quoi cette fonctionnalité est toujours souhaitable.Plusieurs techniques:
Empêcher que des informations sensibles soient stockées dans le fichier historique
Si vous avez entré un mot de passe sur une ligne de commande, assurez-vous que toutes les commandes sont consignées, vous pouvez soit:
Forcer la sortie de la session en cours sans sauvegarder l'historique:
Cela supprimera toute l'histoire actuelle.
Tapez ↑ (up arrow)la session bash ouverte jusqu'à ce que les informations sensibles soient affichées, puis utilisez les combinaisons de touches de modification de ligne telles que Ctrl+ Wpour supprimer les informations sensibles, puis ↓ (down arrow) jusqu'à ce qu'une nouvelle ligne vide soit affichée avant de taper Enter.
Supprimer les informations sensibles du fichier historique
Si vous réalisez que des informations sensibles sont déjà stockées et que vous souhaitez les supprimer, mais pas tout votre historique:
Une simple
sed
commande pourrait faire le travail:mais, en tapant ceci, vous créez une autre ligne d'historique contenant le motif de recherche (informations sensibles) que vous essayez de supprimer. Pour que vous puissiez:
Cela fonctionnera
head -n1
avec l'entrée du terminal. Il semblera que votre terminal est bloqué (il n'y aura pas d'invite); il suffit de taper les informations que vous souhaitez supprimer du fichier. C'est une astuce pour vous permettre d'entrer (une partie de) une commande sans la taper réellement dans la ligne de commande, la rendant ainsi inéligible pour l'inclusion dans l'historique. Ensuitesed
, vous utiliserez le texte que vous avez saisi pour rechercher.bash_history
et supprimer toutes les lignes contenant les informations sensibles. Remarque: si votre modèle d'informations sensibles contient une ou plusieurs barres obliques, vous devez les échapper avec des barres obliques inverses ou modifiez lased
commande pour utiliser cette syntaxe afin de spécifier un délimiteur ne figurant pas dans le modèle:Une autre solution pourrait consister à supprimer uniquement les informations sensibles, tout en conservant les commandes contenant les informations. Pour cela, vous pouvez simplement remplacer les informations sensibles par un texte de substitution de votre choix:
Supprimer les informations sensibles de tout fichier dans une arborescence spécifique
Enfin, pour être sûr que cela ne restera pas dans un autre fichier oublié:
listera tous les fichiers concernés.
remplacera toutes les occurrences d’informations sensibles dans tous les fichiers de l’arborescence de répertoires dont le nom est root
.
. Remarque: même si cette commande utilisexargs -0
, elle ne gérera pas les fichiers contenant des nouvelles lignes dans leurs noms.la source
Recherchez la ligne que vous souhaitez supprimer en appuyant ↑ (up arrow)jusqu'à ce qu'elle apparaisse, puis appuyez sur Ctrl+ U. Cela devrait supprimer la ligne.
Si vous utilisez la
history
commande, vous pouvez voir que la ligne a été remplacée par un astérisque.la source
*
.Si vous devez supprimer plusieurs lignes en même temps, j'utilise normalement ceci:
Si vous devez supprimer la dernière commande, vous pouvez utiliser:
la source
history | grep <string>
montre toujours toutes les lignes qu'il prétendait supprimer ...history | grep XYZ | grep -v grep | tac | awk '{print "history -d", $1}'
Si vous devez supprimer une plage de lignes de l'historique, la fonction bash suivante peut vous faire gagner du temps:
La fonction devrait être typiquement ajoutée à
$HOME/.bashrc
. Pour utiliser la fonction immédiatement, vous devez faire relire le fichier par votre shell en cours d'exécution (. $HOME/.bashrc
). Ensuite, pour supprimer par exemple les commandes 200-210 de l'historique:(Remarque: cette question figure parmi les premiers résultats de la recherche si vous recherchez la suppression d'une série de commandes de l'historique bash. Ainsi, bien que ce qui précède dépasse le contenu de la question, il pourrait être utile à certains lecteurs.)
la source
for
déclaration:for n in $(seq "$2" "$1")
est stylistiquement préféré par certains, et, siseq
cela ne fonctionne pas, essayezfor ((n="$2"; n>="$1"; n--))
.59 est le numéro de ligne. Ne peut pas être plus doux que ça :)
la source
Essayez juste ceux-ci,
ceci affichera l'identifiant de l'historique et de la commande, par exemple
utilisation,
Ici 211 est l'identifiant de l'histoire. Maintenant, vérifiez ceci en utilisant
la source
Je sais que cela fait longtemps que cette question n’a pas été posée et qu’il n’ya pas eu de réponse, mais je vais vous montrer ma méthode pour nettoyer mon historique et me déconnecter en même temps.
Je cours :
history -w && nano "${HISTFILE}" && history -c && exit
Ce qu'il fait est simple:
history -w
: écrit l'historique en cache à l'intérieur"${HISTFILE}"
nano "${HISTFILE}"
: permettez-moi d’éditer"${HISTFILE}"
Vous pouvez utiliser un script sed ou ce que vous voulez pour nettoyer votre"${HISTFILE}"
history -c
: efface l'historique en cache pour que cette dernière commande ne soit pas ajoutée.exit
: me déconnecter en ajoutant l'historique mis en cache ... mais il est vide;)Après cette commande, vous serez déconnecté avec un fichier d’historique vierge. Connectez-vous pour vérifier votre historique;)
J'espère que cela aidera quelqu'un.
la source
Vous pouvez également éditer le fichier d’historique directement, par exemple
nano .bash_history
si vous êtes dans le shell bash?la source