Sous UNIX, comment trouver les commandes les plus utilisées dans l'histoire?
Sous UNIX, comment trouver les commandes les plus utilisées dans l'histoire?
Réponses:
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, ls
et ls -alh /tmp/foo/bar/*tar.bz
sont 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.
sort
avant uniq
pour 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
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
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 lastcomm
le journal en cours d'exécution et sa
les 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 -n
donnerait 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.