In UNIX, come trovare i comandi più comunemente usati nella storia di unix?


8

In UNIX, come trovare i comandi più comunemente usati nella storia?


Penso che questo sia fuori tema qui, ma Google mostra diversi buoni elenchi per riferimento. Ovviamente l'utilizzo varierà in base alla distribuzione e alla disponibilità dei comandi, nonché in base all'utente, al loro scopo e alla loro conoscenza di altri comandi, ma ce ne sono certamente alcuni che galleggiano in cima e si presentano in tutte le liste sull'argomento.
Caleb,

7
Intendi "file di cronologia comandi shell" o "storia di Unix"?
alex,

Risposte:


11

Dipende piuttosto da ciò che intendi per "comando". Da una prospettiva un comando è semplicemente un eseguibile chiamato dalla riga di comando, quindi lse ls -alh /tmp/foo/bar/*tar.bzsono 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.


Avevo bisogno di aggiungere un altro sortprima uniqper ottenere un conteggio accurato poiché controlla solo le linee adiacenti:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash

4

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

4

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 lastcommper il registro in esecuzione e saper le statistiche aggregate. Tornando alla domanda originale, supponendo che il sistema in questione avrebbe avuto la contabilità abilitata da quando è stato installato, quindi sa -ndarebbe 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.


2

I 20 principali comandi CLI più utilizzati:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20

1

Puoi usare un singolo comando di taglio:

history | cut -c 7-100  | sort  | uniq -c | sort -nr

1

Se è solo per la sessione corrente, quindi hashsenza argomenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.