為什麼該指令不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
答案1
我可以創建一個以數字開頭的用戶名,不會出現錯誤。
某些 Linux 發行版不強制要求使用者名稱必須以字母字元開頭。甚至禁止特殊字元。
看以下問題的答案為什麼 Linux 使用者名稱不能以數字開頭?
一個答案報告說 Ubuntu 接受用戶名&#%^()!@~*?<>=|
。
是不是不建議設定Linux的使用者名稱以數字開頭?
不建議使用以(十進位)數字字元開頭的使用者名稱。首選字母字元。這樣就可以輕鬆地區分使用者名稱和使用者 ID(數字值)。
如果您確實創建了一個奇怪的用戶名(尤其是看起來像用戶 ID 的用戶名,即數字值),則某些命令可能會中斷或得到奇怪的結果。
正如您所發現的,該ps -u
命令可能並不總是提供您想要/期望的結果。此u
選項接受使用者名稱或使用者 ID。當您提供看起來像使用者 ID(即數字)的使用者名稱時,此選項可能會做出錯誤的選擇,並將參數視為使用者 ID,而不是實際的使用者 ID。
如果您堅持使用不符合嚴格規則的非常規用戶名,那麼您將不得不承擔後果。
一種解決方法是,當可以選擇時,始終提供使用者 ID 而不是(不明確的)使用者名稱。