尽管目录权限正确,为什么在使用mv时为什么我的权限被拒绝?


14

尽管将目录所有者设置为我的用户并将用户权限设置为7 Musicmv但尝试通过移动文件夹时却获得了拒绝权限。这是怎么回事?

(我知道我可以使用sudo,但我想找出问题所在。这里有些腥味。)附言:我在Mac OS X El Capitan上。

终端截图


1
任何人都遇到相同的错误,可能是因为您要尝试打开一个文件。不过不是OP案例,只是说这样可能有所帮助。
aderchox

Answers:


21

请注意,在文件夹中a,移至bc,文件夹权限a确定您可以做什么。

在这种情况下,上的权限.将是最重要的。

请注意,权限比简单更复杂rwx。您的music文件夹@的末尾.有一个,文件夹+的末尾有一个。

  • 使用xattr -h以确定@符号的复杂权限。
  • 使用getfacl来确定ACL的+符号。

所谓的资源是否包含“复杂权限”?
user1717828 2015年

man xattr可能是一个很好的起点。
Konerak 2015年

1
不,没有手动输入。我可以在Google周围找到另一个名称:扩展属性,如果其他人想了解更多信息。
user1717828 2015年

4
或使用ls -la@e。最有可能在这里,有一个deny deleteACL也阻止了重命名。
斯特凡Chazelas

1
@Timo,这些ACL确实会阻止删除或重命名这些目录。据推测,它们之所以被放在那里是有原因的,就像某些应用程序依赖它们在其中,否则会失败。
斯特凡Chazelas

19

我使用的是Windows Subsystem for Linux。我在另一个bash实例中打开了目录。关闭它可以让我移动目录。


4
在WSL上带有远程功能的VS Code中,我不得不关闭编辑器,并在该VS Code项目之外为WSL打开一个终端。
比约恩

9

好像在该目录中某个位置的深处至少有一个文件没有正确的权限。

因此,我所做的是:

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

现在可以了。


17
无论是什么问题,授予音乐文件执行权限都不是解决方案。
斯特凡Chazelas

3
它似乎是不可能的物体一个目录可以与你重命名该目录的能力。
斯科特

我知道这很奇怪,但是成功了。在目录本身上使用chmod和chown无效。
Timo

是否有可能chmod 755删除了Music文件夹上的特殊“ @”权限?
HorusKol 2015年

@HorusKol或chown。OP的症状将与具有拒绝删除 ACL 的目录匹配,但是至少在优胜美地上,执行chown或chmod 755不会删除该ACL。您需chmod -a 'everyone deny delete' Music要这样做。埃尔卡皮坦的情况可能有所不同。
斯特凡Chazelas

4

这里的问题可能与Music文件夹的访问控制列表(ACL)有关。ACL是通常由列出的常规POSIX的独立许可系统ls -l。主文件夹和其他目录中的某些其他目录也具有ACL。

要查看主目录中的ACL,请使用:

/bin/ls -le ~

您可能会看到类似0: group:everyone deny delete“音乐”目录的规则。如您所述,您可以使用解决问题sudo。如果您不想这样做(或不能这样做),则可以选择其他方法,因为您是文件的所有者。您可以根据音乐目录的ACL索引(在我上面给出的示例中为0)从音乐目录的ACL中删除有问题的条目:

/bin/chmod -a# 0 Music

或者,您可以剥离ACL中的所有条目:

/bin/chmod -N Music

现在,您可以移动目录(受常规POSIX权限的限制)。如果要在移动后放回ACL,可以使用:

/bin/chmod +a "group:everyone deny delete" Music_tmp

/bin/ls -le再次使用以确认ACL是否符合您的要求。请参阅中的ACL示例以man chmod获取更多信息。特别地,此介绍很有帮助:

每个文件都有一个ACL,其中包含一个有序的条目列表。每个条目均指一个用户或组,并授予或拒绝一组权限。如果用户和组名称相同,则用户/组名称可以以“ user:”或“ group:”为前缀,以指定名称的类型。

ACL订单

我不认为该手册页解释了有关订购的规则,但是此页清楚地解释了ACL的订购规则。特别是,显式deny规则将在显式allow规则之前应用。因此,只要group:everyone deny delete条目到位,就不可能授予用户使用allow规则删除的权限。这是因为拒绝everyone包括您在内的组的权限,并且该规则将首先应用。


2
我不知道为什么这被否决了。everyone deny deletemacOS默认主目录上的ACL条目是无法移动或删除目录的实际原因。(也请注意,操作系统可能随时重新创建它们。)
Diti

1
这个答案震惊了!!!这些新的ACL真是太棒了。
迪恩·希勒

3

当一组程序正在我要删除的目录中运行时,我遇到了这个问题。为了移动目录,我必须首先杀死该目录中所有正在运行的程序。

在以下命令中,请谨慎选择程序名称。我使用了以下命令,以供参考:

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

通用程序为:

  1. 杀死从相关目录运行的所有程序
  2. 尝试重命名目录
  3. 如果失败,则强制杀死(kill -9非常小心)目录中的所有程序
  4. 尝试重命名目录
  5. 如果失败,请查看该程序是否再次运行,即它已由从其他目录运行的某些守护程序重新启动
  6. 强制终止重新启动烦人程序的守护程序
  7. 强制杀死烦人的程序
  8. 重命名目录
  9. 利润

1
我认为OP可能没有从〜/ Music目录运行的任何程序。无论如何,他说他不想使用sudo,而这个答案确实可以。
向上旋转

我只是说我有这种情况。可能对某人有所帮助,即使它对OP毫无帮助。
WattsInABox

当然,这可能对某人有帮助-这就是为什么我没有投票。但是我认为StackExchange的目的是发布的答案实际上可以回答所提出的问题。

1
另一个潜在的问题,如果您希望这个答案对于新手来说是普遍使用的:您不会在第一次选择grep并仔细检查搜索字词时提供任何警告。无论您要投入的是什么,grep都将从所有正在运行的程序的池中进行选择,并且kill具有root特权...
Spinup

1
不错,@ Watts,我认为这是一个很大的进步
向上滚动

0

当其中一个文件被写保护时,也会发生这种情况。今天,我遇到了极端情况,当时access.log它已被Apache禁止写保护,而Apache已经停止了。我只是删除了此文件,所以进一步可以移动父目录。

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.