总会有一对相同的UID和GID吗?

总会有一对相同的UID和GID吗?

我必须使用 . 更改文件/目录的所有权chmod。我只知道所有者的用户名,但想同时更改默认组名称。在此阶段,组名称尚未确定,因此我将其与用户名相同:

chown -R username:username path_to_dir

命令可以为各种系统/用户运行。所以我担心的是,Linux 是否总是有一对用户名(用户):用户名(组),或者在某些时候这个默认的组名可能会出错。

虽然我已经开始从用户所属的位置查找GID

id username | tr '(=)' ':' | awk -F: '{print $3}

但对于知识我想知道。到目前为止,/etc/passwd /etc/groups除了“shutdown、halt、sync、operator”等少数用户外,所有用户都已分组列出。

编辑1: id -gn 用户名也是不错的选择

答案1

不保证 groupname =username会存在。

最常见的场景是,系统管理员在 Linux 上本地创建新用户时,没有明确指定组,这意味着默认情况下将创建与用户名相同的组,并分配用户拥有新创建组的默认 GID。

这并不意味着另一个系统管理员将遵循此过程,并且如果您将其他命名服务(如 NIS 或 LDAP)混合在一起,则分配为默认组的组可能与组名与用户名相同的新 GID 不同。

所以你不应该依赖 username=groupname 这一事实

答案2

虽然用户私人组现代 Linux 系统中经常使用这种习惯用法,*nix 实际上并不要求每个用户都有一个唯一的主组,并且多个用户帐户很可能共享一个公共主组,例如usersstaff

即使在强制执行 UPG 习惯用法的情况下,也没有特殊原因要求特定 UPG 的数字 GID 应该等于所有者的 UID,尽管大多数帐户创建工具会尝试按顺序分配 UID 和 GID(如果它们是)可用的。如果用户和/或组需要在多个系统之间保持一致(例如为了容纳预先存在的 NFS 共享),则 ID 很容易出现不一致。

答案3

正如 Ramesh 所指出的,默认情况下,普通用户的 UID 和 GID 是相同的。然而这并非总是如此因此您不能做出这样的假设,因为这可能会对您的系统造成严重破坏。将文件/文件夹权限分配给错误的组有点混乱,不是吗?

所以,简短的回答是:不,UID 并不总是等于 GID。尽管如此,/etc/passwd在同一行中包含默认组的 UID 和 GID,因此提取它们相当容易。

答案4

链接,我看到以下信息。

用户 ID (UID) 是类 Unix 操作系统分配给每个用户的唯一正整数。系统通过其 UID 来识别每个用户,并且用户名通常仅用作人类的界面。

UID 及其相应的用户名和其他用户特定信息存储在文件中/etc/passwd,可以使用 cat 命令读取该文件,如下所示:

cat /etc/passwd

第三个字段包含UID,第四个字段包含组ID(GID),默认情况下等于所有普通用户的 UID。

编辑

然而,正如 @Karlson 指出的那样,默认情况下 UID 等于 GID 是不正确的。

仅当没有单独添加普通组并且在任何用户创建中没有显式指定组时,该语句才成立。默认情况下,下一个添加的用户的 gid = max(gid) + 1。任何 *NIX 系统所需的 UID 和 GID 之间都没有关联,它们只是在某些情况下恰好重合。

更多参考

http://www.thegeekstuff.com/2009/06/useradd-adduser-newuser-how-to-create-linux-users

相关内容