从bash完成返回的用户列表在哪里?

时间:2014-07-22 22:59:09

标签: bash bash-completion

例如,在Ubuntu框中键入compgen -u会返回用户列表。这包括的用户数多于/etc/passwd中列出的用户数。所以问题是当使用bash完成列出用户时,列表来自哪里?

2 个答案:

答案 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)结尾,然后写入输出。