在bash中显示系统进程的用户标识
我需要创建一个在系统上运行进程的用户ID列表,不管它们是否登录。但是,我在显示完整用户名时遇到问题,以下是我的代码:在bash中显示系统进程的用户标识,bash,Bash,我需要创建一个在系统上运行进程的用户ID列表,不管它们是否登录。但是,我在显示完整用户名时遇到问题,以下是我的代码: #!/bin/bash i=0 top -n 1 | while read line do if [ $i -ge 7 ] then check=$(echo $line | awk '{print $3}') if [ $check != "root" ] then user=$(ech
#!/bin/bash
i=0
top -n 1 | while read line
do
if [ $i -ge 7 ]
then
check=$(echo $line | awk '{print $3}')
if [ $check != "root" ]
then
user=$(echo $line | awk '{print $2}')
echo $user
fi
fi
i=$((i+1))
done
top命令只打印出用户名的前8个字符。是否有top的变体可以为我提供完整的用户ID?您可以在一行中完成此操作:
ps -eo uid= | tr -d ' ' | grep -vx 0 | sort | uniq
这些步骤是:
- 打印所有正在运行的进程的UID
- 修剪空白(因为
右对齐数字)ps
- 删除所有显示为0的行(例如root用户)
- 对其余行进行排序,以便将重复项分组在一起
- 删除相邻的重复项
ps -eo user= | grep -vx root | sort | uniq
如下面的注释所述,如果您希望流程的uid或用户名为“真实”(而非“有效”),则可以指定ruid
或ruser
,而不是uid
。(如果运行setuid程序,“有效”用户是程序的所有者,但“真正”用户仍然是您。)
此外,您还可以将-c
添加到uniq
命令中,以获得每个用户拥有多少进程的计数。您甚至可以按进程数再次排序:
ps -eo user= | grep -vx root | sort | uniq -c | sort -nr
ps-eo ruser=如果需要名称而不是UID.Wow。这太棒了。我得到了一些额外的用户,如果你在寻找所有在系统上运行任何东西的用户,那么是什么让用户“额外”呢?是的,没关系。我以为有复制品,但效果很好