Я ищу команду Unix или сценарий bash, чтобы получить процессы, которые в данный момент выполняются пользователями в системе.
Я попробовал команду ps -Af
, однако все процессы, включая корневые процессы, всплывают.
Есть ли какая-нибудь команда для запуска процессов только пользователем? В противном случае мне понадобится помощь в написании скрипта bash для извлечения корневых процессов из команды ps -Af
.
6 ответов
Это даст вам каждый процесс, НЕ принадлежащий root:
ps -N -u root
ps --deselect -U root
. --deselect
инвертирует логику -U root
.
как насчет ps -U <username>
(работает на MacOSX) или канала через grep
ps -Af | grep -v 'root'
должен показывать все процессы, не принадлежащие root. Но будьте осторожны, grep не будет ограничен именем пользователя. Процесс, раскрывающий некоторый путь, содержащий "корень", также будет удален из результата.
Если вы хотите удалить root
, просто выполните ps -Af
и передайте его через grep:
ps -Af | grep -v root
Конечно, это небрежно. Если вы запускаете программу под названием troot, вы ее тоже потеряете. Вы можете быть более точным, используя awk
и удаляя любую строку с корнем в правом столбце. У меня нет вывода ps -Af
передо мной, но ради аргумента давайте предположим, что идентификатор пользователя находится в 3-м столбце. В этом случае вы хотели бы сделать это:
ps -Af | awk '$3 != "root" { print $0 }'
Вы должны попробовать whowatch
Это дает вам хороший обзор того, какие пользователи вошли в систему, какие обработанные они в настоящее время работают и так далее.
ps -Af | grep -v root
не идеален.
попробуй ps -Af | awk '$1 != "root" {print $0}'