Bagaimana saya bisa membuat daftar dengan perintah yang paling banyak digunakan di terminal?

13

Bagaimana saya bisa membuat daftar dengan perintah yang paling banyak digunakan di terminal?

Saya tahu bahwa pertanyaan ini mungkin tidak berguna untuk proposal di masa depan bagi sebagian dari kita, tetapi bahkan seperti ini, daftar ini dapat berguna ketika kita tidak ingat perintah yang digunakan sekali atau beberapa kali di masa lalu, ketika kita dapat mencari di akhir daftar ini.

Radu Rădeanu
sumber
Terminal yang mana?
Elijah Lynn

Jawaban:

20

Kami akan menggunakan catatan dari .bash_historyfile untuk melakukan ini. Perintah selanjutnya akan memberi Anda daftar semua perintah agar Anda paling sering menggunakannya:

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

Jika Anda hanya menginginkan 10 besar, Anda harus menambahkan headpada perintah di atas:

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

Untuk mendapatkan top tertentu, misalnya top 5, gunakan headdengan -n 5opsi:

5 perintah teratas

Jika Anda ingin daftar dalam urutan terbalik (atas dengan perintah yang jarang digunakan), jangan gunakan roprion untuk yang kedua sort:

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

Dan akhirnya untuk mendapatkan daftar dengan perintah yang digunakan satu kali misalnya, gunakan grep ' 1 '(ubah 1dengan nomor yang diinginkan):

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

Untuk menangani sudoperintah (seperti sudo vim foo), alih-alih hanya {print $3}pada perintah awk, gunakan:

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

Jadi seluruh perintah akan terlihat seperti:

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

Sebagai contoh:

$ 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

Anda dapat melihat lompatan dalam jumlah untuk vim, rm, dll

Radu Rădeanu
sumber
1
Mungkin ingin memberi kredit sumber Anda dalam jawaban Anda: stackoverflow.com/a/68390/1210983
ohaal
3
@ohaal Percaya atau tidak, saya tidak tahu tentang sumber di atas; dengan tulus ini adalah masalah laboratorium dari seorang teman yang belajar di Ilmu Komputer Iasi .
Radu Rădeanu
@muru Suntingan yang Anda buat untuk sudo tidak berfungsi untuk sesuatu seperti sudo -ikarena itu memberi saya -isebagai perintah
geek1011
1
@ geek1011 sudo -imemulai sebuah shell baru. Sejarah itu tidak lagi dalam sejarah shell Anda, tetapi di root. Jelas perintah ini tidak berfungsi untuk banyak kasus tepi; tidak ada cara untuk menangani semua perintah yang mungkin tanpa menulis parser Anda sendiri untuk bahasa shell.
muru
1
@ geek1011 yakin, tambahkan cek lain, sesuatu seperti:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru
3

Perintah di bawah ini juga akan mencantumkan top 10perintah terminal yang paling sering digunakan,

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

Perintah untuk mendaftar semua perintah yang paling sering digunakan di terminal,

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

Fish & Bash - Pertanyaannya tidak menentukan shell tertentu, hanya 'terminal'. Ubah kepala ke nomor apa pun yang Anda inginkan.

Ikan

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

Bash yang satu ini tampaknya bekerja dan sedikit lebih pendek dan lebih mudah dipahami daripada jawaban yang lain. Saya suka opsi panjang untuk membantu keterbacaan dalam jenis contoh ini.

Pesta

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
Elijah Lynn
sumber