Answers:
这是旧版Unix系统的局限性,尤其是NIS目录服务。通常,如果组织尝试使用户名在所有应用程序中保持一致(通常是个好主意),则此限制才到位。
我最近遇到的主要问题是Solaris(10)上的ps,它关闭了第9个以上的字符,因此,例如,如果您需要grep输入不匹配的用户名。
$ sudo -u longusername ps -fu longusername
UID PID PPID C STIME TTY TIME CMD
longuser 14012 11985 0 09:58:39 pts/2 0:00 ps -fu longusername
如果在包含该用户文件的目录上执行ls -l,则列将不对齐。
$ ls -ld /export/home/l*
drwxr-xr-x 2 lauser users 6 Mar 23 10:21 /export/home/lzuser
drwxr-xr-x 2 longusername users 6 May 4 10:02 /export/home/longusername
drwxr-xr-x 2 lzuser users 6 Mar 12 11:21 /export/home/lzuser
基本上,您需要警惕任何用于处理登录名而不仅仅是UID的工具。其中可能包括读取或写入日志文件或数据库的内容,或者使用了诸如last,who,finger,ls,ps等工具的输出。
快速的Google开启了此页面:
http://fixunix.com/sun/113647-username-lenght-more-then-8-characters.html
这增加了更多原因。
关于创建用户名的最佳做法,使用大写而不是小写的登录名也会带来一些麻烦,因此也应避免这种情况。
当某些(较旧的)系统仅以大写字母登录时,默认情况下,它们会假定用户的终端不支持小写字母,因此请将EVERYTHING设置为大写字母(这样可以防止输入密码并能够键入登录后使用Unix命令!)
编辑(16/04/2019):
我刚刚在RHEL 7.5上注意到ps的输出也不能很好地播放:
$ ps -fulongusername
UID PID PPID C STIME TTY TIME CMD
longuse+ 1230 27243 0 Apr13 pts/0 00:00:00 vim somescript.sh
longuse+ 1701 27243 0 Apr05 pts/0 00:00:00 vim another-script.sh
longuse+ 3116 27243 0 Apr12 pts/0 00:00:01 vim test_script.sh
它用“ +”截断用户名,如果您不熟悉它将是哪个用户,这将无济于事,并且意味着您不能依赖ps的输出,例如,作为需要知道谁的脚本的输入拥有一个过程。