मैं कैसे देखूं कि मेरी सबसे ज्यादा इस्तेमाल की जाने वाली लिनक्स कमांड क्या है?


43

मैं जानना चाहूंगा कि कमांड लाइन पर मैं किस कमांड का सबसे अधिक उपयोग करता हूं। मैं जानना चाहूंगा ताकि मैं कमांड लाइन के अपने उपयोग में सुधार कर सकूं। अगर मुझे पता है कि मैं किस कमांड का सबसे अधिक उपयोग करता हूं, तो मैं उनके बारे में और अधिक पढ़ सकता हूं और उनका उपयोग करने के बेहतर तरीकों का पता लगा सकता हूं।

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


हां मैंने इसका जवाब देने के लिए सिर्फ यह सवाल पोस्ट किया है। यह सिर्फ इतना दिलचस्प है कि मैं हालांकि सुपरसुसर समुदाय वास्तव में इसे दिलचस्प लगेगा।
नलेरो

1
अपने आप को जवाब देने के लिए सवालों को पोस्ट करने में कुछ भी गलत नहीं है। यह एक आसान बुकमार्क बनाता है, और यदि आप गलत रास्ते पर हैं तो आप जल्द ही इसके बारे में सुनेंगे!
केन

जवाबों:


59

मैंने अभी इस पोस्ट को http://linux.byexamples.com/ पर देखा

मूल रूप से आप एक सरल एक लाइन awk स्क्रिप्ट का उपयोग करते हैं

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

पूर्ण विवरण ऊपर दिए गए लिंक पर पाया जा सकता है।

मेरी मशीन पर डाला गया उदाहरण है:

 1  211  21.1%  ls
 2  189  18.9%  sudo
 3  58   5.8%   man
 4  52   5.2%   cd
 5  43   4.3%   ping
 6  40   4%     apropos
 7  34   3.4%   less
 8  22   2.2%   cat
 9  18   1.8%   which
10  18   1.8%   aspell

3
मेरे OSX पर, इतिहास का आउटपुट अलग है, इसलिए मुझे पहले $ 2 से $ 4 को बदलने की आवश्यकता है और यह काम करता है।
लियाम

17
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

Awk कमांड पहले स्ट्रिंग को प्रिंट करेगा ~ / .bash_history (कमांड विकल्प या तर्क नहीं दिखा रहा है), फिर सॉर्ट सभी पंक्तियों को वर्णानुक्रम में क्रमबद्ध करेगा, फिर "uniq -c" डुप्लिकेट किए गए लाइनों (आपके टाइप किए गए कमांड) को हटा देगा और उनकी गिनती करेगा, और अंतिम क्रम uniq द्वारा दी गई गिनती संख्या द्वारा आपके आदेशों को आदेश देगा।


आप -rउन्हें उल्टे क्रम में क्रमबद्ध करने और | head -10परिणामों की संख्या को सीमित करने के लिए कमांड के अंत में भी जोड़ सकते हैं ।
ROMANIA_engineer

10

आप hashअपने टर्मिनल में कमांड का उपयोग कर सकते हैं , जो प्रत्येक कमांड की एक हैश प्रविष्टि रखता है जिसे आप हिट की संख्या के साथ उपयोग करते हैं और हिट के आधार पर आप उन्हें सॉर्ट कर सकते हैं और प्रक्रिया कर सकते हैं।

चेक इस लेख में अधिक जानकारी के लिए।


8

अधिक सामान्य उत्तर के लिए, अपने सिस्टम पर " प्रक्रिया लेखांकन " सक्षम करें। आप न केवल उपयोग की आवृत्ति प्राप्त कर सकते हैं, बल्कि सीपीयू, मेमोरी और आई / ओ आँकड़े एकत्र कर सकते हैं।


6

अन्य उत्तरों में स्क्रिप्ट केवल प्रत्येक कमांड लाइन में निष्पादित पहले कमांड को गिनते हैं; वे पाइप (यानी '|') के बाद निष्पादित कमांड को शामिल नहीं करते हैं। उदाहरण के लिए, यदि यह रेखा स्वयं आपके बैश इतिहास में थी:

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

तब अधिकांश निष्पादित कमांडों के लौटे हुए सारांश में, 'सॉर्ट' और 'यूनीक' और दूसरे 'सॉर्ट' को शामिल नहीं किया जाएगा, क्योंकि वे लाइन में पहला टोकन नहीं थे।

नेलर के उत्तर पर निर्माण, यह आपके पाइप इतिहास में हर पाइप पर पहले लाइनों को विभाजित करने के लिए पर्याप्त है:

sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

6

एक मजेदार जोड़ मायने रखता है:

history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'

आउटपुट:

man     226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat     230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm      235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls      240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura    273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv      362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo    534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi      611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git     693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd      754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

लंबे कमांड रिक्ति की भरपाई करेंगे।


कैसे लंबे आदेश बनाने के लिए पर कोई विचार नहीं रिक्ति की भरपाई?
आशीष आहूजा

@fortunate_man दुर्भाग्य से नहीं, लेकिन मैं पर्ल से बहुत परिचित नहीं हूं, इसलिए यदि आप एक नया प्रश्न पूछते हैं, तो आपको बहुत अच्छा जवाब मिल सकता है। मैंने तय चौड़ाई को कैसे प्रिंट किया जाए, इसकी खोज करने की कोशिश की, लेकिन तुरंत मददगार कुछ भी नहीं मिला, और फंक्शन डॉक्यूमेंटेशन भी ज्यादा मददगार नहीं था। आपको इसके बजाय printfया का उपयोग करने की आवश्यकता हो सकती sprintfहै print
joelostblom

2

$ history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10अपने शीर्ष 10 आदेशों की एक सूची प्राप्त करने के लिए उपयोग करें ।

उदाहरण:

 1  272  27.2%  svn
 2  227  22.7%  cd
 3  159  15.9%  sudo
 4  57   5.7%   ll
 5  52   5.2%   mc
 6  32   3.2%   rm
 7  23   2.3%   mkdir
 8  19   1.9%   exit
 9  13   1.3%   subl
10  13   1.3%   find

यह स्वीकृत उत्तर से अलग कैसे है?
आशीष आहूजा

1

आप ऊपर दिए गए awkउत्तर को @ लाइनर से एक अच्छी बैश स्क्रिप्ट में बदल सकते हैं:

#!/bin/bash
HISTFILE=~/.bash_history
set -o history
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

1

वैसे यह "Неделчо овристов" कमांड का एक संशोधित संस्करण है जिसे यहाँ कॉपी और पेस्ट किया गया है .... यदि आपने अपने बैश इतिहास को सुरक्षित या दिनांकित किया है तो आपके पास एक फाल्ट आउटपुट होगा

इसका उपयोग करने से यह बेहतर होगा:

awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.