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


11

我必须使用来更改文件/目录的所有权chmod。我只知道所有者的用户名,但想同时更改默认组名。在此阶段,群组名称尚未确定,因此我要输入用户名

chown -R username:username path_to_dir

命令可能会针对不同的系统/用户运行,所以我担心的是,Linux总是会有一对username(user):username(group)或在某些时候此默认的group_name可能会出错。

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

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

但是对于知识我想知道。到目前为止,/etc/passwd /etc/groups除少数用户(例如“ shutdown,halt,sync,opeartor”)外,所有用户都已在组中列出了analysys 。

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


3
在第二个示例中,您是否在寻找id -g username
user1686

1
或者id -gn username打印名称而不是ID。
Cristian Ciupitu 2014年

在Linux中,还有很多“设备组”-例如。磁盘,mem,kmem,音频,视频等-没有相应的用户。
巴德·科珀罗德

Answers:


20

无法保证groupname = username将存在。

最常见的情况是,Linux上使用的系统管理员正在系统上本地创建新用户,而没有为组指定明确的规范,这意味着默认情况下将以与用户名相同的方式创建组,并将该用户分配给具有默认GID属于新创建的组。

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

因此,您不应该依赖username = groupname的事实


它可能不仅取决于本地管理策略,而且取决于各种发行版附带的工具。许多站点只接受提供的工具使用的默认设置。尽管我多年来使用的大多数发行版均附带一个useradd脚本,该脚本默认情况下会创建一个具有相同名称的组,但并非所有人都有。上一次我使用它(很多年前)时,slackware的用户创建脚本默认为只有一个组users,所有用户均成为该组的成员。 docs.slackware.com/slackbook:users认为情况可能仍然如此。
2014年

11

尽管用户私有组习惯用法经常在现代Linux系统中使用,但* nix实际上并不需要为每个用户提供唯一的主组,并且多个用户帐户很有可能共享一个通用主组,例如usersstaff

即使在实施UPG习惯用法的情况下,也没有特殊的理由使特定UPG的数字GID应该等于所有者的UID,尽管大多数帐户创建工具会尝试按顺序分配UID和GID(如果可用。如果需要使用户和/或组在多个系统之间保持一致(例如,以容纳先前存在的NFS共享),则ID可能很容易失调。


6

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

因此,简短的答案是:不,UID并不总是等于GID。仍然/etc/passwd在同一行上同时包含默认组的UID和GID,因此提取它们相当容易。


“默认情况下,普通用户的UID和GID是相等的”-实际上,只有在“在某些流行的Linux发行版中添加”时,此语句才是正确的。是的,Ubuntu等。这样做,但我认为普通的“用户”组更多是默认的。
jstarek 2014年

是的,如果我们的目标是100%精确,那么您是对的。我们可能需要添加十几个各种“ if”,以确保不会遗漏单个异常。我所有基于Debian的发行版(LMDE,Crunchbang,纯Debian)的行为都与此相同,我也有一个CentOS 6.5。请注意,由于不需要添加大量的用户(我倾向于使用adduser而不是)useradd,默认/etc/adduser.conf设置USERGROUPS=yes为每个新用户创建一个组。这些组通常(并非总是如此)具有与为其创建用户的UID相同的GID。
Erathiel

2

这个链接,我看到下面的信息。

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

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

cat /etc/passwd

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

编辑

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

仅当没有单独添加任何普通组并且在任何用户创建时都未明确指定任何组时,该语句才为true。默认情况下,下一个添加的用户=的gid max(gid) + 1。在某些情况下,任何* NIX系统所需的UID和GID之间都没有关联。

更多参考

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


最后的陈述是完全错误的。仅当在本地系统上创建新用户并且未将GID显式分配给现有组时,才使用UID = GID。
卡森2014年

不,这不是完全错误的,因为它清楚地表明“默认”。一些澄清将不胜感激。
Erathiel

1
@Erathiel默认情况下,GID等于创建用户时分配的GID。如果在本地创建用户并且未在程序-guseradd的标志中指定GID,则会为您创建一个组,除非发生GID移位,否则它将= UID。但是,如果创建方法未知,则不能依靠事实:uid=123456(ME) gid=777(ABC) groups=777(ABC)
Karlson 2014年

在某些系统上,useradd还会为该帐户创建一个具有相同名称的组。取决于Linux的风格。
皮特

@Karlson,我从未提及过它将永远平等。明确指定默认情况下,它等于所有普通用户的UID
拉梅什2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.