Question Terminal 'mode incognito'?


J'utilise beaucoup Terminal, et parfois je lance des commandes, qui ne sont pas des choses que je ne veux pas que les autres voient, mais d'autres commandes qui, si je fus accidentellement fléchées et exécutées accidentellement, causeraient beaucoup de problèmes.

Je me demande donc s'il existe, ou si je peux faire, une sorte de «mode incognito» du terminal qui me permettrait, lors de l'exécution d'une commande donnée, d'arrêter l'enregistrement de mon historique, puis de ne commencer à Commencez à enregistrer l'historique à nouveau et quittez le «mode navigation privée», ou redémarrez simplement le terminal?

Parce que je me retrouve plus tard à aller enlever des choses de ma .bash_history, quand ce serait beaucoup plus facile si j'avais pu arrêter l'enregistrement là-bas ou, du moins, essayer de l'enregistrer quelque part là où ça ne serait pas permis, et finirais par ne pas l'enregistrer.


225
2018-05-18 14:53


origine


@Sparhawk: quoi?
Eh bien, probablement vous êtes paranoïaque que votre histoire sera lue par d'autres? - Sparhawk
@Sparhawk: Eh bien, c'est en partie ce que je veux faire, et faire la fête, je ne veux pas exécuter accidentellement une commande de maintenance potentiellement mortelle quand j'arrive juste à venir! :RÉ
Juste pour ajouter, vous n'avez pas à vous justifier: "Ce ne sont pas des choses que je ne veux pas que les autres voient". Ce serait une raison parfaitement valable pour moi aussi. (Surtout à cette époque et à cet âge où tout le monde essaie de vous faire croire coupable d'avoir des "choses à cacher") - ereOn
Si vous ouvrez deux onglets, faites des choses dans le premier, faites des choses dans le second, puis fermez le second AVANT le premier, seul l’historique du premier semble être écrit dans .bash_history. (Ubuntu 15.04 ruiné Terminal, chanceux c'est un USB en direct.) - Hitechcomputergeek


Réponses:


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

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

Exemple: Espaceecho "Some secret text"

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


Désactiver temporairement l'historique:

  • Courir Espaceset +o history ou Espaceshopt -uo history pour désactiver l'historique.
  • Courir set -o history ou shopt -so history pour l'activer à nouveau.

Désactiver l'historique pour la session en cours (ne se souviendra pas des commandes de la session):

unset HISTFILE

Note: Vous pourrez voir les commandes en appuyant sur Vers le haut jusqu'à ce que vous fermez le terminal.


Supprimer une commande de l'historique:

Courir Espacehistory | 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+Décalage+C

Courir Espacehistory -d <number> où <number> est le numéro d'entrée pour supprimer l'entrée.
Vous pouvez coller ce numéro avec Ctrl+Décalage+V


Autres réponses intéressantes:


260
2018-05-19 15:01



Si tu utilises history -d pour supprimer une ligne, cela supprime le contenu de la ligne, mais vous ne pouvez jamais supprimer le fait que vous avez exécuté history -d (sauf si vous utilisez d'abord set +o history avant de courir history -d) - AJFaraday
Cela m'a rappelé la logique de la super-injonction, c'est tout;) - AJFaraday
(OT) Les injonctions sont un document juridique qui empêche les gens de publier quelque chose. Une super injonction les empêche également de publier le fait qu'ils n'ont pas été autorisés à publier. Certains arguments logiques demandent s'ils peuvent publier qu'ils se sont vu refuser la possibilité de publier certaines informations. Ensuite, cela devient un argument cyclique. - AJFaraday
@Helio Je pense qu'il est préférable pour les utilisateurs de connaître le "bon" moyen de copier - surtout s'ils choisissent accidentellement du texte. Je ne sais pas comment faire de l'espace, peut-être clarifier plus que l'espace est là? L'espace me semble un peu maladroit ... - Tim
le unset HISTFILE l'approche fonctionne également rétroactivement pour toutes les commandes qui n'ont pas été écrites dans .bash_history encore. - kasperd


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


39
2018-05-18 15:04



Cela ne supprimera pas toute l'histoire? - Helio
Cela ne fera que supprimer l'historique de cette session de terminal particulière. - Moithil Biswas


shopt -uo history devrait le faire mieux.

Nuking le HISTFILE (et al) les variables n'arrêteront pas votre Vers le haut l'historique étant enregistré, il ne va tout simplement pas le pousser sur le disque. Cela peut être ou ne pas être une chose positive pour vous, mais étant donné que vous en parlez, je suppose que vous voulez quelque chose de mieux. Changer le shopt paramètre historique empêche tout le mécanisme d’historique de se déclencher.

Vous pouvez vous reconnecter avec shopt -so history (la -s et -u sont définies et non définies respectivement).

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


28
2018-05-19 22:00





Une autre façon de tuer le shell actuel sans se connecter au fichier d’historique est de:

kill -9 $$

Cela amène bash (et probablement d'autres shells) à envoyer lui-même le signal SIGKILL, en le tuant sur-le-champ et en l'empêchant d'écrire sur le disque.


17
2018-05-18 15:02



a.k.a 'Tirez-vous dans la tête' :). Cela présente l'avantage que vous n'avez pas besoin de vous souvenir de faire quoi que ce soit avant d'écrire les commandes. - Guido
J'utilise zsh avec l'historique incrémental, donc je doute que cela fonctionnerait dans mon cas - Wayne Werner


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

unset HISTFILE

tant que la session est active, vous pouvez accéder à l’historique comme à l’habitude, mais elle ne sera pas enregistrée sur le disque.

Pour inverser dans la même session (tous les changements seront enregistrés)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



Et y a-t-il un moyen facile dans la session en cours de renverser la situation et de continuer?
@ParanoidPanda J'ai ajouté une commande pour revenir à la session en cours. - Bruni
@ParanoidPanda: Pourquoi faut-il une commande pour définir HISTFILE à nouveau sur la session en cours? Si vous annulez la modification (même après l'exécution des commandes secrètes), elles seront stockées dans l'historique lorsque vous quitterez. - Helio
@Helio: Oh, non, je voulais dire une commande qui recommencerait à enregistrer, mais pas à enregistrer les commandes que je ne voulais pas sauvegarder.
@ParanoidPanda, Helio semble avoir raison sur celui-ci car l'historique est sauvegardé à la sortie. Je n'avais pas considéré cela. - Bruni


Vous pouvez modifier les lignes d'historique dans la session shell en cours. Si vous revenez à travers l'histoire (par exemple avec Vers le haut ou Ctrl+P) et changer une ligne sans l'exécuter, seule la version modifiée de la ligne sera enregistrée. Vous pouvez le modifier comme bon vous semble; les bons choix incluent l'utilisation Ctrl+U vider totalement la ligne ou utiliser Esc# mettre un # commenter le caractère au début.

Pour laisser une ligne sans l'exécuter, n'oubliez pas de ne pas frapper Revenir (Entrer). Ce que je fais, c'est retourner à la nouvelle ligne de l'histoire via Esc>.

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

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


10
2018-05-20 03:24





Vous pouvez également créer .bash_history en lecture seule. Je voudrais d'abord vider le fichier et ensuite faire:

 chattr +i .bash_history

6
2018-05-21 20:46