मैं अपने कमांड लाइन इतिहास को उन कमांड के लिए कैसे खोज सकता हूं जो मैंने पहले इस्तेमाल किए थे?


186

इतिहास को देखने के अलावा, क्या मेरे इतिहास को फ़िल्टर करने का कोई तरीका है?

कहो कि मैं "ssh" से शुरू हुई एक कमांड को खोजना चाहता हूं?

जवाबों:


271

Ctrl+ दबाएं Rऔर टाइप करें sshCtrl+ 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

फिर एक पिछली कमांड के बहुत सारे टाइप करना जो मैं चाहता हूं और पेज अप / पेज डीएन बटन का उपयोग करके इतिहास को खोजता हूं, हमेशा पृष्ठ के साथ शुरू होता है


यदि आपके पास रूट परमिट हैं, तो आप संपादन कर सकते हैं / etc / inputrc soo यह सभी उपयोगकर्ताओं के लिए काम करेगा।
Wolfy

1
@doug, हम्म .. मैं Ubuntu 15.04 हूं। यह समाधान काम करता है लेकिन Ctrl + LeftArrow / Ctrl + RightArrow कुंजियों को गड़बड़ कर देता है। समस्या .inputrc फ़ाइल बनाने और उसमें प्रविष्टियों के साथ नहीं के साथ दिखती है।
रवि

भूल न करें .inputrc या टर्मिनल बंद करने के लिए मत भूलना
डेविड

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

इतिहास अच्छा है, लेकिन सीमित है - मैं अपने बैश वातावरण को सेट करना पसंद करता हूं ताकि मैं उन सभी कमांड को लॉग करूं जो मैंने कभी भी चलाए हैं, उस निर्देशिका के अलावा जिसमें वे चलाए गए थे। फिर मैं सभी कमांड को सूचीबद्ध करने के लिए एक कमांड चलाता हूं। मैंने वर्तमान निर्देशिका में भाग लिया है, जिसे मैं grep आदि में पाइप कर सकता हूं - इसे 'डिश' देखें:

https://github.com/wolfwoolford/dish

यदि आप पीछा करना चाहते हैं, तो बस इसे अपने .bashrc ( https://github.com/wolfwoolford/dish/blob/master/dishrc ) में स्रोत बनाएं

वहाँ भी एक बहुत ही उपयोगी कमांड है जो आपको मुफ्त में मिलता है, जिसे 'डिश' कहा जाता है - या डिश ग्लोबल - जो हर कमांड को प्रिंट करता है, चाहे वह डायरेक्टरी की हो। जाहिर है कि यह केवल तभी उपयोगी है जब grep और टेल आदि के साथ प्रयोग किया जाता है ...

मैं इसे सालों से इस्तेमाल कर रहा हूं और जब भी मैं एक नया बॉक्स सेटअप करता हूं तो यह सचमुच पहली चीज होती है। यह एक छिपी निर्देशिका (~ / .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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.