Мне нужно увидеть количество конкретных процессов по пользователям. Например, я делаю
ps -ef | grep apache
здесь перечислены все процессы apache. Теперь мне нужен подсчет количества процессов, запущенных каждым пользователем в Linux.
как я могу получить это.
попробуйте
ps -e -o user h| awk '{u[$1]++} END { for (user in u ) printf "%s:%d\n",user,u[user]}'
где
-e
список всех процессов -o пользователь
только вывод пользователя h
не отображать заголовок РЕДАКТИРОВАТЬ: можно (вроде) сократить до, спасибо @Gohu.
ps -e -o user h| sort | uniq -c | sort -rg
Краткое решение:
ps -eo "%U" --sort=user h | uniq -c
--sort=user
- сортировать по имени пользователя
uniq -c
- подсчитывать количество процессов для каждого уникального пользователя
Одно решение:
gohu@Luna:~$ ps -ef | grep -v '^UID' | awk '{print $1}' | sort | uniq -c | sort -rg
151 gohu
149 root
2 nobody
2 avahi
1 syslog
1 rtkit
1 ntp
1 message+
1 daemon
1 colord
С:
ps -ef
: список процессов с пользователем в качестве первого элемента строки grep -v '^UID '
: удалить строку заголовка awk '{print $1}'
: захватить первый элемент строки (пользователь) sort
: нам нужно отсортировать перед запуском uniq - c
uniq -c
: объединить повторяющиеся строки и подсчитать вхождения sort -rg
: числовая сортировка, большинство вхождений сначала