Как мне составить список наиболее часто используемых команд в терминале?

13

Как мне составить список наиболее часто используемых команд в терминале?

Я знаю, что этот вопрос может быть бесполезным для любых будущих предложений для некоторых из нас, но даже в этом случае список может быть полезен, когда мы не помним команду, использовавшуюся однажды или несколько раз в прошлом, когда мы можем искать в конец этого списка.

Раду Рэдяну
источник
Какой терминал?
Элайджа Линн

Ответы:

20

Мы будем использовать записи из .bash_historyфайла, чтобы сделать это. Следующая команда выдаст вам список всех команд в порядке их наиболее частого использования:

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

Если вы хотите только топ 10, вы должны добавить headпо команде выше:

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

Чтобы получить конкретный топ, например топ 5, используйте headс -n 5опцией:

5 лучших команд

Если вы хотите, чтобы список был в обратном порядке (верхняя часть с редко используемыми командами), не используйте roprion для секунды 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

Вы можете увидеть скачок в импульсах для vim, rmи т.д.

Раду Рэдяну
источник
1
Возможно, вы захотите указать
3
@ ohaal Верьте или нет, я не знал о вышеупомянутом источнике; искренне это была лабораторная проблема друга, который учился в информатике Яссы .
Раду Рэдяну
@muru Редактирование, которое вы сделали для sudo, не работает для чего-то вроде, sudo -iпотому что оно дает мне -iкоманду
geek1011
1
@ geek1011 sudo -iзапускает новую оболочку. Эта история больше не в истории вашей оболочки, а в root. Очевидно, что эти команды не работают для многих крайних случаев; нет способа справиться со всеми возможными командами без написания собственного синтаксического анализатора для языка оболочки.
Муру
1
@ geek1011 Конечно, добавьте еще одну проверку, что-то вроде:if ($3 ~ /sudo/ && $4 !~ /^-/)
Муру
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
Элайджа Линн
источник