In UNIX, come trovare i comandi più comunemente usati nella storia?
In UNIX, come trovare i comandi più comunemente usati nella storia?
Risposte:
Dipende piuttosto da ciò che intendi per "comando". Da una prospettiva un comando è semplicemente un eseguibile chiamato dalla riga di comando, quindi ls
e ls -alh /tmp/foo/bar/*tar.bz
sono entrambi il comando ls
. Un'altra prospettiva è che un comando è la somma delle sue parti, il che significa che l'esempio sopra è 2 comandi distinti.
Se la tua intenzione è di contare comandi completamente unici nella cronologia, puoi eseguire: history | cut -d' ' -f4- | uniq -c | sort -n
Si noti che questo è stato testato su un sistema Debian, la sintassi di output del comando della cronologia può variare leggermente. Regola il numero '4' nel comando per selezionare colonne alternative.
Se si desidera considerare solo il primo comando senza argomenti, è possibile eseguire: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n
Per includere gli argomenti ma non i comandi concatenati o convogliati che seguono, è possibile eseguire: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n
Si noti che ognuno di questi ordina il numero di comandi numericamente con l'ultima frequenza che appare per ultima.
sort
prima uniq
per ottenere un conteggio accurato poiché controlla solo le linee adiacenti:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
Ho visto sia le risposte di vucar che di tok , sono molto utili ma puoi usare anche lo strumento fantastico awk
:
se vuoi elencare i comandi che usi più spesso:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
per trovare il comando più usato:
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head -1
per me è stato vi
:
94 vi
Un altro approccio sarebbe quello di utilizzare la contabilità di processo BSD , che è disponibile anche su Linux (anche se non so se sia abilitato per impostazione predefinita). In pratica mantiene una scheda di tutti i programmi in esecuzione (e di alcune altre misure, come il tempo di CPU consumato ecc.) Per tutto il tempo in cui la contabilità è attiva. Da lì sono disponibili alcune statistiche aggregate, tra le altre: una specie di elenco di tutti i programmi mai eseguiti sul sistema, ordinati per ecc. Numero massimo di usi.
I comandi da cercare sono lastcomm
per il registro in esecuzione e sa
per le statistiche aggregate. Tornando alla domanda originale, supponendo che il sistema in questione avrebbe avuto la contabilità abilitata da quando è stato installato, quindi sa -n
darebbe un elenco di tutti i comandi mai eseguiti sul sistema (per tutti gli utenti), ordinati per frequenza. Per le condotte, ogni parte della conduttura sarebbe ovviamente conteggiata separatamente, poiché ogni parte comprende un nuovo processo da biforcare.
Per maggiori dettagli, il diario di Linux ha un articolo che spiega il funzionamento. Io stesso ho avuto l'idea dalla guida di NetBSD ; molti dei consigli di amministrazione più generici non sono specifici di NetBSD ma si applicano anche ad altri sistemi Unix.