查找用户名是否存在

查找用户名是否存在

如何在 shell 脚本中找出当前系统上是否存在给定的用户名?


/etc/passwd并且/etc/shadow不完整。请考虑 OS X 的目录服务,或具有 Likewise Active Directory 集成的 Linux。

答案1

用于此目的的最基本工具之一可能是id

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

产生

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist

答案2

盖特恩

此命令旨在收集可由 /etc 文件和各种远程服务(如 LDAP、AD、NIS/Yellow Pages、DNS 等)支持的数据库的条目。

要确定某个密码命名服务是否知道某个用户名,只需运行:

getent passwd username

这也适用于群组、主机和其他人,具体取决于操作系统和实现。

答案3

finger

解析 的输出finger -m <username>。遗憾的是,如果没有找到用户,则没有错误代码,但如果没有找到,则会写入错误输出。到目前为止没有缺点。

finger -ms <username> 2>&1 1>/dev/null | wc -l

如果找到用户就会打印0(因为没有错误输出),否则会打印更大的数字。

chown

运行(令人惊讶的是,任何用户都可以运行):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

如果失败root,则帐户名无效。

如果因非用户而失败root,则解析可能的本地化输出不允许操作或者无效的用户(或等效物)。LANG提前设置以可靠地执行此操作。

答案4

我想说的是,你会想要依赖/etc/passwd和类似的东西(例如,/etc/shadow基于 Shadow 的系统;在题外话中,一些类似的系统可能会使用/etc/master.passwd或其他类似的文件)。

通常/etc/passwd被视为用户是否存在的绝对权威决定。如果您使用本页中描述的任何其他方法,并且如果这些其他方法指向现有用户但实际上/etc/passwd没有,那么我会说该用户在系统中不存在,这是软件可能依赖的最常见标准的定义。

话虽如此,我会采用另一种方式来增加一些可以使用的其他选项。

ls -l /home | grep ^customUserName$<BR> echo $?

显然,将“customuserName”替换为要检查的用户的名称。如果系统使用 /users,则将 /home 替换为 /home。如果没有为特定用户创建主目录,则可能无法在 /etc/passwd 中找到所有用户,如果您只是导入用户(即,将文本行导入 /etc/passwd),并且除非/直到有人登录,否则不会创建主目录,则可能会出现这种情况。

相关内容