第1部分
应该getent
是可执行文件吗?
在我的 zsh 设置中,我可以看到 getent 实际上被定义为一个函数
$ which getent
getent () {
if [[ $2 = <-> ]]
then
grep ":$2:[^:]*$" /etc/$1
else
grep "^$2:" /etc/$1
fi
}
如果我想从 bash shell 执行它,
bash -c "getent passwd user"
我收到一个getent: command not found
错误。
第2部分
在 Mac OSX 中,getent
无论用户 ID 是否有效,都会失败。事实证明,用户 ID 未保存在文件中/etc/passwd
。为什么会这样?还有什么替代方案?
答案1
在 Linux、Solaris 和(我相信)*BSD 系统上,getent 是一个可执行文件,并且将查阅与常规查找函数(/etc 文件、LDAP、NIS 等)相同的一组数据库。
Os-x 不提供 getent,但您可以使用dscacheutil
或dsutil
程序(与目录服务后端对话)获得类似的功能。在网上搜索“osx getent”会为您提供更多详细信息。
答案2
getent 和 dsutil 在 OSX bash 上也失败了。
正如 Paul 上面指出的那样,这个命令 dscacheutil 可以工作。我能够使用以下命令验证特定用户:
dscacheutil -q user -a name <username>.
使用此命令的用户列表
dscacheutil -q user | grep 'name:'