मैं टर्मिनल में सबसे अधिक उपयोग किए जाने वाले कमांड के साथ एक सूची कैसे बना सकता हूं?


13

मैं टर्मिनल में सबसे अधिक उपयोग किए जाने वाले कमांड के साथ एक सूची कैसे बना सकता हूं?

मुझे पता है कि यह प्रश्न हम में से कुछ के लिए भविष्य के प्रस्तावों के लिए अप्रयुक्त हो सकता है, लेकिन इस तरह भी, सूची उपयोगी हो सकती है जब हमें अतीत में एक बार या कुछ समय में इस्तेमाल की जाने वाली कमांड याद नहीं होती है, जब हम खोज कर सकते हैं इस सूची का अंत।


कौन सा टर्मिनल?
एलिजा लिन

जवाबों:


20

हम .bash_historyऐसा करने के लिए फ़ाइल से रिकॉर्ड का उपयोग करेंगे । अगला आदेश आपको सभी आदेशों की एक सूची देगा, जिसमें आपने उन्हें सबसे अधिक बार उपयोग किया है:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr

यदि आप केवल शीर्ष 10 चाहते हैं, तो आपको headऊपर दिए गए आदेश में जोड़ना होगा :

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head

एक विशिष्ट शीर्ष पाने के लिए, उदाहरण के लिए शीर्ष 5, विकल्प के headसाथ उपयोग करें -n 5:

शीर्ष 5 आदेश

यदि आप रिवर्स ऑर्डर में सूची चाहते हैं (शीर्ष पर शायद ही कभी उपयोग किए गए आदेशों के साथ), rदूसरे के लिए oprion का उपयोग न करें sort:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n

और अंत में उदाहरण के लिए एक बार उपयोग किए गए आदेशों के साथ एक सूची प्राप्त करने के लिए, उपयोग grep ' 1 '( 1वांछित संख्या के साथ परिवर्तन ):

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '

sudoकमांड के साथ (जैसे sudo vim foo), केवल {print $3}awk कमांड में, उपयोग करने के लिए:

{if($3 ~ /sudo/) print $4; else print $3}

तो पूरा कमांड ऐसा दिखेगा:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr

उदाहरण के लिए:

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
    284 vim
    260 git
    187 find
    174 man
    168 echo
    149 rm
    134 awk
    115 pac
    110 sudo
    102 l

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr | head
    298 vim
    260 git
    189 find
    174 man
    168 echo
    153 rm
    134 awk
    115 pac
    102 l
     95 cd

आप के लिए मायने रखता है में कूद देख सकते हैं vim, rmआदि


1
अपने उत्तर में अपने स्रोत को श्रेय देना चाहते हैं: stackoverflow.com/a/68390/1210983
ohaal

3
@ohaal विश्वास या नहीं, मुझे उपरोक्त स्रोत के बारे में पता नहीं था; ईमानदारी से यह एक दोस्त की प्रयोगशाला समस्या थी जो Iasi के कंप्यूटर विज्ञान में अध्ययन कर रही थी ।
राडू राईडेनू

@ एमरू सूदो के लिए आपके द्वारा किया गया एडिट कुछ इस तरह से काम नहीं करता है sudo -iक्योंकि यह मुझे -iकमांड के रूप में देता है
geek1011

1
@ geek1011 sudo -iएक नया शेल शुरू करता है। वह इतिहास अब आपके खोल के इतिहास में नहीं है, बल्कि root'एस' में है। जाहिर है कि ये कमांड बहुत सारे किनारे के मामलों के लिए काम नहीं करते हैं; शेल भाषा के लिए अपने स्वयं के पार्सर को लिखे बिना सभी संभव आदेशों से निपटने का कोई तरीका नहीं है ।
मूरू

1
@ geek1011 यकीन है, एक और चेक, कुछ इस तरह से जोड़ें:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru

3

नीचे कमांड भी top 10सबसे अधिक इस्तेमाल होने वाले टर्मिनल कमांड को सूचीबद्ध करेगा ,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

उन सभी कमांड को सूचीबद्ध करने के लिए कमांड, जो टर्मिनल में सबसे अधिक बार उपयोग किए जाते हैं,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn

2

मछली और बैश - यह सवाल एक विशिष्ट शेल को निर्दिष्ट नहीं करता है, बस 'टर्मिनल'। आप जो भी नंबर चाहते हैं, उसके लिए सिर बदलें।

मछली

history | awk '{print $1}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

517 git
314 drush
197 sudo
171 cd
115 man
103 echo
 95 vi
 81 dig
 67 set
 66 ls

यह बैश एक काम लगता है और अन्य उत्तरों की तुलना में थोड़ा छोटा और समझने में आसान है। मुझे इस प्रकार के उदाहरणों में पठनीयता में मदद करने के लिए लंबे विकल्प पसंद हैं।

दे घुमा के

history | awk '{print $2}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

73 drush
72 exit
65 sudo
46 g
40 echo
35 ll
34 tmux
30 history
30 fish
27 mux
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.