Sous UNIX, comment trouver les commandes les plus utilisées dans l'histoire d'Unix?

8

Sous UNIX, comment trouver les commandes les plus utilisées dans l'histoire?

swetha
la source
Je pense que c'est hors sujet ici, mais Google montre plusieurs bonnes listes pour référence. Évidemment, l'utilisation variera selon la distribution et la disponibilité des commandes ainsi que par l'utilisateur, leur objectif et leur connaissance des autres commandes, mais il y en a certainement quelques-unes qui flottent vers le haut et apparaissent dans toutes les listes sur le sujet.
Caleb
7
Vous voulez dire "fichier d'historique des commandes shell" ou "historique d'Unix"?
alex

Réponses:

11

Cela dépend plutôt de ce que vous entendez par «commande». D'un point de vue, une commande est simplement un exécutable appelé à partir de la ligne de commande, lset ls -alh /tmp/foo/bar/*tar.bzsont donc toutes les deux la commande ls. Une autre perspective est qu'une commande est la somme de ses parties, ce qui signifie que l'exemple ci-dessus est composé de 2 commandes distinctes.

Si votre intention est de compter des commandes entièrement uniques dans l'historique, vous pouvez exécuter: history | cut -d' ' -f4- | uniq -c | sort -n

Veuillez noter que ceci a été testé sur un système Debian, la syntaxe de sortie de votre commande d'historique peut varier légèrement. Ajustez le nombre «4» dans la commande pour sélectionner d'autres colonnes.

Si vous souhaitez considérer uniquement la première commande sans arguments, vous pouvez exécuter: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n

Pour inclure les arguments mais pas les commandes chaînées ou redirigées qui suivent, vous pouvez exécuter: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n

Veuillez noter que chacun de ces types trie le nombre de commandes numériquement avec la fréquence la plus élevée apparaissant en dernier.

Tok
la source
J'avais besoin d'en ajouter un autre sortavant uniqpour obtenir un décompte précis car il ne vérifie que les lignes adjacentes:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash
4

J'ai vu à la fois des réponses vucar et tok , elles sont très utiles mais vous pouvez également utiliser l'outil incroyable awk:

si vous souhaitez lister les commandes que vous utilisez le plus souvent:

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

pour trouver la commande la plus utilisée:

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

pour moi c'était vi:

94 vi
Nidal
la source
4

Une autre approche consisterait à utiliser la comptabilité des processus BSD , qui est également disponible sur Linux (même si je ne sais pas si elle est activée par défaut). Il conserve essentiellement un onglet de tous les programmes qui sont exécutés (et d'autres mesures, comme le temps CPU consommé, etc.) aussi longtemps que la comptabilité est active. À partir de là, quelques statistiques agrégées sont disponibles, entre autres: une sorte de liste de tous les programmes jamais exécutés sur le système, triés par etc. le nombre maximal d'utilisations.

Les commandes à rechercher concernent lastcommle journal en cours d'exécution et sales statistiques agrégées. Revenant à la question d'origine, en supposant que le système en question aurait eu la comptabilité activée depuis son installation, il sa -ndonnerait alors une liste de toutes les commandes jamais exécutées sur le système (pour tous les utilisateurs), triées par fréquence. Pour les pipelines, chaque partie du pipeline serait bien entendu comptée séparément, car chaque partie comprend un nouveau processus à bifurquer.

Pour plus de détails, le journal Linux a un article expliquant le fonctionnement. J'ai moi-même eu l'idée du guide NetBSD ; de nombreux conseils d'administration plus génériques ne sont pas spécifiques à NetBSD mais s'appliquent également à d'autres systèmes Unix.

Vucar Timnärakrul
la source
2

Les 20 commandes CLI les plus utilisées:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20
Adrian
la source
1

Vous pouvez utiliser une seule commande de coupe:

history | cut -c 7-100  | sort  | uniq -c | sort -nr
user78124
la source
1

Si c'est juste pour la session en cours, alors hashsans arguments.

PSkocik
la source