history | cut -b8- | cut -d' ' -f1 | sort | uniq -c | sort -rg | head
Ce n'est qu'une idée...
EDIT : explications (tant qu'à faire, un peu de pédagogie)
Tout programme éxécutable sur le terminal peut prendre des arguments depuis une "entrée standard", et affiche les résultats sur la "sortie standard" : ce qui s'affiche sur l'écran du terminal, en gros.
Le pipe | permet de renvoyer de la sortie standard vers l'entrée.
En quelque sorte, cela permet d'enchaîner les fonctions.
Au début, on affiche la liste des commandes passées ( grâce à history)
Le format est celui ci " XXX nom_de_la_commande", où XXX est le numéro de la commande.
XXX est un numéro aligné à droite (c'est plus joli)
En gros, le nom de la commande commence au 8ème caractère si on affiche moins de 1000 commandes avec history (par défaut, c'est 500)
On commence par enlever sur chaque ligne tous les caractères à partir du 8ème (avec cut)
Ensuite, on découpe chaque ligne avec en plusieurs champs (fields), en prenant l'espace comme délimiteur : cela permet de récupérer le nom de chaque commande, sans les arguments :
(Exemple : "sudo apt-get install" devient "sudo" : ça peut valoir le coup de modifier la formule pour enlever les sudo, je ne sais pas )
Ensuite, on trie, avec sort.
On remplace chaque ligne qui apparaît plusieurs fois de la manière suivante :
ls
ls
devient
2 ls
A ce moment-là, on retrie les lignes, mais de manière numérique (sinon, 20 vient avant 2), et à l'envers, pour avoir les plus utilisées.
On prend la tête (head) du résultat pour afficher seulement les dix plus utilisées.
----------
@ gameboy
Un petit man sur les commandes utilisées te permettra de modifier la ligne précédente pour l'adapter à tes besoins ...
EDIT 2 :
Voilà le code pour ne pas tenir compte de sudo :
history | cut -b8- | sed -e "s/sudo //" | cut -d' ' -f1 | sort| uniq -c | sort -rg | head
Un bout d'explication : avec, le programme on cherche / remplace simplement la chaîne "sudo ", par la chaîne vide ligne par ligne. (man sed pour plus de détails)