Як я бачу, яка моя найпоширеніша команда Linux?


43

Я хотів би знати, яку команду я використовую найбільше в командному рядку. Мені хотілося б знати, щоб я міг покращити використання командного рядка. Якщо я знаю, яку команду я використовую найбільше, то зможу прочитати більше про них, спробувати і з'ясувати кращі способи їх використання.

Я знаю, історія зберігає список усіх попередніх команд, які я набрав. Як би я обробив це, щоб побачити список 10 найкращих та 20 найбільш використовуваних команд.


Так, я просто опублікував це питання, щоб відповісти на нього. Це просто так цікаво, що я, хоча спільнота суперпопулярних дійсно вважатиме це цікавим.
nelaaro

1
Немає нічого поганого в розміщенні питань, щоб відповісти собі. Це робить зручну закладку, і якщо ви не в тому напрямку, незабаром про це почуєте!
Кен

Відповіді:


59

Я щойно побачив цю публікацію на 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

3
У моєму OSX вихідний результат історії різний, тому мені просто потрібно було змінити перші $ 2 на $ 4, і це працює.
Ліам

17
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

Команда awk надрукує перший рядок із ~ / .bash_history (не відображає параметри та аргументи команд), потім сортування впорядкує всі рядки в алфавітному порядку, тоді "uniq -c" видалить повторювані рядки (ваші введені команди) та порахує їх, і останній сортування впорядкує ваші команди за підрахунковим числом, поверненим uniq.


Ви також можете додати -rв кінці команди, щоб сортувати їх у зворотному порядку та | head -10обмежити кількість результатів.
ROMANIA_engineer

10

Ви можете використовувати hashкоманду у своєму терміналі, яка зберігає хеш-запис кожної команди, яку ви використовуєте разом із кількістю звернень, і на основі звернень ви можете їх сортувати та обробляти.

Перегляньте цю статтю для отримання додаткової інформації.


8

Для більш загальної відповіді увімкніть " облік процесів " у вашій системі. Ви можете отримати не просто частоту використання, але й сукупну статистику процесора, пам'яті та вводу / виводу.


6

Сценарії в інших відповідях підраховують лише першу команду, виконану у кожному командному рядку; вони не включають команди, виконані після труб (тобто '|'). Наприклад, якщо цей рядок був у вашій історії баш:

awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n

тоді у поверненому резюме більшості виконуваних команд "сортування" та "uniq" та другий "сортування" не будуть включені, оскільки вони не були першим жетоном у рядку.

Спираючись на відповідь від nelaar, достатньо спершу розділити рядки історії вашої башти на кожну трубку:

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

6

Веселим доповненням буде лінійна діаграма рахунків:

history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'

Вихід:

man     226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat     230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm      235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls      240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura    273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv      362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo    534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi      611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git     693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd      754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

Довгі команди компенсують інтервал.


Будь-яка ідея про те, як зробити довгі команди, щоб не компенсувати інтервал?
Ashish Ahuja

@fortunate_man На жаль, ні, але я не дуже добре знайомий з perl, тому ви, можливо, отримаєте відповідь, якщо поставите це як нове запитання. Я намагався шукати, як друкувати фіксовану ширину, але не знайшов нічого одразу корисного, і документація щодо функцій теж не дуже допомогла. Можливо, вам доведеться використовувати printfабо sprintfзамість цього print.
joelostblom

2

Використовуйте $ 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для отримання списку ваших 10 найкращих команд.

Приклад:

 1  272  27.2%  svn
 2  227  22.7%  cd
 3  159  15.9%  sudo
 4  57   5.7%   ll
 5  52   5.2%   mc
 6  32   3.2%   rm
 7  23   2.3%   mkdir
 8  19   1.9%   exit
 9  13   1.3%   subl
10  13   1.3%   find

Чим це відрізняється від прийнятої відповіді?
Ashish Ahuja

1

Ви можете awkмодифікувати вищезгадану відповідь від @nelaar в приємний сценарій баш:

#!/bin/bash
HISTFILE=~/.bash_history
set -o history
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

Ну це модифікована версія команди "Неделчо Христов" скопійована і вставлена ​​сюди .... якщо ви закріпили дату або запечатали свою історію баш, то ви отримаєте помилковий вихід

Це вам краще допоможе:

awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.