En çok kullandığım linux komutunun ne olduğunu nasıl görebilirim?


43

Komut satırında en çok hangi komutu kullandığımı bilmek istiyorum. Bilmek isterim, böylece komut satırı kullanımımı geliştirebilirim. Hangi komutu en çok kullandığımı biliyorsanız, daha sonra bunları daha iyi okuyabilir ve bunları kullanmanın daha iyi yollarını bulabilirim.

Tarihin, yazdığım tüm önceki komutların bir listesini tuttuğunu biliyorum. En çok kullanılan 10 ya da 20 en çok kullanılan komutun bir listesini görmek için bunu nasıl işleyebilirim.


Evet, cevaplamak için sadece bu soruyu gönderdim. Süper kullanıcı topluluğu gerçekten ilgi çekici bulsa da, o kadar ilginç ki.
nelaaro

1
Kendinize cevap vermek için soru gönderirken hiçbir şey yanlış değil. Bu kullanışlı bir yer imi yapar ve yanlış yoldaysanız, yakında duyacaksınız!
Ken,

Yanıtlar:


59

Bu yazıyı http://linux.byexamples.com/ adresinde gördüm.

Temel olarak basit bir satır awk komut dosyası kullanıyorsunuz

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

Tam bir açıklama yukarıdaki linkte bulunabilir.

Makineme takılma örneği:

 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'imde, tarihin çıktısı farklı, bu yüzden ilk 2 doları 4 dolara değiştirmem gerekiyordu ve bu işe yarıyor.
Liam,

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

Awk komutu, ilk dizgeyi ~ / .bash_history'den (komut seçenekleri veya argümanları göstermeden) yazdıracak, daha sonra sıralama tüm satırları alfabetik olarak sıralayacak, daha sonra "uniq -c" kopyalanan satırları kaldıracak (yazdığınız komutlar) ve sayılacak ve son sıralama, komutlarınızı uniq tarafından döndürülen sayım numarasına göre sıralar.


-rKomutun sonuna, bunları ters sırada sıralamak ve | head -10sonuç sayısını sınırlamak için de ekleyebilirsiniz .
ROMANIA_turkine

10

Sen kullanabilirsiniz hashbunları çözmek ve süreç olabilir size isabet sayısı ile birlikte kullanmak ve vuruşlar temelinde her bir komuta karma girişini tutan, uçbiriminiz komutunu.

Daha fazla bilgi için bu makaleye göz atın .


8

Daha genel bir cevap için sisteminizde " işlem muhasebesini " etkinleştirin . Yalnızca kullanım sıklığını değil, toplam CPU, bellek ve G / Ç istatistiklerini alabilirsiniz.


6

Diğer cevaplardaki komut dosyaları sadece her komut satırında yürütülen ilk komutu sayar; borulardan sonra verilen komutları içermezler (yani '|'). Örneğin, bu satırın kendisi bash geçmişindeyse:

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

daha sonra en çok yürütülen komutların döndürülen özetinde, 'sort' ve 'uniq' ve ikinci 'sort', satırdaki ilk simge olmadıkları için dahil edilmez.

Nelaar'ın cevabına dayanarak, önce bash geçmişinizdeki çizgileri her boruya bölmek yeterlidir:

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

Eğlenceli bir ekleme sayının bir çubuk grafik olacaktır:

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

Çıktı:

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

Uzun komutlar boşlukları dengeler.


Uzun komutların nasıl yapılacağına dair herhangi bir fikir, boşlukları dengelemedi mi?
Ashish Ahuja

@fortunate_man Maalesef hayır, ama perl'e pek aşina değilim, bu yüzden bunu yeni bir soru olarak sorarsanız çok iyi bir cevap alabilirsiniz. Sabit genişliğin nasıl yazdırılacağını aramaya çalıştım, ancak hemen yararlı bir şey bulamadık ve işlev belgelerinin de yardımı olmadı. Kullanmanız printfveya sprintfyerine kullanmanız gerekebilir print.
joelostblom

2

En $ 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 -n10iyi 10 komutun bir listesini almak için kullanın .

Örnek:

 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

Bunun kabul edilen cevaptan farkı nedir?
Ashish Ahuja

1

Yukarıdaki awkcevabı @nelaar'dan hoş bir bash betiğine dönüştürebilirsiniz:

#!/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

Eh, bu komutun "Неделчо Христов" komutunun buraya kopyalanmış ve yapıştırılmış halidir.

Bu, bunu kullanarak daha iyi yapacaktır:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.