如何检查新用户名是否是系统用户?

dan*_*aso 3 command-line

我想创建一个更改用户名的脚本。我想检查用户是否不是系统用户。我的想法是检查 /etc/passwd 并仅选择 ID 介于 1000 和 60000 之间的用户以及具有 /home 目录的用户,例如

user:x:1005:1021::/home/user:/bin/sh
Run Code Online (Sandbox Code Playgroud)

我现在的 grep 命令就像

egrep -E '1[0-9]{3}.*/home' /etc/passwd 
Run Code Online (Sandbox Code Playgroud)

如您所见,它与我的 [1000-60000] 模式和名称都不匹配

pLu*_*umo 6

您可以使用id >= 1000awk来查找本地用户:

awk -F: '$3>=1000 && $3!=65534 {print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

还要检查下面的主文件夹/home

awk -F: '$3>=1000 && $3 != 65534 && $6 ~ /^\/home/ {print $1}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

替换/etc/passwd<(getent passwd)到列表,包括网络帐户的所有用户...

另请参阅此相关问题以及问题

  • 请注意,这不会列出 LDAP 用户,因此仅适用于本地用户 :) (2认同)