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

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

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

1
задан 26 August 2012 в 20:33

8 ответов

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

73
ответ дан 25 May 2018 в 17:18
  • 1
    Я использую этот метод, потому что я ссылаюсь на список в каждой команде, соответствующей моему фильтру. – Pisu 9 November 2011 в 20:40

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

12
ответ дан 25 May 2018 в 17:18

Я делаю небольшое изменение вышеизложенного, хорошо работает для меня (если вы ссылаетесь на свою историю 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 для поиска истории, всегда начиная со страницы вверх

11
ответ дан 25 May 2018 в 17:18
  • 1
    если у вас есть права на root, вы можете отредактировать / etc / inputrc, скоро это будет работать для всех пользователей. – Wolfy 2 November 2011 в 22:14
  • 2
    @doug, хм .. У меня Ubuntu 15.04. Это решение работает, но испортить клавиши Ctrl + LeftArrow / Ctrl + RightArrow. Проблема выглядит с созданием файла .inputrc, а не с записями в нем. – Ravi 14 July 2016 в 14:12

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

grep "ssh" ~/.bash_history

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

5
ответ дан 25 May 2018 в 17:18

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

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

1
ответ дан 25 May 2018 в 17:18

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

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

пример:

1
ответ дан 25 May 2018 в 17:18

Хотелось написать это как комментарий к @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
ответ дан 25 May 2018 в 17:18

Другие вопросы по тегам:

Похожие вопросы: