Вопрос Как выполнить поиск в истории командной строки для команд, которые я использовал ранее?


Помимо просмотра истории, есть ли способ отфильтровать мою историю?

Скажем, я хочу найти команду, которая начиналась с «ssh»?


149
2017-11-02 01:25


происхождения




ответы:


Нажмите Ctrl+р и тип ssh, Ctrl+р начнет поиск от самой последней команды до старой (обратный поиск). Если у вас более одной команды, которая начинается с ssh, Нажмите Ctrl+р снова и снова, пока вы не найдете матч.

Как только вы найдете матч, вы можете нажать Войти для выполнения команды или левого / правого курсора, чтобы просто выбрать текст команды.

По умолчанию для варианта Ctrl+р инвертировать направление поиска, но Вот вы найдете некоторые предложения по этому поводу.


231
2017-11-02 01:32





Если вы просто хотите искать свою историю, вы можете просто использовать history | grep ssh, заменяя ssh на все, что вы хотите найти.


77
2017-11-02 01:36



Я использую этот метод, потому что я ссылаюсь на список в каждой команде, соответствующей моему фильтру. - Pisu


прессование Ctrl+р начнет режим «обратного i-поиска», набрав «ssh», вы будете искать свою историю для команд, содержащих «ssh».


13
2017-11-02 01:33





Я делаю небольшое изменение выше, хорошо работает для меня (если вы имеете в виду вашу историю bash

В моей домашней папке я создаю файл с именем

.inputrc

Внутри это

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

Примечание: выше, похоже, больше не работает в 14.04, поэтому это делает то же самое -

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

Затем, набрав, однако, большую часть предыдущей команды, которую я желаю и использую кнопки up / page dn для поиска в истории, всегда начиная с страницы вверх


13
2017-11-02 01:42



если у вас есть права на root, вы можете редактировать / etc / inputrc soo, это будет работать для всех пользователей. - Wolfy
@doug, хм .. У меня Ubuntu 15.04. Это решение работает, но испортить клавиши Ctrl + LeftArrow / Ctrl + RightArrow. Проблема выглядит с созданием файла .inputrc, а не с записями в нем. - Ravi
Не забудьте перезагрузить .inputrc или закройте терминал - David Brossard


Вот еще один метод, использующий классические команды (чаще всего работает через дистрибутивы). История команд хранится в файле .bash_history в вашем домашнем каталоге, чтобы вы могли сделать это:

grep "ssh" ~/.bash_history

Не забывайте, что -i если вам нужен регистр без учета регистра.


5
2017-11-02 09:49





Я нашел следующую функцию где-то в Интернете и использовал ее для большого эффекта. Поместите это в свой ~/.bashrc:

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

Теперь перезагрузите оболочку: exec bash, Теперь у вас есть новая команда, которую вы можете использовать так:

hgrep ssh

Он покажет вам список совпадающих команд из вашей истории. Чтобы выполнить команду, введите ! за которым следует номер команды. Вот пример:

~:$ 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

Мне нравится этот подход лучше, чем Ctrl+р потому что он позволяет гораздо более гибкий поиск, и я могу сразу увидеть несколько результатов.


2
2017-11-09 03:14





Поместите это в свой ~/.bashrc :

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

пример:


2
2017-10-15 10:59





Если вы используете оболочка в Emacs (M-x shell) вы можете использовать M-r (это эквивалентно Ctrl+р в терминале).


1
2017-08-26 15:33





История хороша, но ограничена - я предпочитаю настраивать свою среду bash, чтобы я регистрировался все из команд, которые я когда-либо выполнял, в дополнение к каталогу, в котором они были запущены. Затем я запускаю команду для перечисления всех команд, которые я запускал в текущем каталоге, которые я могу подключить к grep и т. д. - он называется ' блюдо 'см:

https://github.com/wolfwoolford/dish

Если вы хотите прервать погоню, просто введите это в свой .bashrc (https://github.com/wolfwoolford/dish/blob/master/dishrc)

Существует также очень полезная команда, которую вы получаете бесплатно под названием «dishg» - или глобальное блюдо - которое печатает каждую команду, когда-либо выполняемую независимо от каталога. Очевидно, что это полезно только при использовании с grep и хвостом и т. Д. ...

Я использую его в течение многих лет, и это буквально первое, что я устанавливаю, когда я настраиваю новый ящик. Он регистрирует команды, которые вы запускаете в текстовые файлы в скрытом каталоге (~ / .dish). У меня никогда не было проблем с дисковым пространством ...


1
2017-08-25 23:53





Хотелось написать это как комментарий к @ssmy но не смог получить форматирование в комментарии для сотрудничества.

После поиска истории с помощью history | grep ssh вы можете выполнить команду, которую вы хотите, набрав ее число, добавленное восклицательным знаком, например. !42,

Пример:

$ history | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$! 42

0
2018-01-31 21:12