当文件所有者属于多个组时,如何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
)-这是基于什么?我是这两个团体的成员。
当文件所有者属于多个组时,如何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
)-这是基于什么?我是这两个团体的成员。
我认为这个问题源于对团体如何运作的误解。列出
ls -l
的组不是用户可能所在的组,而是文件所属的组。每个文件都归一个用户和一个组所有。通常,此用户在组中,但这不是必需的。例如,我的用户属于以下组:但不在,比如说,组
cups
中。现在,让我们创建一个文件。这归用户所有
sparhawk
,也是我的主要组,也称为sparhawk
. 现在让我们更改文件的组所有者。您可以看到现在拥有该文件的组不是我所在的组。
这个概念允许精确操纵文件权限。例如,您可以创建一个包含成员 X、Y 和 Z 的组,并在三人之间共享文件。您可以进一步授予 X 写入权限,但只授予其他人(组)读取权限。
在传统权限中,一个文件将属于一个组,无论用户属于多少组。
创建文件时 组设置为用户的主要组。然后,用户可以将其移动到他们的任何组中。
如果您有 ACL(Posix ACL,可能与 MacOS 上的 ACL 不同)
那么可以有多个组。但是 ls 只显示第一组,模式显示组掩码。(这可能会造成混淆。如果它显示组名的 ACL 会更好)。
用户不能将第一个组更改为他们不是其成员的任何组。但是他们可以添加辅助组和用户权限(对于任何组或用户)。
您不需要 root (sudo) 权限来执行任何这些操作。