Terminalde en çok kullanılan komutları içeren bir listeyi nasıl yapabilirim?


13

Terminalde en çok kullanılan komutları içeren bir listeyi nasıl yapabilirim?

Bu sorunun bazılarımız için gelecekteki herhangi bir teklif için kullanılamayabileceğini biliyorum, ancak bu gibi olsa bile, geçmişte bir kez veya birkaç kez kullanılan bir komutu hatırlamadığımızda, bu listenin sonu.


Hangi terminal?
Elijah Lynn

Yanıtlar:


20

Bunu .bash_historyyapmak için dosyadaki kayıtları kullanacağız . Bir sonraki komut, en sık kullandığınız sırayla tüm komutların bir listesini verecektir:

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

Yalnızca ilk 10'u istiyorsanız, headyukarıdaki komutta eklemeniz gerekir :

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

Belirli bir üst, örneğin ilk 5 almak için, seçenekle headbirlikte -n 5kullanın:

En iyi 5 komut

Listeyi ters sırada (nadiren kullanılan komutların üstünde) ristiyorsanız, saniye için oprion kullanmayın sort:

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

Ve son olarak, örneğin bir kez kullanılan komutların bir listesini almak için şunu kullanın grep ' 1 '( 1istediğiniz sayıyla değiştirin ):

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

Yalnızca awk komutunda değil, sudokomutlarla (gibi sudo vim foo) ilgilenmek için şunu {print $3}kullanın:

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

Yani tüm komut şöyle görünecektir:

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

Örneğin:

$ 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

Aşağıdakiler için sayılarındaki atlamayı görebilirsiniz vim, rmvb


1
Kaynağınıza cevabınız için kredi vermek isteyebilirsiniz: stackoverflow.com/a/68390/1210983
ohaal

3
@ohaal İster inanın ister inanmayın, yukarıdaki kaynağı bilmiyordum; içtenlikle bu Iasi Bilgisayar Bilimi'nde okuyan bir arkadaşın laboratuvar problemiydi .
Radu Rădeanu

@muru sudo için yaptığınız düzenleme , komut olarak sudo -ibana verdiği için böyle bir şey için çalışmıyor-i
geek1011

1
@ geek1011 sudo -iyeni bir kabuk başlatır. Bu tarih artık kabuğunuzun tarihinde değil, root's. Açıkçası bu komutlar pek çok uç durumda işe yaramıyor; kabuk dili için kendi ayrıştırıcınızı yazmadan tüm olası komutlarla başa çıkmanın bir yolu yoktur .
muru

1
@ geek1011 emin, başka bir çek eklemek, gibi bir şey:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru

3

Aşağıdaki komut ayrıca top 10en sık kullanılan terminal komutlarını da listeleyecektir ,

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

Terminalde en sık kullanılan tüm komutları listeleme komutu,

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

2

Fish & Bash - Soru belirli bir kabuk belirtmiyor, sadece 'terminal'. Kafanı istediğiniz sayıya değiştirin.

Balık

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

Bu Bash biri işe yarıyor gibi görünüyor ve diğer cevaplardan biraz daha kısa ve anlaşılması daha kolay. Bu tür örneklerde okunabilirliğe yardımcı olmak için uzun seçenekleri seviyorum.

darbe

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