4
POSIX兼容的方法来获取与用户ID关联的用户名
我经常想获取与用户ID相关联的登录名,并且由于事实证明这是一种常见用例,因此我决定编写一个Shell函数来完成此操作。当我主要使用GNU / Linux发行版时,我尝试编写脚本以使其尽可能具有可移植性,并检查我在做什么与POSIX兼容。 解析 /etc/passwd 我尝试的第一种方法是解析/etc/passwd(使用awk)。 awk -v uid="$uid" -F: '$3 == uid {print $1}' /etc/passwd 但是,这种方法的问题在于登录名可能不是本地的,例如,用户身份验证可以通过NIS或LDAP进行。 使用getent命令 使用getent passwd比解析更具可移植性,/etc/passwd因为它还会查询非本地NIS或LDAP数据库。 getent-维基百科 getent(1)-Linux手册页 getent passwd "$uid" | cut -d: -f1 不幸的是,该getent实用程序似乎未由POSIX指定。 使用id命令 id 是POSIX标准化的实用程序,用于获取有关用户身份的数据。 BSD和GNU实现接受用户ID作为操作数: id(1)-OpenBSD手册页 id(1)– FreeBSD手册页 GNU Coreutils:id调用 这意味着它可用于打印与用户ID关联的登录名: id -nu "$uid" 但是,未在POSIX中指定提供用户ID作为操作数。它仅描述使用登录名作为操作数。 结合以上所有 我考虑过将以上三种方法合并为以下内容: get_username(){ uid="$1" # First …