web-dev-qa-db-fra.com

Mode «incognito» du terminal?

J'utilise beaucoup Terminal, et parfois j'exécute des commandes qui ne sont pas des choses que je ne veux pas que les autres voient, mais d'autres commandes qui, si je me lançais accidentellement dans une flèche ou une exécution accidentelle, causeraient beaucoup de problèmes.

Je me demande donc s’il existe ou si je peux créer une sorte de "mode incognito" de Terminal qui me permettrait, lors de l’exécution d’une commande donnée, d’arrêter d’enregistrer mon historique, puis de commencer à enregistrer uniquement après avoir exécuté une commande. recommencer l'enregistrement de la commande et quitter le mode 'incognito' ou redémarrer simplement le terminal?

Parce que je me retrouve plus tard à retirer des éléments de mon .bash_history, alors que ce serait beaucoup plus facile si j'avais pu arrêter l'enregistrement, ou du moins le faire essayer de l'enregistrer à un endroit où ce ne serait tout simplement pas possible être autorisé à, et finirait juste par ne pas l'enregistrer.

229
user364819

Exécuter une commande sans la mettre dans l'historique:

Il suffit de mettre un espace avant la commande. Bash ignorera les commandes avec un espace ajouté:

Exemple: Spaceecho "Some secret text"

Remarque: Ceci ne fonctionne que si la variable HISTCONTROL est définie sur ignorespace ou ignoreboth.


Désactiver temporairement l'historique:

  • Courir Spaceset +o history ou Spaceshopt -uo history pour désactiver l'historique.
  • Exécutez set -o history ou shopt -so history pour le réactiver.

Désactive l'historique de la session en cours (ne mémorise aucune commande de la session):

unset HISTFILE

Remarque: vous pourrez voir les commandes en appuyant sur Up jusqu'à ce que vous fermez le terminal.


Supprime une commande de l'historique:

Courir Spacehistory | grep "part of your secret command"

Il affichera une liste des commandes précédemment exécutées, dans ce format:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Sélectionnez le numéro d'entrée à gauche de la commande. Vous pouvez le copier avec Ctrl+Shift+C

Courir Spacehistory -d <number><number> est le numéro de l'entrée pour supprimer l'entrée.
Vous pouvez coller ce nombre avec Ctrl+Shift+V


Autres réponses intéressantes:

263
Helio

Vous pouvez simplement supprimer l'historique d'une session de terminal particulière en ajoutant la commande history -cw après avoir travaillé. Ne fermez pas le terminal avant de donner la commande.

40
Moithil Biswas

shopt -uo history devrait le faire mieux.

Utiliser les variables HISTFILE (et al) n’arrête pas votre Up l'historique étant enregistré, il ne veut tout simplement pas le pousser sur le disque. Cela peut ou peut ne pas être une chose positive pour vous, mais étant donné que vous en parlez, je suppose que vous voulez quelque chose de mieux. La modification du paramètre d'historique shopt empêche le déclenchement de tout le mécanisme de l'historique.

Vous pouvez réactiver la connexion avec shopt -so history (les -s et -u sont respectivement définis et non définis).

Notez que la commande elle-même sera probablement consignée, donc ajoutez-y un espace pour l'empêcher d'être ajoutée à l'historique avant d'effacer la variable.

28
Oli

Une autre façon de tuer le Shell actuel sans se connecter au fichier d’historique consiste à:

kill -9 $$

Ceci a pour effet que bash (et probablement d’autres coquilles aussi) envoie le signal SIGKILL à lui-même, le tue immédiatement et l’empêche de rien écrire sur le disque.

17
dolt

Pour désactiver temporairement l'historique des commandes de la session en cours, vous pouvez désactiver temporairement la variable d'environnement HISTFILE.

unset HISTFILE

pendant que la session est active, vous pouvez accéder à l'historique comme d'habitude, mais il ne sera pas sauvegardé sur le disque.

Pour inverser la même session (toutes les modifications seront enregistrées)

HISTFILE=$HOME/.bash_history
13
Bruni

Vous pouvez modifier les lignes de l'historique dans la session Shell en cours. Si vous revenez dans l’histoire (par exemple avec Up ou Ctrl+P) et changer une ligne sans l'exécuter , seule la version modifiée de la ligne sera sauvegardée. Vous pouvez le modifier à votre guise. de bons choix incluent l'utilisation Ctrl+U totalement effacer la ligne ou en utilisant Esc# mettre un caractère de commentaire # au début.

Pour laisser une ligne sans l'exécuter, rappelez-vous de ne pas taper Return (Enter). Ce que je fais est de revenir à la dernière ligne de l’histoire via Esc>.

(Au lieu de Esc suivi par >, dans la plupart des terminaux, vous pouvez tenir Alt et appuyez sur >; il en va de même pour le Esc# suggestion ci-dessus.)

Remarque: Vous ne pouvez pas modifier de manière permanente les entrées de sessions précédentes de cette façon. Ces modifications ne seront pas appliquées au HISTFILE à la fin de la session.

10
echristopherson

Vous pouvez également faire en sorte que .bash_history soit en lecture seule. Je voudrais d'abord vider le fichier puis faire:

 chattr +i .bash_history
6
Webtm

Vous pouvez exécuter les commandes sensibles dans une session d'écran, puis détruire la session lorsque vous avez terminé.

Alternativement, vous pouvez garder cette session d'écran vivante mais séparée, et y accéder uniquement lorsque vous voulez réellement pouvoir utiliser la flèche vers le haut pour les commandes autrement dangereuses.

5
keag

Vous pouvez également utiliser un multiplexeur de terminal tel que tmux, screen. Donc, sous tmux ou screen, l'historique ne serait pas sauvegardé.

1
vusan

Personnellement, j'utilise mksh, et ce shell n'a par défaut aucun fichier d'historique. Cela signifie que vous pouvez lancer un autre shell tel que mksh ou dash (qui est fourni par défaut en passant) pour exécuter la commande que vous ne voulez pas que les utilisateurs voient, puis quitter une fois terminé. bash history enregistrera uniquement que vous avez lancé Shell alternatif et c'est tout.

1