Откуда берется список пользователей, возвращаемых после завершения 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
Используйте этот механизм для получения соответствующей информации.