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

186

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

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

Бланкмэн
источник

Ответы:

271

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

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

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

Принц Джон Уэсли
источник
90

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

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

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

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

.inputrc

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

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

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

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

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

Дуг
источник
если у вас есть права доступа root, вы можете отредактировать / etc / inputrc, так что это будет работать для всех пользователей.
Wolfy
1
@ Doug, хм .. У меня Ubuntu 15.04. Это решение работает, но путаются клавиши Ctrl + LeftArrow / Ctrl + RightArrow. Проблема выглядит с созданием файла .inputrc, а не с записями в нем.
Рави
Не забудьте перепривязать .inputrc или закрыть терминал
Дэвид Броссар
14

Нажатие Ctrl+ Rзапустит режим «reverse-i-search», ввод «ssh» будет искать в вашей истории команды, содержащие «ssh».

Сергей
источник
10

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

grep "ssh" ~/.bash_history

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

DisgruntledGoat
источник
history | grep sshпокажет только временную сессию ssh, поэтому я бы пошел на этот ответ.
Иниравпатель
3

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

Скотт Северанс
источник
2

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

псевдоним hgrep = 'история | grep --color = auto '

пример:

хадж мессауд
источник
1

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

https://github.com/wolfwoolford/dish

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

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

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

Дэвид Вулфорд
источник
0

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

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

Пример:

$ история | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
42 доллара
magikMaker
источник