Bash conserve la liste des commandes en mémoire en interne pendant son exécution. Ils sont écrits en .bash_history
sortie :
Lorsqu'un shell interactif se ferme, les dernières lignes $ HISTSIZE sont copiées de la liste d'historique dans le fichier nommé par $ HISTFILE.
Si vous souhaitez forcer l'écriture de l'historique des commandes, vous pouvez utiliser la history -a
commande qui:
Ajoutez les nouvelles lignes d'historique (lignes d'historique entrées depuis le début de la session Bash en cours) au fichier d'historique.
Il y a aussi une -w
option:
Ecrivez l'historique actuel dans le fichier d'historique.
ce qui peut vous convenir davantage en fonction de la manière dont vous utilisez votre historique.
Si vous voulez vous assurer qu'ils sont toujours écrits immédiatement, vous pouvez mettre cette commande dans votre PROMPT_COMMAND
variable:
export PROMPT_COMMAND='history -a'
.bash_history
fichier devient accidentellement la propriété de root, les choses cessent de fonctionner. Dans ce cas, vérifiez la propriété et utilisez-lasudo
pour la réparer si nécessaire.(Pas une réponse mais je ne peux pas ajouter de commentaires)
Si vous vérifiez
.bash_history
parce que vous voulez simplement supprimer une commande spécifique (par exemple, contenant un mot de passe en clair), vous pouvez directement supprimer l'entrée en mémoire parhistory -d <entry_id>
.Par exemple, supposons une sortie comme:
et vous voulez purger la
export
ligne, vous pouvez simplement y arriver en:la source
bash le garde en mémoire de travail, bash peut être configuré pour le sauvegarder à la fermeture de bash ou après chaque commande et pour être chargé au démarrage ou à la demande de bash.
Si vous configurez pour enregistrer après chaque commande, prenez en compte les conséquences de l’exécution simultanée de plusieurs bash. (les lignes de commande seront entrelacées)
la source
bash
impression que l’historique est stocké dans un fichier appelé bash, ou même dans l’ exécutable. Je voudrais écrire "Il est stockébash
dans la mémoire, ..."Les commandes sont enregistrées dans la mémoire (RAM) lorsque votre session est active. Dès que vous fermez le shell, la liste de commandes est écrite
.bash_history
avant l'arrêt.Ainsi, vous ne verrez pas l'historique de la session en cours dans
.bash_history
.la source
bash
fin, ce qui n’implique pas un redémarrage (en particulier dans les environnements graphiques où vous pouvez ouvrir et fermer les terminaux à votre guise).Lors de l’exécution, l’historique est uniquement conservé en mémoire (par défaut) si:
H
dansecho "$-"
) est défini.0
et*
(ou un autre schéma très restrictif).En cas d'échec de l'un des éléments ci-dessus, aucun historique n'est stocké en mémoire et, par conséquent, aucun historique ne peut ni ne sera écrit sur le disque.
L’historique en mémoire est écrit sur le disque si:
Mais seulement lorsque le shell se ferme ou si les commandes
history -a
(ajouter) ouhistory -w
(écrire) sont exécutées.Pour déclencher une écriture immédiate sur le disque, vous pouvez utiliser la variable:
qui sera
append
lesnew
lignes de l'historique dans le fichier d'historique. Ce sont des lignes d’historique saisies depuis le début de la session bash en cours, mais qui ne sont pas déjà ajoutées au fichier d’historique.Ou:
Pour écraser l'historique dans HISTFILE avec la liste de la mémoire.
Vous pouvez donc supprimer une commande de l'historique en mémoire:
Et écrivez-le sur le disque avec la dernière commande:
la source