在UNIX中,如何找到Unix历史上最常用的命令?


8

在UNIX中,如何找到历史上最常用的命令?


我认为这不在本文的主题范围内,但Google显示了一些不错的列表供参考。显然,用法会因发行版本和命令的可用性以及用户,命令的用途以及对其他命令的了解而有所不同,但是肯定有一些浮动到顶部并显示在主题的所有列表中。
Caleb

7
您是指“ shell命令历史文件”还是“ Unix历史”?
亚历克斯

Answers:


11

而是取决于“命令”的意图。从一个角度看的命令仅仅是通过命令行调用可执行文件,因此,lsls -alh /tmp/foo/bar/*tar.bz是两个命令ls。另一个观点是,命令是其各个部分的总和,这意味着上面的示例是2个不同的命令。

如果您打算在历史记录中计算完全唯一的命令,则可以执行: history | cut -d' ' -f4- | uniq -c | sort -n

请注意,这已经在Debian系统上进行了测试,您的history命令的输出语法可能会略有不同。在命令中调整数字“ 4”以选择备用列。

如果只考虑第一个不带参数的命令,则可以执行: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n

要包含参数,但不包括后面的任何链接或管道命令,可以执行以下命令: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n

请注意,这些命令中的每一个都按数字顺序对频率最高的命令数进行排序。


我需要添加额外的sortuniq得到一个准确计数,因为它只检查相邻线路:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash

4

我已经看到了vucartok的答案,它们非常有用,但是您也可以使用出色的工具awk

如果要列出最常用的命令:

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

查找最常用的命令:

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

对我来说是vi

94 vi

4

另一种方法是使用BSD进程记帐,它在Linux上也可用(尽管我不知道默认情况下是否启用了它)。只要记帐处于活动状态,它基本上都会保留所有正在运行的程序(以及其他一些措施,例如消耗的CPU时间等)的选项卡。从那里可以得到一些汇总统计信息,其中包括:系统上曾经运行过的所有程序的列表的种类,按用途等排序。

要查找的命令lastcomm用于运行中的日志和sa汇总的统计信息。回到原始问题,假设有问题的系统自安装以来就已经启用了记帐,然后sa -n将给出系统上曾经执行过的所有命令(对于所有用户)的列表,并按频率排序。对于管道,管道的每个部分当然将被分别计算,因为每个部分都包括要分叉的新过程。

有关更多详细信息,Linux期刊上有一篇文章介绍了其工作原理。我本人从NetBSD指南中得到了这个主意;其中的许多更通用的管理技巧并非特定于NetBSD,而是也适用于其他Unix系统。


2

前20个最常用的CLI命令:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20

1

您可以使用单个cut命令:

history | cut -c 7-100  | sort  | uniq -c | sort -nr

1

如果仅用于当前会话,则不hash带参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.