В UNIX, как найти наиболее часто используемые команды в истории?
В UNIX, как найти наиболее часто используемые команды в истории?
Ответы:
Скорее это зависит от того, что вы намерены под «командой». С одной стороны, команда - это просто исполняемый файл, вызываемый из командной строки, поэтому 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
Обратите внимание, что каждая из этих групп численно с наибольшей частотой появляется последней.
sort
прежде чем uniq
получить точный счет, поскольку он проверяет только соседние строки:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
Я видел ответы как 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
Другой подход - использовать учет процессов BSD , который также доступен в Linux (хотя я не знаю, включен ли он по умолчанию). В основном, он ведет вкладку всех запущенных программ (и некоторых других показателей, таких как время процессора и т. Д.), Пока учет активен. Отсюда доступно несколько сводных статистических данных: список всех программ, когда-либо запущенных в системе, отсортированный по количеству использованных пользователей и т. Д.
Команды, которые нужно искать, предназначены lastcomm
для текущего журнала и sa
для агрегированной статистики. Возвращаясь к первоначальному вопросу, предполагая, что в рассматриваемой системе был включен учет с момента ее установки, затем sa -n
получился бы список всех команд, когда-либо выполненных в системе (для всех пользователей), отсортированных по частоте. Для конвейеров каждая часть конвейера, конечно, будет учитываться отдельно, так как каждая часть содержит новый процесс, который должен быть разветвлен.
Для более подробной информации в журнале Linux есть статья, объясняющая работу. Я сам получил идею из руководства по NetBSD ; многие из более общих советов по администрированию не относятся к NetBSD, но применимы и к другим системам Unix.