web-dev-qa-db-fra.com

Comment rechercher dans mon historique de ligne de commande les commandes que j'ai déjà utilisées?

Existe-t-il un moyen de filtrer mon historique en dehors de l'affichage de l'historique?

Dites que je veux rechercher une commande qui a commencé par "ssh"?

176
Blankman

Presse Ctrl+R et tapez sshCtrl+R lancera la recherche de la commande la plus récente à l’ancienne (recherche inversée). Si vous avez plusieurs commandes commençant par ssh, appuyez sur Ctrl+R encore et encore jusqu'à ce que vous trouviez la correspondance.

Une fois que vous avez trouvé le match, vous pouvez appuyer sur Enter pour exécuter la commande ou le curseur gauche/droite pour sélectionner simplement le texte de la commande.

Il n'y a pas d'option inverse par défaut pour Ctrl+R pour inverser le sens de la recherche mais ici vous trouverez quelques suggestions à ce sujet.

256

Si vous souhaitez simplement effectuer une recherche dans votre historique, vous pouvez simplement utiliser history | grep ssh, en remplaçant ssh par tout ce que vous souhaitez rechercher.

87
ssmy

Je fais une légère variation de ce qui précède, fonctionne bien pour moi (si vous faites référence à votre histoire bash

Dans mon dossier personnel, je crée un fichier nommé

.inputrc

À l'intérieur va cette

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Remarque: ce qui précède ne semble plus fonctionner dans 14.04, donc cela fait la même chose -

"\e[A":history-search-backward
"\e[B":history-search-forward

Puis, en tapant dans la commande précédente, je souhaite utiliser les boutons page up/page dn pour parcourir l'historique, toujours en commençant par page up.

15
doug

Pressage Ctrl+R va commencer le mode "reverse-i-search", taper "ssh" rechercherait dans votre historique les commandes contenant "ssh".

14
Sergey

Voici une autre méthode utilisant des commandes classiques (plus de chances de fonctionner avec plusieurs distributions). L’historique des commandes est stocké dans le fichier .bash_history de votre répertoire personnel. Vous pouvez ainsi:

grep "ssh" ~/.bash_history

N'oubliez pas l'indicateur -i si vous avez besoin d'une recherche insensible à la casse.

7
DisgruntledGoat

J'ai trouvé la fonction suivante quelque part sur Internet et je l'ai utilisée à bon escient. Mettez ceci dans votre ~/.bashrc:

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

Maintenant, rechargez votre Shell: exec bash. Vous avez maintenant une nouvelle commande que vous pouvez utiliser comme ceci:

hgrep ssh

Il vous montrera une liste de commandes correspondantes de votre historique. Pour exécuter une commande, tapez ! suivi du numéro de la commande. Voici un exemple:

~:$ hgrep scp
  207  tn scp foreign-teachers __Host__:unity.log __Host__:compiz.log .
  421  tn scp scott-laptop __Host__:Scott\ Severance.asc .
  422  tn scp scott-laptop __Host__:'Scott\ Severance.asc' .
  468  tn scott-desktop scp -r Backgrounds/* __Host__:Pictures/Backgrounds
  469  tn scott-laptop scp -r Backgrounds/* __Host__:Pictures/Backgrounds
  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207

J'aime mieux cette approche que Ctrl+R car cela permet des recherches beaucoup plus souples et que je peux voir plusieurs résultats à la fois.

2
Scott Severance

Mettez ceci dans votre ~/.bashrc:

alias hgrep = 'histoire | grep --color = auto '

exemple:

2
hadj messaoud

L'histoire est bonne mais limitée - je préfère configurer mon environnement bash pour pouvoir consigner toutes les commandes que j'ai exécutées, en plus du répertoire. Ensuite, je lance une commande pour lister toutes les commandes que j’ai exécutées dans le répertoire courant, que je peux diriger vers grep, etc. - c’est appelé 'dish', voir:

https://github.com/wolfwoolford/dish

Si vous voulez aller droit au but, sourcez-le simplement dans votre .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Il existe également une commande très utile que vous recevez gratuitement et qui s'appelle 'dishg' - ou dish global - qui imprime chaque commande exécutée, quel que soit le répertoire. Évidemment, celui-ci n'est utile que lorsqu'il est utilisé avec grep et tail etc ...

Je l'utilise depuis des années et c'est littéralement la première chose que j'installe à chaque fois que je configure une nouvelle boîte. Il enregistre les commandes que vous exécutez dans des fichiers texte dans un répertoire caché (~/.dish). Je n'ai jamais eu de problème d'espace disque ...

1
David Woolford

Si vous utilisez Shell dans Emacs (M-x Shell), vous pouvez utiliser M-r (équivalent à Ctrl+R dans un terminal ).

1
N.N.

Voulait écrire ceci en tant que commentaire sur @ ssmy mais n'a pas pu faire coopérer la mise en forme dans le commentaire.

Après avoir parcouru l’historique avec history | grep ssh, vous pouvez exécuter la commande souhaitée en tapant son numéro précédé d’un point d’exclamation, par exemple. !42.

Exemple:

 $ history | grep ssh 
 5 ssh [email protected] 
 13 ssh [email protected] 
 42 ssh [email protected] 
 $! 42 
0
magikMaker