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

Rad*_*anu 14 command-line bash history

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

我知道这个问题对于我们中的一些人未来的任何建议可能没有用,但即使这样,当我们不记得过去使用过一次或几次的命令时,该列表可能很有用,当我们可以在此列表的结尾。

Rad*_*anu 20

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

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)

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

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
Run Code Online (Sandbox Code Playgroud)

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

前 5 个命令

如果您希望以相反的顺序列出列表(顶部带有很少使用的命令),请不要将roprion 用于 second sort

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)

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

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '
Run Code Online (Sandbox Code Playgroud)

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

{if($3 ~ /sudo/) print $4; else print $3}
Run Code Online (Sandbox Code Playgroud)

所以整个命令看起来像:

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

例如:

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

可以看到跳计数vimrm等等。

  • @ohaal 信不信由你,我不知道上述来源;真诚地这是一个朋友在[雅西计算机科学](http://www.infoiasi.ro/bin/Main/?language=en)学习的实验室问题。 (3认同)