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

157

Hormis l'affichage de l'historique, existe-t-il un moyen de filtrer mon historique?

Dites que je souhaite rechercher une commande commençant par "ssh"?

    
posée Blankman 02.11.2011 - 02:25
la source

10 réponses

237

Appuyez sur Ctrl + R et tapez ssh . Ctrl + R lancera la recherche de la commande la plus récente à l’ancienne (recherche inversée). Si vous avez plusieurs commandes qui commencent par ssh , appuyez plusieurs fois sur Ctrl + R jusqu'à ce que vous trouviez la correspondance.

Une fois la correspondance trouvée, vous pouvez appuyer sur Entrée pour exécuter la commande ou sur 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 des suggestions à ce sujet.

    
réponse donnée Prince John Wesley 02.11.2011 - 02:32
la source
80

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

    
réponse donnée ssmy 02.11.2011 - 02:36
la source
14

Appuyez sur Ctrl + R pour lancer le mode "recherche inversée". Taper "ssh" pour rechercher dans l'historique des commandes contenant "ssh".

    
réponse donnée Sergey 02.11.2011 - 02:33
la source
14

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 ceci

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

Remarque: ce qui précède ne semble plus fonctionner dans la version 14.04, il en va de même -

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

Puis, en tapant cependant dans une grande mesure d'une commande précédente, je souhaite & l’utilisation des boutons page haut / page dn permet de parcourir l’historique en commençant toujours par page haut

    
réponse donnée doug 02.11.2011 - 02:42
la source
6

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 de base. Vous pouvez ainsi:

grep "ssh" ~/.bash_history

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

    
réponse donnée DisgruntledGoat 02.11.2011 - 10:49
la source
2

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 suit:

hgrep ssh

Il vous montrera une liste des 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 elle permet des recherches beaucoup plus souples et que je peux voir plusieurs résultats à la fois.

    
réponse donnée Scott Severance 09.11.2011 - 04:14
la source
2

Mettez ceci dans votre ~/.bashrc :

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

exemple:

    
réponse donnée hadj messaoud 15.10.2017 - 12:59
la source
1

L’histoire est bonne mais limitée. Je préfère configurer mon environnement bash pour pouvoir enregistrer toutes toutes les commandes que j’ai exécutées, en plus du répertoire dans lequel elles ont été exécutées. J'exécute une commande pour répertorier toutes les commandes que j'ai exécutées dans le répertoire actuel, que je peux diriger vers grep, etc. - cela s'appelle 'dish', voir:

lien

Si vous voulez aller droit au but, indiquez-le simplement dans votre lien .bashrc ( lien ).

Il existe également une commande très utile que vous obtenez gratuitement, appelée "dishg" - ou dish global - qui affiche chaque commande exécutée, quel que soit le répertoire. Évidemment, celui-ci n’est utile que s’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 lors de l’installation d’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 avec l’espace disque ...

    
réponse donnée 26.08.2018 - 01:53
la source
1

Si vous utilisez shell dans Emacs ( M-x shell ) vous pouvez utiliser M-r (c'est équivalent à Ctrl + R dans un terminal ).

    
réponse donnée N.N. 26.08.2012 - 17:33
la source
0

Je voulais écrire ceci sous forme de commentaire sur @ ssmy , mais impossible d'obtenir la mise en forme du commentaire 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 me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$ !42
    
réponse donnée magikMaker 31.01.2018 - 22:12
la source

Lire d'autres questions sur les étiquettes