web-dev-qa-db-ja.com

最もよく使用されているLinuxコマンドを確認するにはどうすればよいですか?

コマンドラインで最もよく使用するコマンドを教えてください。コマンドラインの使い方を改善できるように知りたいのですが。最もよく使用するコマンドがわかっている場合は、それらのコマンドの詳細を読んで、それらを使用するためのより良い方法を見つけることができます。

私が入力した以前のすべてのコマンドのリストが履歴に保存されていることは知っています。最も使用頻度の高いコマンドのトップ10または20のリストを表示するには、どのように処理すればよいでしょうか。

43
nelaaro

私はこの投稿を http://linux.byexamples.com/ で見ました

基本的には、単純な1行の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
59
nelaaro
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

Awkコマンドは〜/ .bash_historyから最初の文字列を出力し(コマンドオプションまたは引数は表示されません)、sortはすべての行をアルファベット順に並べ替え、次に「uniq -c」は重複した行(入力したコマンド)を削除してカウントします。最後の並べ替えでは、uniqから返されたカウント数でコマンドを並べ替えます。

17
rems

ターミナルでhashコマンドを使用できます。これにより、使用するすべてのコマンドのハッシュエントリがヒット数とともに保持され、ヒットに基づいてそれらを整理して処理できます。

詳細は この記事 を確認してください。

10
Prashere

より一般的な答えを得るには、システムで「 プロセスアカウンティング 」を有効にします。使用頻度だけでなく、CPU、メモリ、I/Oの統計情報も収集できます。

8
mpez0

他の回答のスクリプトは、各コマンドラインで実行される最初のコマンドのみをカウントします。パイプの後に実行されるコマンドは含まれません(つまり、 '|')。たとえば、この行自体がbashの履歴にあった場合:

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

次に、返された最も実行されたコマンドの要約には、「sort」と「uniq」、および2番目の「sort」は含まれません。これは、それらが行の最初のトークンではなかったためです。

Nelaarからの回答に基づいて、すべてのパイプでbash履歴の行を最初に分割するだけで十分です。

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
shaneb

楽しい追加はカウントの棒グラフになります:

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

長いコマンドは間隔をオフセットします。

6
joelostblom

$ 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

これは、ここでコピーして貼り付けたコマンド「НеделчоХристов」の修正バージョンです... bash履歴を保護または日付スタンプした場合、出力にエラーが発生します。

これはこれを使用してよりよくします:

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

上記のawkの回答を@nelaarからNice bashスクリプトに作成できます。

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

Oh My Zshを使用している場合!この機能はすでに存在しています。入力するだけ

zsh_stats

上位20のコマンドとそれらが実行された回数のリストを取得します。

ソース: https://github.com/ohmyzsh/ohmyzsh/wiki/Cheatsheet

0
Matheus Richard