ฉันจะดูได้อย่างไรว่าคำสั่ง linux ที่ใช้มากที่สุดของฉันคืออะไร?


43

ฉันต้องการทราบว่าคำสั่งใดที่ฉันใช้มากที่สุดในบรรทัดคำสั่ง ฉันต้องการทราบเพื่อให้ฉันสามารถปรับปรุงการใช้บรรทัดคำสั่งของฉัน หากฉันรู้ว่าคำสั่งใดที่ฉันใช้บ่อยที่สุดฉันสามารถอ่านเพิ่มเติมเกี่ยวกับพวกเขาได้ลองและหาวิธีที่ดีกว่าในการใช้มัน

ฉันรู้ว่าประวัติเก็บรายการคำสั่งก่อนหน้าทั้งหมดที่ฉันพิมพ์ไว้ ฉันจะประมวลผลอย่างไรเพื่อดูรายการคำสั่งที่ใช้มากที่สุด 10 หรือ 20 อันดับแรก


ใช่ฉันเพิ่งโพสต์คำถามนี้เพื่อตอบคำถาม เป็นเรื่องที่น่าสนใจมากที่ฉันแม้ว่าชุมชนผู้ใช้ระดับสูงจะพบว่ามันน่าสนใจจริงๆ
nelaaro

1
ไม่มีอะไรผิดปกติกับการโพสต์คำถามเพื่อตอบตัวเอง มันทำให้ที่คั่นหนังสือที่มีประโยชน์และถ้าคุณอยู่ในเส้นทางที่ไม่ถูกต้องคุณจะได้ยินเกี่ยวกับมันในไม่ช้า!
Ken

คำตอบ:


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คำสั่งในเทอร์มินัลของคุณซึ่งเก็บรายการแฮชของทุกคำสั่งที่คุณใช้พร้อมกับจำนวนครั้งและขึ้นอยู่กับ Hit ที่คุณสามารถเรียงลำดับและประมวลผล

ตรวจสอบบทความนี้สำหรับข้อมูลเพิ่มเติม


8

สำหรับคำตอบทั่วไปให้เปิดใช้งาน " การบัญชีกระบวนการ " ในระบบของคุณ คุณสามารถรับได้ไม่เพียง แต่ความถี่ในการใช้งาน แต่รวมถึง CPU, หน่วยความจำและสถิติ I / O


6

สคริปต์ในคำตอบอื่น ๆ นับเฉพาะคำสั่งแรกที่ดำเนินการในแต่ละบรรทัดคำสั่งเท่านั้น ไม่รวมคำสั่งที่เรียกใช้หลังจากไพพ์ (เช่น '|') ตัวอย่างเช่นหากบรรทัดนี้อยู่ในประวัติทุบตีของคุณ:

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

จากนั้นในข้อมูลสรุปที่ส่งคืนของคำสั่งที่เรียกใช้งานส่วนใหญ่ 'sort' และ 'uniq' และ 'sort' ที่สองจะไม่ถูกรวมไว้เนื่องจากไม่ได้เป็นโทเค็นแรกในบรรทัด

สร้างจากคำตอบจาก nelaar ก็พอเพียงที่จะแบ่งบรรทัดแรกในประวัติทุบตีของคุณในทุกท่อ:

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

คำสั่งแบบยาวจะชดเชยระยะห่าง


ความคิดเกี่ยวกับวิธีการทำคำสั่งยาวไม่ชดเชยระยะห่างหรือไม่
Ashish Ahuja

@ luckate_man น่าเสียดายที่ไม่ใช่ แต่ฉันไม่ค่อยคุ้นเคยกับ Perl ดังนั้นคุณอาจได้รับคำตอบถ้าคุณถามคำถามนี้เป็นคำถามใหม่ ฉันพยายามค้นหาวิธีการพิมพ์ความกว้างคงที่ แต่ไม่พบสิ่งที่มีประโยชน์ในทันทีและเอกสารประกอบการใช้งานก็ไม่ได้ช่วยอะไรมากนัก คุณอาจจำเป็นต้องใช้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

สิ่งนี้แตกต่างจากคำตอบที่ยอมรับได้อย่างไร
Ashish Ahuja

1

คุณสามารถใส่awkคำตอบข้างต้นจาก @nelaar เป็นสคริปต์ทุบตีที่ดี:

#!/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.