266 votes

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

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

Disons que je veux rechercher une commande qui commence par "ssh" ?

5voto

Scott Severance Points 13166

J'ai trouvé la fonction suivante quelque part sur Internet et je l'ai utilisée avec beaucoup d'efficacité. Mettez-la 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 de commandes correspondantes dans 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 parce qu'il permet des recherches beaucoup plus souples, et je peux voir plusieurs résultats à la fois.

4voto

hadj messaoud Points 41

Mettez ceci dans votre ~/.bashrc :

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

exemple :

2voto

magikMaker Points 121

Je voulais écrire ceci comme un commentaire sur @ssmy mais je n'ai pas réussi à faire coopérer le formatage dans le commentaire.

Après avoir cherché dans l'histoire avec history | grep ssh vous pouvez alors exécuter la commande que vous souhaitez 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

2voto

David Woolford Points 21

L'historique est bon mais limité - je préfère configurer mon environnement bash de sorte que j'enregistre les données suivantes todo des commandes que j'ai exécutées, en plus du répertoire dans lequel elles ont été exécutées. Ensuite, je lance une commande pour lister toutes les commandes que j'ai exécutées dans le répertoire actuel, que je peux envoyer à grep, etc - cela s'appelle 'dish' :

https://github.com/wolfwoolford/dish

Si vous voulez aller droit au but, il suffit d'ajouter cette source dans votre .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Il existe également une commande très utile que vous obtenez gratuitement, appelée 'dishg' - ou dish global - qui affiche toutes les commandes exécutées, quel que soit le répertoire. Évidemment, celle-ci n'est utile que lorsqu'elle est utilisée avec grep et tail etc...

Je l'utilise depuis des années et c'est littéralement la première chose que j'installe lorsque 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 ...

2voto

MonkeyMagic Points 21

J'aime grep mon historique au lieu de Ctrl + R recherche en arrière. C'est parce que vous ne pouvez voir qu'une seule ligne avec Ctrl + R . Avec grep, vous obtenez une vue plus globale de votre dernière interaction avec une commande, etc.

J'ai les éléments suivants dans mon .bashrc . Il vous permet de rechercher dans l'historique des commandes en tapant hiss KEYWORD . Appelez ça comme vous voulez. J'aime siffler^^ . N'oubliez pas de recharger votre .bashrc avec source ~/.bashrc

hiss () { history | grep "$@"; }

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X