Como faço para fazer uma lista com os comandos mais usados ​​no terminal?

13

Como faço para fazer uma lista com os comandos mais usados ​​no terminal?

Sei que essa pergunta pode ser inútil para futuras propostas para alguns de nós, mas, mesmo assim, a lista pode ser útil quando não lembrarmos de um comando usado uma ou várias vezes no passado, quando pudermos pesquisar no final desta lista.

Radu Rădeanu
fonte
Qual terminal?
Elias Lynn

Respostas:

20

Usaremos os registros do .bash_historyarquivo para fazer isso. O próximo comando fornecerá uma lista de todos os comandos para que você os use com mais freqüência:

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

Se você deseja apenas os 10 principais, adicione heado comando acima:

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

Para obter um top específico, por exemplo, o top 5, use headcom a -n 5opção:

5 principais comandos

Se você quiser a lista na ordem inversa (em cima dos comandos raramente usados), não use roprion por segundo sort:

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

E, finalmente, para obter uma lista com os comandos usados ​​uma vez, por exemplo, use grep ' 1 '(mude 1com o número desejado):

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

Para lidar com sudocomandos (como sudo vim foo), em vez de apenas {print $3}no comando awk, use:

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

Portanto, o comando inteiro ficaria assim:

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

Por exemplo:

$ 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

Você pode ver o salto nas contagens para vim, rm, etc.

Radu Rădeanu
fonte
1
Pode querer creditar a sua fonte em sua resposta: stackoverflow.com/a/68390/1210983
ohaal
3
@ohaal Acredite ou não, eu não sabia sobre a fonte acima; sinceramente, este era um problema de laboratório de um amigo que estudava na Computer Science of Iasi .
Radu Rădeanu
@muru A edição que você fez para sudo não funciona para algo como sudo -i, porque me dá -ique o comando
geek1011
1
@ geek1011 sudo -iinicia um novo shell. Essa história não está mais na história do seu shell, mas no root. Obviamente esses comandos não funcionam em muitos casos extremos; não há como lidar com todos os comandos possíveis sem escrever seu próprio analisador para a linguagem shell.
Muru
1
@ geek1011 certeza, adicionar outro cheque, algo como:if ($3 ~ /sudo/ && $4 !~ /^-/)
Muru
3

O comando abaixo também listará os top 10comandos do terminal usados ​​com mais freqüência,

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

Comando para listar todos os comandos mais usados ​​no terminal,

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

Fish & Bash - A questão não especifica um shell específico, apenas 'terminal'. Mude a cabeça para o número que desejar.

Peixe

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

Esse Bash parece funcionar e é um pouco mais curto e fácil de entender do que as outras respostas. Gosto das opções longas para ajudar a legibilidade nesses tipos de exemplos.

Bater

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
Elijah Lynn
fonte