我必须使用 . 更改文件/目录的所有权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 实际上并不要求每个用户都有一个唯一的主组,并且多个用户帐户很可能共享一个公共主组,例如users
或staff
。
即使在强制执行 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