В UNIX, как найти наиболее часто используемые команды в истории Unix?

8

В UNIX, как найти наиболее часто используемые команды в истории?

swetha
источник
Я думаю, что это не по теме здесь, но Google показывает несколько хороших списков для справки. Очевидно, что использование будет варьироваться в зависимости от дистрибутива и доступности команд, а также от пользователя, его назначения и его знания других команд, но, безусловно, есть несколько, которые всплывают наверх и появляются во всех списках по теме.
Калеб
7
Вы имеете в виду «файл истории команд оболочки» или «история Unix»?
Алекс

Ответы:

11

Скорее это зависит от того, что вы намерены под «командой». С одной стороны, команда - это просто исполняемый файл, вызываемый из командной строки, поэтому lsи ls -alh /tmp/foo/bar/*tar.bzявляются командой ls. Другая перспектива состоит в том, что команда является суммой ее частей, а это означает, что в приведенном выше примере 2 команды.

Если вы собираетесь считать полностью уникальные команды в истории, вы можете выполнить: history | cut -d' ' -f4- | uniq -c | sort -n

Имейте в виду, что это было протестировано в системе Debian, синтаксис вывода вашей команды истории может немного отличаться. Настройте число 4 в команде, чтобы выбрать альтернативные столбцы.

Если вы хотите рассмотреть только первую команду без аргументов, вы можете выполнить: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n

Чтобы включить аргументы, но не любые цепочечные или конвейерные команды, которые вы можете выполнить, вы можете выполнить: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n

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

Tok
источник
Мне нужно было добавить дополнительные, sortпрежде чем uniqполучить точный счет, поскольку он проверяет только соседние строки:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash
4

Я видел ответы как vucar, так и tok , они очень полезны, но вы также можете использовать удивительный инструмент awk:

если вы хотите получить список команд, которые вы используете чаще всего:

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

найти наиболее используемую команду:

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head -1 

для меня это было vi:

94 vi
Нидал
источник
4

Другой подход - использовать учет процессов BSD , который также доступен в Linux (хотя я не знаю, включен ли он по умолчанию). В основном, он ведет вкладку всех запущенных программ (и некоторых других показателей, таких как время процессора и т. Д.), Пока учет активен. Отсюда доступно несколько сводных статистических данных: список всех программ, когда-либо запущенных в системе, отсортированный по количеству использованных пользователей и т. Д.

Команды, которые нужно искать, предназначены lastcommдля текущего журнала и saдля агрегированной статистики. Возвращаясь к первоначальному вопросу, предполагая, что в рассматриваемой системе был включен учет с момента ее установки, затем sa -nполучился бы список всех команд, когда-либо выполненных в системе (для всех пользователей), отсортированных по частоте. Для конвейеров каждая часть конвейера, конечно, будет учитываться отдельно, так как каждая часть содержит новый процесс, который должен быть разветвлен.

Для более подробной информации в журнале Linux есть статья, объясняющая работу. Я сам получил идею из руководства по NetBSD ; многие из более общих советов по администрированию не относятся к NetBSD, но применимы и к другим системам Unix.

Вукар Тимнаракрул
источник
2

20 наиболее часто используемых команд консоли:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20
Адриан
источник
1

Вы можете использовать одну команду вырезания:

history | cut -c 7-100  | sort  | uniq -c | sort -nr
user78124
источник
1

Если это только для текущей сессии, то hashбез аргументов.

PSkocik
источник