如何在终端中列出最常用的命令?


Answers:


20

我们将使用.bash_history文件中的记录来执行此操作。下一条命令将为您列出所有命令,以便您最常使用它们:

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

如果只想要前十名,则必须head在上面的命令中添加:

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

要获得特定的顶部,例如顶部5,请使用headwith -n 5选项:

前5个命令

如果您希望列表以相反的顺序排列(最常用的命令排在最前面),请不要r在第二个位置使用oprion sort

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

最后,要获取包含一次使用的命令的列表,请使用grep ' 1 '(更改1所需的数字):

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

要处理sudo命令(例如sudo vim foo),而不仅仅是{print $3}在awk命令中,请使用:

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

因此,整个命令如下所示:

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

例如:

$ 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

可以看到跳计数vimrm等等。


1
可能想在您的回答中记入您的消息来源:stackoverflow.com/a/68390/1210983
ohaal 2013年

3
@ohaal信不信由你,我不知道上述消息来源;诚挚的,这是在雅西计算机科学学院学习的一个朋友的实验室问题。
RaduRădeanu13年

@muru您对sudo所做的编辑不适用于类似的内容,sudo -i因为它给了我-i命令
geek1011 '16

1
@ geek1011 sudo -i启动一个新的shell。该历史不再是您外壳程序的历史,而是在roots中。显然,这些命令在很多情况下不起作用。如果不编写自己的Shell语言解析器,就无法处理所有可能的命令。
muru

1
@ geek1011当然,添加另一个检查,例如:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru

3

下面的命令还将列出top 10最常用的终端命令,

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

2

Fish&Bash-问题没有指定特定的外壳,仅是“终端”。将头更改为所需的任何数字。

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似乎有效,并且比其他答案更短,更容易理解。我喜欢这些类型的示例中的长选项以帮助提高可读性。

重击

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