
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 hash
comando 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