在我的项目中,我想在Linux服务器中的进程中选择用户名或用户ID
我使用了如下命令:
ps aux | grep -v root
我得到了一些这样的内容:
mae-wan+ 34325 99.7 0.5 1717096 1056124 ? Rl Apr18 1533:33 ./turb
mae-wan+ 34326 99.7 0.5 1717128 1057284 ? Rl Apr18 1533:35 ./turb
mae-wan+ 34327 99.7 0.5 1716992 1056860 ? Rl Apr18 1533:41 ./turb
mae-wan+ 34328 99.7 0.5 1717244 1056644 ? Rl Apr18 1533:43 ./turb
mae-wan+ 34329 99.7 0.5 1717100 1054616 ? Rl Apr18 1533:43 ./turb
mae-wan+ 34330 99.5 0.5 1717100 1057640 ? Rl Apr18 1530:33 ./turb
第一列是:
mae-wan+
因此,整个名称应为:
mae-wangjc
也许mae-wangjc名称太长,显示为mae-wan +
结果,我不得不使用:
ll /proc/34325 | awk '{print $3}' | uniq
我可以成功获得名称“ mae-wangjc”。但是我认为一个接一个地解决每个过程是很丑的。
哪个命令可以显示整个用户名而不是缩写名?
答案 0 :(得分:1)
根据man ps,ps -aux是“使用BSD语法查看系统上的每个进程”。
但是,在标准语法中,您可以设置列的宽度,例如:user:。以下应该为您提供相同的信息,将用户名列的宽度设置为20(或任何其他值):
ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm
结果将是这样:
mae-wangjc 34325 99.7 0.5 1717096 1056124 ? Rl Apr18 1533:33 ./turb
mae-wangjc 34326 99.7 0.5 1717128 1057284 ? Rl Apr18 1533:35 ./turb
mae-wangjc 34327 99.7 0.5 1716992 1056860 ? Rl Apr18 1533:41 ./turb
mae-wangjc 34328 99.7 0.5 1717244 1056644 ? Rl Apr18 1533:43 ./turb
mae-wangjc 34329 99.7 0.5 1717100 1054616 ? Rl Apr18 1533:43 ./turb
答案 1 :(得分:0)
尝试一下:
$ ps aunx | perl -lane 'BEGIN{$, = "\t"} print getpwuid $F[0] // $F[0], @F[1..$#F]'
n
选项打印出uid而不是用户名,然后perl位查找uid的用户名(如果没有关联的名称,则继续使用uid),并打印出带有tab的行-分隔的列。