Wie finde ich unter UNIX die am häufigsten verwendeten Befehle im Verlauf?
Wie finde ich unter UNIX die am häufigsten verwendeten Befehle im Verlauf?
Antworten:
Es kommt vielmehr darauf an, was Sie mit "Befehl" beabsichtigen. Aus einer Perspektive ist ein Befehl einfach eine ausführbare Datei, die über die Befehlszeile aufgerufen wird, ls
und ls -alh /tmp/foo/bar/*tar.bz
beide sind der Befehl ls
. Eine andere Perspektive ist, dass ein Befehl die Summe seiner Teile ist, was bedeutet, dass das obige Beispiel zwei verschiedene Befehle sind.
Wenn Sie ganz eindeutige Befehle in der Historie zählen möchten, können Sie Folgendes ausführen: history | cut -d' ' -f4- | uniq -c | sort -n
Bitte beachten Sie, dass dies auf einem Debian-System getestet wurde. Die Ausgabesyntax Ihres Verlaufsbefehls kann geringfügig variieren. Passen Sie die Zahl '4' im Befehl an, um alternative Spalten auszuwählen.
Wenn Sie nur den ersten Befehl ohne Argumente berücksichtigen möchten, können Sie Folgendes ausführen: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n
Um die folgenden Argumente, aber keine verketteten oder weitergeleiteten Befehle einzuschließen, können Sie Folgendes ausführen: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n
Bitte beachten Sie, dass jeder dieser Befehle die Anzahl der Befehle numerisch sortiert, wobei die höchste Frequenz zuletzt angezeigt wird.
sort
vorher eine zusätzliche hinzufügen uniq
, um eine genaue Zählung zu erhalten, da nur benachbarte Zeilen überprüft werden:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
Ich habe beide gesehen vucar und tok Antworten, sie sind sehr nützlich , aber man könnte die erstaunliche Tool awk
zu:
Wenn Sie eine Liste der Befehle auflisten möchten, die Sie am häufigsten verwenden:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
So finden Sie den am häufigsten verwendeten Befehl:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head -1
für mich war es vi
:
94 vi
Ein anderer Ansatz wäre die Verwendung der BSD-Prozessabrechnung , die auch unter Linux verfügbar ist (obwohl ich nicht weiß, ob sie standardmäßig aktiviert ist). Grundsätzlich werden alle Programme, die ausgeführt werden (und einige andere Maßnahmen, wie z. B. verbrauchte CPU-Zeit usw.), so lange überwacht, wie die Abrechnung aktiv ist. Von dort stehen unter anderem einige aggregierte Statistiken zur Verfügung: eine Art Liste aller Programme, die jemals auf dem System ausgeführt wurden, sortiert nach usw. Top-Anzahl der Verwendungen.
Die zu suchenden Befehle gelten lastcomm
für das laufende Protokoll und sa
für die aggregierten Statistiken. Zurück zur ursprünglichen Frage: Unter der Annahme, dass für das betreffende System die Buchhaltung seit der Installation aktiviert war, wird sa -n
eine Liste aller jemals auf dem System ausgeführten Befehle (für alle Benutzer) angezeigt, sortiert nach Häufigkeit. Bei Pipelines würde natürlich jeder Teil der Pipeline separat gezählt, da jeder Teil einen neuen Prozess umfasst, der gegabelt werden muss.
Weitere Informationen finden Sie im Linux-Journal in einem Artikel , in dem die Funktionsweise erläutert wird. Ich selbst habe die Idee aus dem NetBSD-Handbuch erhalten . Viele der allgemeineren Verwaltungstipps sind nicht spezifisch für NetBSD, sondern gelten auch für andere Unix-Systeme.