例如,在Ubuntu框中键入compgen -u
会返回用户列表。这包括的用户数多于/etc/passwd
中列出的用户数。所以问题是当使用bash完成列出用户时,列表来自哪里?
答案 0 :(得分:2)
/etc/passwd
是类UNIX系统上的默认用户帐户信息来源,但它通常由其他来源补充,特别是在某些需要保留该信息的大型组织的计算机上是一致的。
NIS(以前称为" YP")是一个常见的系统。 LDAP是另一个。我确定还有其他人。
getent passwd
命令应显示所有相关的帐户信息。在我的机器上(它没有使用NIS或LDAP),它等同于cat /etc/passwd
;在你的,它可能会显示其他信息。
各种getpw*()
函数(getpwuid()
,getpwnam()
,getpwent()
)检索用户帐户信息,相当于/etc/passwd
中的内容加上任何内容补充你的系统用途。据推测,getent
命令和bash
都使用此机制来获取相关信息。
答案 1 :(得分:1)
您可以运行strace -o compgen.out bash -c 'compgen -u'
,然后查看compgen.out
文件,尝试找出它的用途。
在我的机器上,该文件以open("/etc/passwd", O_RDONLY)
结尾,然后写入输出。