Откуда берется список пользователей, возвращаемых после завершения bash?

Например, набрав compgen -u в окне Ubuntu возвращает список пользователей. Это включает в себя больше пользователей, чем указано в /etc/passwd, Таким образом, вопрос заключается в том, что при использовании завершения bash для составления списка пользователей, откуда этот список?

2 ответа

Решение

Вы можете запустить strace -o compgen.out bash -c 'compgen -u' а затем посмотрите на compgen.out файл, чтобы попытаться выяснить, что он использует.

На моей машине этот файл заканчивается open("/etc/passwd", O_RDONLY) с последующей записью вывода.

/etc/passwd является источником информации об учетных записях пользователей по умолчанию в UNIX-подобных системах, но он часто дополняется другими источниками, особенно на машинах, которые являются частью какой-то более крупной организации, которой необходимо поддерживать согласованность этой информации.

NIS (ранее известный как "YP") - одна из распространенных систем. LDAP это другое. Я уверен, что есть другие.

getent passwd Команда должна показать вам всю необходимую информацию об учетной записи. На моей машине (которая не использует NIS или LDAP) это эквивалентно cat /etc/passwd; на вашем, это, вероятно, покажет дополнительную информацию.

Различные getpw*() функции (getpwuid(), getpwnam(), getpwent()) получить информацию об учетной записи пользователя, эквивалентную тому, что находится в /etc/passwd плюс все, что дополняет ваша система. Предположительно оба getent командование и bash Используйте этот механизм для получения соответствующей информации.

Другие вопросы по тегам