我如何查看我最常用的 linux 命令是什么?

nel*_*aro 50 linux history command-line

我想知道我在命令行上使用最多的命令。我想知道这样我可以改进我对命令行的使用。如果我知道我最常使用哪个命令,那么我可以阅读更多关于它们的信息,尝试找出使用它们的更好方法。

我知道历史记录保存了我之前输入的所有命令的列表。我将如何处理它以查看前 10 或 20 个最常用命令的列表。

nel*_*aro 66

我刚刚在http://linux.byexamples.com/上看到了这篇文章

基本上你使用一个简单的一行 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
Run Code Online (Sandbox Code Playgroud)

可以在上面的链接中找到完整的解释。

在我的机器上输出的示例是:

 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
Run Code Online (Sandbox Code Playgroud)

  • 在我的 OSX 上,history 的输出是不同的,所以我只需要将第一个 $2 更改为 $4 就可以了。 (4认同)

rem*_*ems 18

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)

awk 命令将打印 ~/.bash_history 中的第一个字符串(不显示命令选项或参数),然后 sort 将按字母顺序排列所有行,然后“uniq -c”将删除重复的行(您键入的命令)并对其进行计数,以及最后一种排序将按照 uniq 返回的计数对您的命令进行排序。


小智 10

您可以hash在终端中使用该命令,它会保留您使用的每个命令的哈希条目以及点击次数,并根据点击次数对它们进行排序和处理。

查看这篇文章了解更多信息。


mpe*_*ez0 8

要获得更一般的答案,请在您的系统上启用“进程记帐”。您不仅可以获得使用频率,还可以获得汇总的 CPU、内存和 I/O 统计信息。


小智 6

其他答案中的脚本只计算每个命令行中执行的第一个命令;它们不包括在管道之后执行的命令(即“|”)。例如,如果此行本身在您的 bash 历史记录中:

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)

然后在最常执行的命令的返回摘要中,将不包括“sort”和“uniq”以及第二个“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
Run Code Online (Sandbox Code Playgroud)


joe*_*lom 6

一个有趣的补充是计数的条形图:

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

输出:

man     226 ??????????????????
cat     230 ???????????????????
rm      235 ???????????????????
ls      240 ????????????????????
aura    273 ??????????????????????
mv      362 ??????????????????????????????
sudo    534 ????????????????????????????????????????????
vi      611 ??????????????????????????????????????????????????
git     693 ?????????????????????????????????????????????????????????
cd      754 ??????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

长命令将偏移间距。