Comment puis-je faire une liste avec les commandes les plus utilisées dans le terminal?

13

Comment puis-je faire une liste avec les commandes les plus utilisées dans le terminal?

Je sais que cette question peut être inutile pour toute proposition future pour certains d'entre nous, mais même comme cela, la liste peut être utile lorsque nous ne nous souvenons pas d'une commande utilisée une ou plusieurs fois dans le passé, lorsque nous pouvons rechercher dans le fin de cette liste.

Radu Rădeanu
la source
Quel terminal?
Elijah Lynn

Réponses:

20

Nous utiliserons les enregistrements du .bash_historyfichier pour ce faire. La commande suivante vous donnera une liste de toutes les commandes afin que vous les utilisiez le plus souvent:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr

Si vous ne voulez que le top 10, vous devez ajouter headà la commande ci-dessus:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head

Pour obtenir un top spécifique, par exemple le top 5, utilisez headavec -n 5option:

Top 5 des commandes

Si vous voulez la liste dans l'ordre inverse (en haut avec les commandes rarement utilisées), n'utilisez pas roprion pour la seconde sort:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n

Et enfin pour obtenir une liste avec les commandes utilisées une fois par exemple, utilisez grep ' 1 '(changez 1avec le nombre souhaité):

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '

Pour traiter les sudocommandes (comme sudo vim foo), au lieu de simplement {print $3}dans la commande awk, utilisez:

{if($3 ~ /sudo/) print $4; else print $3}

Ainsi, la commande entière ressemblerait à:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr

Par exemple:

$ 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

Vous pouvez voir le saut en compte pour vim, rmetc.

Radu Rădeanu
la source
1
Vous voudrez peut-être créditer votre source dans votre réponse: stackoverflow.com/a/68390/1210983
ohaal
3
@ohaal Croyez ou non, je ne connaissais pas la source ci-dessus; sincèrement, c'était un problème de laboratoire d'un ami que d'étudier à l' informatique de Iasi .
Radu Rădeanu
@muru La modification que vous avez effectuée pour sudo ne fonctionne pas pour quelque chose comme sudo -iparce qu'elle me donne -ila commande
geek1011
1
@ geek1011 sudo -idémarre un nouveau shell. Cette histoire n'est plus dans l'histoire de votre shell, mais dans celle rootde. De toute évidence, ces commandes ne fonctionnent pas pour de nombreux cas marginaux; il n'y a aucun moyen de traiter toutes les commandes possibles sans écrire votre propre analyseur pour le langage shell.
muru
1
@ geek1011 bien sûr, ajoutez un autre chèque, quelque chose comme:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru
3

La commande ci-dessous répertorie également les top 10commandes de terminal les plus fréquemment utilisées,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Commande pour lister toutes les commandes les plus utilisées dans le terminal,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn
Avinash Raj
la source
2

Fish & Bash - La question ne spécifie pas un shell spécifique, juste «terminal». Changez de tête pour le numéro que vous voulez.

Poisson

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

Celui-ci semble fonctionner et est un peu plus court et plus facile à comprendre que les autres réponses. J'aime les longues options pour aider à la lisibilité dans ces types d'exemples.

Frapper

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
Elijah Lynn
la source