Як шукати в історії мого командного рядка команди, які раніше використовував?


186

Окрім перегляду історії, чи є спосіб фільтрації моєї історії?

Скажіть, я хочу шукати команду, яка почалася з "ssh"?

Відповіді:


271

Натисніть Ctrl+ Rі введіть ssh. Ctrl+ Rпочне пошук від останньої команди до старої (зворотний пошук). Якщо у вас є кілька команд, які починаються з ssh, натискайте Ctrl+ Rще і знову, поки не знайдете відповідність.

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

Не існує типового зворотного варіанту для Ctrl+, Rщоб перевернути напрямок пошуку, але тут ви знайдете кілька пропозицій щодо цього.


90

Якщо ви просто хочете шукати свою історію, ви можете просто використовувати history | grep ssh, замінюючи ssh все, що ви хочете шукати.


Я використовую цей метод, тому що я посилаюся, щоб побачити в списку кожну команду, що відповідає моєму фільтру.
Пісу

15

Я незначно змінюю вищезазначене, добре працює для мене (якщо ви маєте на увазі свою історію баш

У своїй домашній папці я створюю файл з назвою

.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, щоб це працювало для всіх користувачів.
Волфі

1
@doug, хм .. У мене є Ubuntu 15.04. Це рішення працює, але зіпсує клавіші Ctrl + LeftArrow / Ctrl + RightArrow. Випуск виглядає як зі створенням .inputrc-файлу, а не із записами у ньому.
Раві

Не забудьте відновити .inputrc або закрити термінал
David Brossard

14

Якщо натиснути Ctrl+ R, запуститься режим "зворотного пошуку", набравши "ssh", буде шукати вашу історію для команд, що містять "ssh".


9

Ось ще один метод, що використовує класичні команди (швидше за все, для роботи в дистрибутивах). Історія команд зберігається у файлі .bash_historyу вашому домашньому каталозі, тому ви можете це зробити:

grep "ssh" ~/.bash_history

Не забувайте -iпрапор, якщо вам потрібен нечутливий до регістру пошук.


history | grep sshпокаже лише ssh тимчасового сеансу, тож я б пішов на цю відповідь.
iniravpatel

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тому що він дозволяє набагато гнучкіше шукати, і я можу побачити декілька результатів одночасно.




1

Історія хороша, але обмежена - я вважаю за краще налаштувати моє середовище bash, щоб я записував усі команди, які я коли-небудь виконував, на додаток до каталогу, в якому вони були запущені. Потім я запускаю команду, щоб перелічити всі команди Я запустив у поточному каталозі, який я можу подати на клацання тощо. Це називається "блюдо", див.

https://github.com/wolfwoolford/dish

Якщо ви хочете вирізати погоню, просто вкажіть це у своєму .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Існує також дійсно корисна команда, яку ви отримуєте безкоштовно під назвою "dishg" - або блюдо глобальна -, яка виводить кожну команду, яку коли-небудь виконують, незалежно від каталогу. Очевидно, цей варіант корисний лише при використанні із грепом та хвостом тощо.

Я використовую його роками, і це буквально перше, що я встановлюю, коли встановлюю нову коробку. Він записує команди, які ви запускаєте до текстових файлів у прихованому каталозі (~ / .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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.