Я предполагаю, что вы еще не очень хорошо знакомы с Unix, иначе вы бы не спросили об этом, поэтому я собираюсь включить мыслительный процесс с помощью которого вы придете к такой команде. Тогда вы сможете найти следующий самостоятельно.
Во-первых, вам нужно получить список запущенных процессов. Чтобы перечислить запущенные процессы, используйте ps
.Вы, вероятно, уже знаете это, но это хорошее место для начала. Вы видели такие команды, как ps ax
, что означало бы перечислить все ( a
), даже те, у которых нет связанного tty ( x
).
Теперь необходимо указать ему выбрать все процессы ( a
) и отобразить имена исполняемых файлов ( c
). Вы можете включить x
или нет: любой интерактивный bash
обязательно будет иметь связанный tty, но сценарий оболочки может не включать его, поэтому включать его зависит от того, что вам нужно. Чтобы упростить синтаксический анализ его вывода, также удобно ограничить его вывод интересующими нас значениями, а именно пользователем и командой ( o user, command
).
Это дает следующее:
$ ps aco user,command
root login
root bash
user bash
root bash
user lynx
...
Теперь вам нужно отфильтровать его, чтобы найти экземпляры bash
для каждого пользователя. Для этого вы можете передать его по конвейеру awk
, используя скрипт $ 2 == "bash" {print $ 1}
, что означает, что "если второй столбец -" bash ", напечатайте первый столбец ».
$ ps aco user,command | awk '$2=="bash" {print $1}'
root
user
root
Наконец, вы хотите отсортировать вывод и удалить дубликаты, используя sort
и uniq
.
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq
root
user
Если вам нужно количество пользователей, запускающих 'bash', вы можете просто подсчитать строки в выводе этого:
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq | wc -l
2
Затем вы можете записать вывод этих строк в файл, используя перенаправление вывода, то есть команда> файл
.