Como eu vejo qual é o meu comando linux mais usado?

39

Eu gostaria de saber qual comando eu uso mais na linha de comando. Eu gostaria de saber para poder melhorar o uso da linha de comando. Se eu sei qual comando eu uso mais, posso ler mais sobre eles e descobrir maneiras melhores de usá-los.

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

    
por nelaaro 25.02.2011 / 13:06

9 respostas

49

Acabei de ver este post em link

Basicamente você usa um simples script awk 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.

Exemplo de saída da 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
    
por 25.02.2011 / 13:10
17
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 a ordenação ordenará todas as linhas alfabeticamente, então "uniq -c" removerá linhas duplicadas (seus comandos digitados) e contará eles, e o último tipo irá ordenar seus comandos pelo número de contagem retornado pelo uniq.

    
por 25.02.2011 / 13:08
10

Você pode usar o comando hash em seu terminal, que mantém uma entrada de hash de todos os comandos usados junto com o número de ocorrências e com base nos hits que você pode classificá-los e processar.

Verifique este artigo para obter mais informações.

    
por 27.08.2012 / 17:55
8

Para uma resposta mais geral, ative " contabilidade de processos " em seu sistema. Você pode obter não apenas a frequência de uso, mas estatísticas agregadas de CPU, memória e E / S.

    
por 25.02.2011 / 14:22
6

Uma adição divertida seria um gráfico de barras das contagens:

history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'

Saída:

man     226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat     230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm      235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls      240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura    273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv      362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo    534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi      611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git     693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd      754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

Comandos longos compensam o espaçamento.

    
por 16.05.2017 / 21:45
5

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 (por exemplo, '|'). Por exemplo, se essa linha estivesse em seu histórico bash:

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

em seguida, 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 da empresa, é suficiente primeiro dividir as linhas em seu histórico bash em cada canal:

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
    
por 18.05.2016 / 22:41
2

Use $ 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 para obter uma lista dos seus 10 principais comandos.

Exemplo:

 1  272  27.2%  svn
 2  227  22.7%  cd
 3  159  15.9%  sudo
 4  57   5.7%   ll
 5  52   5.2%   mc
 6  32   3.2%   rm
 7  23   2.3%   mkdir
 8  19   1.9%   exit
 9  13   1.3%   subl
10  13   1.3%   find
    
por 08.06.2016 / 20:57
1

Você pode criar a resposta awk acima de @nelaar em um bom script:

#!/bin/bash
HISTFILE=~/.bash_history
set -o history
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
    
por 13.05.2014 / 13:04
1

Bem, esta é uma versão modificada do comando "Неделчо Христов" copiado e colado aqui .... se você tiver protegido ou a data carimbou seu histórico bash, então você terá uma saída com falha

Isso ajudará você a usar isso:

awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20
    
por 07.07.2016 / 13:35