当文件所有者属于多个组时,如何ls -l
决定显示哪个组?例如,在 MacOS 上,我看到
drwx------+ 48 flow2k staff 1536 Feb 5 10:11 Documents
drwxr-xr-x+ 958 flow2k _lpoperator 30656 Feb 22 16:07 Downloads
这里两个目录显示的组是不同的(staff
和_lpoperator
) - 这是基于什么?我是这两个群体的成员。
答案1
我认为这个问题源于对团体如何运作的误解。列出的组ls -l
不是用户可能属于,但该组文件属于.每个文件都由一个用户和一个组拥有。通常,该用户位于该组中,但这不是必需的。例如,我的用户属于以下组:
$ groups
audio uucp sparhawk plugdev
但不是在团体中cups
。现在,让我们创建一个文件。
$ touch foo
$ ls -l foo
-rw-r--r-- 1 sparhawk sparhawk 0 Feb 23 21:01 foo
这是由用户拥有的sparhawk
,也是我的主要组,也称为sparhawk
。现在让我们更改文件的组所有者。
$ sudo chown sparhawk:cups foo
changed ownership of 'foo' from sparhawk:sparhawk to sparhawk:cups
$ ls -l foo
-rw-r--r-- 1 sparhawk cups 0 Feb 23 21:01 foo
您可以看到现在拥有该文件的组不是我所在的组。
这个概念允许精确操作文件权限。例如,您可以创建一个包含成员 X、Y 和 Z 的组,并在三人之间共享文件。您可以进一步授予 X 写入权限,但只授予其他人(组)读取权限。
答案2
在传统权限中,无论用户属于多少个组,文件都将属于一个组。
创建文件时 组被设置为用户的主要组。然后,用户可以将其移动到他们的任何组。
如果您有 ACL(Posix ACL,可能与 MacOS 上的 ACL 不同)
那么可以有多个组。然而 ls 只显示第一组,而 mode 显示组掩码。 (这可能会令人困惑。如果显示组名称的 ACL 会更好)。
用户无法将第一个组更改为他们不属于的任何组。但他们可以添加辅助组和用户权限(对于任何组或用户)。
您不需要 root (sudo) 权限即可执行此操作。