我无法删除具有群组成员写权限的文件


12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

缺什么?

Answers:


22

删除文件意味着您要更改文件所在的目录,而不是文件本身。您的组需要目录上的rw才能删除文件。文件的权限仅用于更改文件本身。

乍一看,在您考虑文件系统的工作方式之前,这可能会引起混淆。文件只是一个索引节点,目录指向索引节点。通过删除它,您只是在目录中删除对该文件的inode的引用。因此,您要更改目录,而不是文件。您可以在另一个目录中具有指向该文件的硬链接,并且仍然可以从第一个目录中删除该文件而无需实际更改文件本身,该文件仍将存在于另一个目录中。


我得到775 drwxrwxr-x目录。
tshepang

1
该目录的组所有权是什么?请记住,您提到的第二个7是目录的组具有的权限,而不是用户的组。
jsbillings

1
ls -ld /path/to/directory或者只是ls -ld .如果您已经CD到该目录。
jsbillings

1
无论出于何种原因,stat都无法查找组ID1002。stat会在/ etc / group,NIS,LDAP等中查找组ID,并且出现错误,这就是为什么看到UNKNOWN的原因。我会尝试运行getent group 1002以查看是否为您带来了更详细的错误。
jsbillings

1
实际上,我完全没有发现这种行为令人困惑。它与实际的“真实”目录的工作方式相同,这就是为什么它被称为 “目录”的原因,而不是例如“文件夹”的原因,后者的行为会大不相同。如果要从电话目录中删除某人,则不要去她的房子杀死她,我只需拿一支笔并敲打她的电话号码即可。IOW:我需要对该目录具有写权限,而无需访问她。Windows有文件夹,Unix有目录,它们的行为都像现实中的一样。仅当您混淆它们时,才会发生混乱。
约尔格W¯¯米塔格

0

只有系统可以删除文件,并且只有在没有引用的情况下才可以删除。单纯的用户只能取消链接文件,即,将其从目录中删除。您需要对目录的写访问权才能取消链接文件。取消链接文件不会修改文件,因此对该文件的写访问权限无关紧要。

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.