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

151

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

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

    
задан Blankman 02.11.2011 в 01:25
источник

10 ответов

233

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

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

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

    
ответ дан Prince John Wesley 02.11.2011 в 01:32
источник
78

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

    
ответ дан ssmy 02.11.2011 в 01:36
13

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

    
ответ дан Sergey 02.11.2011 в 01:33
13

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

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

.inputrc

Внутри идет этот

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

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

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

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

    
ответ дан doug 02.11.2011 в 01:42
6

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

grep "ssh" ~/.bash_history

Не забудьте флаг -i , если вам нужен регистр без учета регистра.

    
ответ дан DisgruntledGoat 02.11.2011 в 09:49
2

Я нашел следующую функцию где-то в Интернете и использовал ее для большого эффекта. Поместите это в свой ~/.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 + R , потому что он позволяет выполнять гораздо более гибкие поиски, и я вижу сразу несколько результатов.

    
ответ дан Scott Severance 09.11.2011 в 03:14
2

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

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

пример:

    
ответ дан hadj messaoud 15.10.2017 в 10:59
1

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

Ссылка

Если вы хотите прервать погоню, просто введите это в свой .bashrc ( Ссылка )

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

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

    
ответ дан David Woolford 25.08.2018 в 23:53
1

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

    
ответ дан N.N. 26.08.2012 в 15:33
0

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

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

Пример:

$ history | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$ !42
    
ответ дан magikMaker 31.01.2018 в 21:12