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.


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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.