Bagaimana saya melihat apa perintah linux saya yang paling sering digunakan?

43

Saya ingin tahu perintah mana yang paling saya gunakan di baris perintah. Saya ingin tahu sehingga saya dapat meningkatkan penggunaan baris perintah saya. Jika saya tahu perintah mana yang paling saya gunakan, saya bisa membaca lebih banyak tentang mereka, mencoba dan mencari cara yang lebih baik untuk menggunakannya.

Saya tahu riwayat menyimpan daftar semua perintah sebelumnya yang saya ketikkan. Bagaimana saya memprosesnya untuk melihat daftar 10 atau 20 perintah paling banyak digunakan.

nelaaro
sumber
Ya saya baru saja memposting pertanyaan ini untuk menjawabnya. Sangat menarik sehingga saya pikir komunitas pengguna super akan benar-benar merasa menarik.
nelaaro
1
Tidak ada yang salah dengan memposting pertanyaan untuk menjawab sendiri. Itu membuat bookmark berguna, dan jika Anda berada di jalur yang salah Anda akan segera mendengarnya!
Ken

Jawaban:

59

Saya baru saja melihat posting ini di http://linux.byexamples.com/

Pada dasarnya Anda menggunakan skrip awk satu baris sederhana

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

Penjelasan lengkap dapat ditemukan di tautan di atas.

Contoh out put on my machine adalah:

 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
nelaaro
sumber
3
Di OSX saya, output dari sejarah berbeda, jadi saya hanya perlu mengubah $ 2 menjadi $ 4 pertama dan ini berfungsi.
Liam
17
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

Perintah awk akan mencetak string pertama dari ~ / .bash_history (tidak menampilkan opsi atau argumen perintah), lalu sortir akan memesan semua baris secara alfabet, kemudian "uniq -c" akan menghapus baris yang digandakan (perintah yang diketik) dan menghitungnya, dan pengurutan terakhir akan memerintahkan perintah Anda dengan jumlah hitungan yang dikembalikan oleh uniq.

rem
sumber
Anda juga dapat menambahkan -rdi akhir perintah untuk mengurutkannya dalam urutan terbalik dan | head -10membatasi jumlah hasil.
ROMANIA_engineer
10

Anda dapat menggunakan hashperintah di terminal Anda, yang menyimpan entri hash dari setiap perintah yang Anda gunakan bersama dengan jumlah klik dan berdasarkan pada klik yang Anda dapat mengurutkan dan memprosesnya.

Lihat artikel ini untuk informasi lebih lanjut.

Prashere
sumber
8

Untuk jawaban yang lebih umum, aktifkan " proses akuntansi " pada sistem Anda. Anda bisa mendapatkan tidak hanya frekuensi penggunaan, tetapi agregat CPU, memori, dan statistik I / O.

mpez0
sumber
6

Script dalam jawaban lain hanya menghitung perintah pertama yang dieksekusi di setiap baris perintah; mereka tidak menyertakan perintah yang dieksekusi setelah pipa (yaitu '|'). Misalnya, jika baris ini sendiri ada di riwayat bash Anda:

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

kemudian dalam ringkasan yang dikembalikan dari perintah yang paling dieksekusi, 'sort' dan 'uniq' dan 'sort' kedua tidak akan dimasukkan, karena itu bukan token pertama di baris.

Membangun jawaban dari nelaar, cukup untuk pertama-tama membagi garis dalam sejarah bash Anda pada setiap pipa:

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
shaneb
sumber
6

Tambahan yang menyenangkan akan menjadi diagram batang hitungan:

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

Keluaran:

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

Perintah panjang akan mengimbangi jarak.

joelostblom
sumber
Adakah ide tentang cara membuat perintah panjang tidak mengimbangi spasi?
Ashish Ahuja
@fortunate_man Sayangnya tidak, tapi saya tidak terlalu akrab dengan perl, jadi Anda mungkin akan mendapat jawaban jika Anda menanyakannya sebagai pertanyaan baru. Saya mencoba mencari cara mencetak lebar tetap, tetapi tidak menemukan sesuatu segera membantu, dan dokumentasi fungsi juga tidak banyak membantu. Anda mungkin perlu menggunakan printfatau sprintfbukannya print.
joelostblom
2

Gunakan $ 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 -n10untuk mendapatkan daftar 10 perintah teratas Anda.

Contoh:

 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
Неделчо Христов
sumber
Bagaimana ini berbeda dari jawaban yang diterima?
Ashish Ahuja
1

Anda dapat membuat awkjawaban di atas dari @nelaar menjadi skrip bash yang bagus:

#!/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
nettux
sumber
1

Nah ini adalah versi modifikasi dari perintah "Неделчо Христов" yang disalin dan ditempel di sini .... jika Anda telah mengamankan atau mencap tanggal pada riwayat pesta Anda, maka Anda akan memiliki output yang bermasalah

Ini akan membuat Anda lebih baik menggunakan ini:

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
Th3_4n3r
sumber