在跨平台设置命名标准时要注意的一件事是Linux(可能还有其他Unix OS)中ps中的一个特殊外观问题。您可能会或可能不会在乎这一点(但是这可能会给一个不期望的人感到震惊……我让安全人员对这一点抽搐了)。
UID列最多只能显示一个用户名的8个字符。如果用户名超过8个字符,它将切换为打印实际的数字UID。您可以通过使用包含USER字段的自定义ps列格式来解决此问题,但是只有USER是最后一列时(根据我的经验测试)。
大多数人可能对此并不在意,但是如果您正在对ps输出进行某种处理并期望出现真实的用户名,则应谨慎使用名称长度(否则,您将在代码中加入hacks)使ps做正确的事)。
例如:
这是完整格式列表的默认列格式。请注意,我的uid是数字格式,因为我的用户名> 8个字符。
[tcampbell@tst-agg1 ~]$ ps -f
UID PID PPID C STIME TTY TIME CMD
2108 1368 1367 0 Jan10 pts/3 00:00:00 -bash
2108 22303 1368 0 12:07 pts/3 00:00:00 ps -f
让我们使用自定义列格式重新创建它。请注意,我已经添加了USER列。请注意,它也是数字格式。
[tcampbell@tst-agg1 ~]$ ps -o uid,user,c,stime,tty,time,cmd
UID USER C STIME TT TIME CMD
2108 2108 0 Jan10 pts/3 00:00:00 -bash
2108 2108 0 12:05 pts/3 00:00:00 ps -o uid,user,c,stime,tty,time,cmd
让我们将USER移至行尾。它被扩展为“正确”的输出。
[tcampbell@tst-agg1 ~]$ ps -o uid,user,c,stime,tty,time,cmd,user
UID USER C STIME TT TIME CMD USER
2108 2108 0 Jan10 pts/3 00:00:00 -bash tcampbell
2108 2108 0 12:05 pts/3 00:00:00 ps -o uid,user,c,stime,tty, tcampbell
但是,一旦我们在列列表的末尾添加了新内容,它就会恢复为数字形式。
[tcampbell@tst-agg1 ~]$ ps -o uid,user,c,stime,tty,time,cmd,user,pid
UID USER C STIME TT TIME CMD USER PID
2108 2108 0 Jan10 pts/3 00:00:00 -bash 2108 1368
2108 2108 0 12:05 pts/3 00:00:00 ps -o uid,user,c,stime,tty, 2108 21756