
Я хотел бы знать, какую команду я использую чаще всего в командной строке. Я хотел бы знать, чтобы улучшить свое использование командной строки. Если я знаю, какую команду я использую чаще всего, я могу прочитать о них больше и попытаться найти лучшие способы их использования.
Я знаю, что история хранит список всех предыдущих команд, которые я набирал. Как бы я обработал его, чтобы увидеть список 10 или 20 самых используемых команд.
решение1
Я только что увидел этот пост наhttp://linux.byexamples.com/
По сути, вы используете простой однострочный скрипт awk
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
Полное объяснение можно найти по ссылке выше.
Пример вывода на моей машине:
1 211 21.1% ls
2 189 18.9% sudo
3 58 5.8% man
4 52 5.2% cd
5 43 4.3% ping
6 40 4% apropos
7 34 3.4% less
8 22 2.2% cat
9 18 1.8% which
10 18 1.8% aspell
решение2
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
Команда awk выведет первую строку из ~/.bash_history (не отображая параметры или аргументы команды), затем sort упорядочит все строки в алфавитном порядке, затем "uniq -c" удалит дублирующиеся строки (введенные вами команды) и подсчитает их, а последняя sort упорядочит ваши команды по числу, возвращаемому uniq.
решение3
Вы можете использовать hash
команду в своем терминале, которая сохраняет хеш-запись каждой используемой вами команды вместе с количеством совпадений, и на основе совпадений вы можете сортировать их и обрабатывать.
ПроверятьЭта статьяЧтобы получить больше информации.
решение4
Скрипты в других ответах учитывают только первую команду, выполненную в каждой командной строке; они не включают команды, выполненные после конвейеров (т. е. ' | '). Например, если сама эта строка была в вашей истории bash:
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
то в возвращаемую сводку наиболее часто выполняемых команд «sort» и «uniq», а также вторая «sort» не будут включены, поскольку они не являются первым токеном в строке.
Основываясь на ответе nelaar, достаточно сначала разделить строки в истории bash на каждом канале:
sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10