Tim*_*nst 30 osx permissions directory files mv
尽管目录所有者设置为我的用户并且用户权限设置为 7 Music
,mv
但我在尝试移动文件夹时获得权限被拒绝。这是怎么回事?
(我知道我可以使用 sudo 但我想找出问题所在。这里有些东西闻起来很腥)。Ps:我在 Mac OS X El Capitan 上。
小智 52
我使用的是适用于 Linux 的 Windows 子系统。我在不同的 bash 实例中打开了该目录。关闭它让我移动目录。
Kon*_*rak 26
做笔记,在文件夹的时候a
,移动b
到c
的文件夹权限a
决定你能做什么。
在这种情况下,权限.
将是最重要的。
请注意,权限比简单的更复杂rwx
。您的music
文件夹@
末尾.
有一个,文件夹末尾有一个+
。
xattr -h
以确定@符号的复杂权限。getfacl
来确定ACL的+符号。Tim*_*nst 12
似乎在该目录深处的某处至少有 1 个文件没有正确的权限。
所以,我所做的是:
sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music
Run Code Online (Sandbox Code Playgroud)
现在它起作用了。
这里的问题可能与 Music 文件夹的访问控制列表 (ACL) 有关。ACL 是一个单独的权限系统,与通常由ls -l
. Home 文件夹和其他地方的一些其他目录也有 ACL。
要查看主目录中的 ACL,请使用:
/bin/ls -le ~
Run Code Online (Sandbox Code Playgroud)
您可能会看到类似0: group:everyone deny delete
Music 目录的规则。正如您所指出的,您可以使用sudo
. 如果您不想(或不能)这样做,那么您还有其他选择,因为您是文件的所有者。您可以根据其索引(在我上面给出的示例中为 0),从 Music 目录的 ACL 中删除有问题的条目:
/bin/chmod -a# 0 Music
Run Code Online (Sandbox Code Playgroud)
或者您可以删除 ACL 中的所有条目:
/bin/chmod -N Music
Run Code Online (Sandbox Code Playgroud)
现在您可以移动目录(取决于常规 POSIX 权限)。如果要在移动后放回 ACL,可以使用:
/bin/chmod +a "group:everyone deny delete" Music_tmp
Run Code Online (Sandbox Code Playgroud)
并/bin/ls -le
再次使用以确认 ACL 是否符合您的要求。查看 ACL 示例以man chmod
获取更多信息。特别是,这个介绍很有帮助:
每个文件都有一个 ACL,其中包含一个有序的条目列表。每个条目都引用一个用户或组,并授予或拒绝一组权限。在用户和组存在同名的情况下,用户/组名称可以以“user:”或“group:”为前缀,以指定名称的类型。
我不认为手册页解释了有关排序的规则,但此页面清楚地解释了 ACL 的顺序规则。特别是,显式deny
规则将在显式allow
规则之前应用。因此,只要该group:everyone deny delete
条目就位,就不可能通过allow
规则授予您的用户删除权限。这是因为该everyone
组(包括您)的权限被拒绝,并且将首先应用该规则。