Como posso ver quais são meus comandos Linux mais usados?

Como posso ver quais são meus comandos Linux mais usados?

Gostaria de saber qual comando eu mais uso na linha de comando. Gostaria de saber para poder melhorar meu uso da linha de comando. Se eu souber qual comando uso mais, poderei ler mais sobre eles e tentar descobrir maneiras melhores de usá-los.

Eu sei que o histórico mantém uma lista de todos os comandos anteriores que digitei. Como eu processaria isso para ver uma lista dos 10 ou 20 comandos mais usados.

Responder1

Acabei de ver esse post nohttp://linux.byexamples.com/

Basicamente você usa um script awk simples de uma linha

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

Uma explicação completa pode ser encontrada no link acima.

Um exemplo de saída na minha máquina é:

 1  211  21.1%  ls
 2  189  18.9%  sudo
 3  58   5.8%   man
 4  52   5.2%   cd
 5  43   4.3%   ping
 6  40   4%     apropos
 7  34   3.4%   less
 8  22   2.2%   cat
 9  18   1.8%   which
10  18   1.8%   aspell

Responder2

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

O comando awk imprimirá a primeira string de ~/.bash_history (não mostrando opções de comando ou argumentos), então sort ordenará todas as linhas em ordem alfabética, então "uniq -c" removerá linhas duplicadas (seus comandos digitados) e as contará, e a última classificação ordenará seus comandos pelo número de contagem retornado por uniq.

Responder3

Você pode usar o hashcomando em seu terminal, que mantém uma entrada hash de cada comando usado junto com o número de ocorrências e com base nas ocorrências você pode classificá-las e processá-las.

VerificarEste artigoPara maiores informações.

Responder4

Os scripts nas outras respostas contam apenas o primeiro comando executado em cada linha de comando; eles não incluem comandos executados após pipes (ou seja, ' | '). Por exemplo, se esta linha estivesse em seu histórico do bash:

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

então, no resumo retornado dos comandos mais executados, 'sort' e 'uniq' e o segundo 'sort' não seriam incluídos, pois não eram o primeiro token na linha.

Com base na resposta de nelaar, basta primeiro dividir as linhas do seu histórico do bash em cada pipe:

sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

informação relacionada