আমার সর্বাধিক ব্যবহৃত লিনাক্স কমান্ডটি কীভাবে দেখব?


43

কমান্ড লাইনে আমি কোন আদেশটি সর্বাধিক ব্যবহার করি তা জানতে চাই। আমি জানতে চাই যাতে আমি কমান্ড লাইনের ব্যবহারের উন্নতি করতে পারি। আমি যদি জানতে পারি যে আমি কোন আদেশটি সর্বাধিক ব্যবহার করি তবে আমি তাদের সম্পর্কে আরও পড়তে পারি এবং সেগুলি ব্যবহারের আরও ভাল উপায়গুলি জানতে পারি।

আমি জানি ইতিহাস আমার টাইপ করা সমস্ত পূর্ববর্তী কমান্ডগুলির একটি তালিকা রাখে। শীর্ষ 10 বা 20 সর্বাধিক ব্যবহৃত কমান্ডের তালিকা দেখতে আমি কীভাবে এটি প্রক্রিয়া করব would


হ্যাঁ আমি উত্তর দেওয়ার জন্য এই প্রশ্নটি পোস্ট করেছি। এটি ঠিক এত আকর্ষণীয় যে আমি যদিও সুপারভাইজার সম্প্রদায়টি এটি সত্যই আকর্ষণীয় মনে করবে।
nelaaro

1
নিজের উত্তর দেওয়ার জন্য প্রশ্ন পোস্ট করার সাথে মোটেই ভুল নেই। এটি একটি সহজ বুকমার্ক তৈরি করে এবং আপনি যদি ভুল ট্র্যাকের উপরে থাকেন তবে শীঘ্রই আপনি এটি সম্পর্কে শুনবেন!
কেন

উত্তর:


59

আমি এই পোস্টটি স্রেফ http://linux.byex નમૂના . 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
আমার ওএসএক্সে, ইতিহাসের আউটপুটটি আলাদা, সুতরাং আমার কেবল প্রথম $ 2 থেকে $ 4 পরিবর্তন করতে হবে এবং এটি কাজ করে।
লিয়াম

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

Awk কমান্ডটি প্রথম স্ট্রিংটি ~ / .bash_history থেকে মুদ্রণ করবে (কমান্ড অপশন বা আর্গুমেন্ট প্রদর্শন করবে না), সারণি অনুসারে সমস্ত লাইন বর্ণানুক্রমিকভাবে অর্ডার করবে, তারপরে "uniq -c" নকল করা লাইনগুলি (আপনার টাইপযুক্ত আদেশগুলি) মুছে ফেলবে এবং সেগুলি গণনা করবে, এবং সর্বশেষ সাজানোটি ইউনিকের দ্বারা ফেরত গণনা সংখ্যার মাধ্যমে আপনার আদেশগুলি অর্ডার করবে।


-rবিপরীত ক্রমে তাদের বাছাই করতে এবং | head -10ফলাফলের সংখ্যা সীমাবদ্ধ করতে আপনি কমান্ডের শেষে যুক্ত করতে পারেন ।
রোমানিয়া_আজ্ঞানী

10

আপনি hashআপনার টার্মিনালে কমান্ডটি ব্যবহার করতে পারেন , যা হিট সংখ্যার সাথে আপনি যে প্রতিটি কমান্ড ব্যবহার করেন তার হ্যাশ এন্ট্রি রাখে এবং হিটগুলির উপর ভিত্তি করে আপনি সেগুলি বাছাই করে প্রক্রিয়া করতে পারেন।

পরীক্ষা করে দেখুন এই নিবন্ধটি আরও তথ্যের জন্য।


8

আরও সাধারণ উত্তরের জন্য, আপনার সিস্টেমে " প্রক্রিয়া অ্যাকাউন্টিং " সক্ষম করুন। আপনি কেবল ব্যবহারের ফ্রিকোয়েন্সি না পেয়ে সামগ্রিক সিপিইউ, মেমরি এবং I / O পরিসংখ্যান পেতে পারেন।


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 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

দীর্ঘ কমান্ডগুলি ব্যবধানটি অফসেট করবে।


দীর্ঘ কমান্ডগুলি কীভাবে করা যায় সে সম্পর্কে কোনও ধারণা ব্যবধানটি অফসেট করে না?
আশীষ আহুজা

@ দুর্ভাগ্য_মানুষ দুর্ভাগ্যক্রমে নয়, তবে আমি পার্লের সাথে খুব বেশি পরিচিত নই, আপনি যদি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করেন তবে আপনি খুব ভাল উত্তর পেতে পারেন। আমি স্থির প্রস্থ কীভাবে প্রিন্ট করতে হবে তার সন্ধান করার চেষ্টা করেছি, তবে তাত্ক্ষণিক সহায়ক কিছু খুঁজে পেলাম না এবং ফাংশন ডকুমেন্টেশনও খুব একটা সাহায্যকারী ছিল না। আপনার ব্যবহারের পরিবর্তে printfবা প্রয়োজন হতে পারে । sprintfprint
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

আচ্ছা, এটি এখানে কপি করা এবং আটকানো "Неделчо command" কমান্ডের একটি পরিবর্তিত সংস্করণ .... যদি আপনি আপনার বাশের ইতিহাস সুরক্ষিত বা তারিখটি সজ্জিত করেন তবে আপনার একটি ফল্ট আউটপুট হবে

এটি আপনাকে আরও ভাল করে এটি ব্যবহার করবে:

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.