为什么该命令不ps -U
列出 username 的进程0x00
,而是列出 root 的进程。
$ id
uid=1000(0x00) gid=1000(0x00) groups=1000(0x00),3(sys),90(network),98(power),108(vboxusers),952(libvirt),956(docker),991(lp),998(wheel)
$ whoami
0x00
$ ps -fu 0x00 | grep -i vbox | grep -v grep
root 468 2 0 09:02 ? 00:00:00 [iprt-VBoxTscThread]
$ ps -fu 1000 | grep -i vbox | grep -v grep
0x00 35855 1332 0 10:44 ? 00:00:02 /usr/lib/virtualbox/VBoxXPCOMIPCD
0x00 35861 1332 0 10:44 ? 00:00:05 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
我可以创建一个以数字开头的用户名,不会出现错误。
$ sudo useradd -M -s /usr/bin/nologin 0x01
$ id 0x01
uid=1001(0x01) gid=1001(0x01) groups=1001(0x01)
是不是不建议设置Linux的用户名以数字开头?
关于内核的附加信息:
$ uname -a
Linux 0xff1 6.7.4-2-MANJARO #1 SMP PREEMPT_DYNAMIC Sat Feb 10 09:41:20 UTC 2024 x86_64 GNU/Linux
某些 Linux 发行版不强制要求用户名必须以字母字符开头。甚至禁止特殊字符。
查看为什么 Linux 用户名不能以数字开头?
一个答案报告说 Ubuntu 接受用户名
&#%^()!@~*?<>=|
。不建议使用以(十进制)数字字符开头的用户名。首选字母字符。这样就可以轻松地区分用户名和用户 ID(数字值)。
如果您确实创建了一个奇怪的用户名(尤其是看起来像用户 ID 的用户名,即数字值),则某些命令可能会中断或得到奇怪的结果。
正如您所发现的,该
ps -u
命令可能并不总是提供您想要/期望的结果。该u
选项接受用户名或用户 ID。当您提供看起来像用户 ID(即数字)的用户名时,此选项可能会做出错误的选择,并将参数视为用户 ID,而不是其实际值。如果您坚持使用不符合严格规则的非常规用户名,那么您将不得不承担后果。
一种解决方法是,当有选择时,始终提供用户 ID 而不是(不明确的)用户名。