Picard Asked: 2019-12-12 04:17:10 +0800 CST2019-12-12 04:17:10 +0800 CST 2019-12-12 04:17:10 +0800 CST 进程的 uid 不在 /etc/passwd 中 772 我正在构建一个玩具系统监视器,我从中解析多个文件/proc。在其他值中,我uid从/proc/$pid/status. 后来我将进程的 uid 映射到我从中解析的用户名/etc/passwd。但在极少数情况下,我的程序会崩溃,因为它找不到用户名。我是否还需要解析其他文件才能获得完整的 uid -> 用户名映射? linux username 1 个回答 Voted Best Answer user1686 2019-12-12T04:21:56+08:002019-12-12T04:21:56+08:00 Linux 支持模块化帐户数据库。除了“文件”数据库(/etc/passwd)之外,用户帐户还可以存储在 SSSD、BDB、网络数据库(LDAP、YP、NIS、Hesiod、Active Directory、SQL)中,甚至可以是由数据库模块本身动态生成(systemd DynamicUsers)。 为了使这项工作,您永远不应该直接解析 /etc/passwd 和其他文件(好吧,除非您专门制作本地用户管理工具)。 您应该使用 libc 提供的函数,例如getpwuid()或getgrgid()来查找用户名和 UID,并从 shellscripts 中使用getent或idCLI 工具来执行查找。 一般来说,如果映射失败,您也不应该崩溃,因为帐户可能已被删除,或者进程属于具有自己的 UID 范围的容器。发生这种情况时只需显示 UID。
Linux 支持模块化帐户数据库。除了“文件”数据库(/etc/passwd)之外,用户帐户还可以存储在 SSSD、BDB、网络数据库(LDAP、YP、NIS、Hesiod、Active Directory、SQL)中,甚至可以是由数据库模块本身动态生成(systemd DynamicUsers)。
为了使这项工作,您永远不应该直接解析 /etc/passwd 和其他文件(好吧,除非您专门制作本地用户管理工具)。
您应该使用 libc 提供的函数,例如getpwuid()或getgrgid()来查找用户名和 UID,并从 shellscripts 中使用
getent
或id
CLI 工具来执行查找。一般来说,如果映射失败,您也不应该崩溃,因为帐户可能已被删除,或者进程属于具有自己的 UID 范围的容器。发生这种情况时只需显示 UID。