我与 Linux 服务器上的同事共享文件,他添加了一些新文件。现在我们已将文件移到其他地方,因此我想删除旧文件。但是,当我的同事添加他的文件时,我们使用的软件创建了由他的帐户拥有的新子目录,我找不到合适的命令来删除它们。
$ ls -a
total 20
drwxrwxr-x 5 markpasc markpasc 4096 Sep 20 09:48 ./
drwxrwxr-x 3 markpasc markpasc 4096 Sep 20 09:48 ../
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 82/
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 c4/
我试过:
$ rm -rf 82
rm: cannot remove `82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rm -f 82/b7fc78bc548537f3ea235026b7322fe3bea91f
rm: cannot remove `82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rmdir 82/
rmdir: 82/: Directory not empty
$
我知道通常我可以删除文件其他人拥有我的目录:
$ ls -a
total 8
drwxrwxr-x 2 markpasc markpasc 4096 Sep 20 10:13 ./
drwxr-xr-x 24 markpasc markpasc 4096 Sep 20 10:13 ../
-rw-rw-r-- 1 someuser someuser 0 Sep 20 10:13 file
$ rm file
rm: remove write-protected regular empty file `file'? y
$ ls file
ls: file: No such file or directory
$
有没有办法自己删除这些目录,或者是否必须由我的同事(或 root)删除它们?
答案1
要删除目录,您需要做两件事:对父目录的写访问权限,以及该目录为空。因此您的同事或 root 必须配合。这是 unix 权限模型的限制。
当目录树可由多个用户写入时,为了获得更好的工作流程,您可以使用访问控制列表(如果支持)或 setgid 目录。
使用 ACL,将目录的写权限授予任何应该拥有该权限的人,并将默认 ACL 设置为也授予写权限,以便新创建的文件和子目录将继承所需的权限。用户可以覆盖这些默认值,但只要他们被动配合,权限就没问题。
setfacl -m user:coworker:rwx . setfacl -d -m user:coworker:rwx .
如果您没有 ACL,您可以授予某个组写入权限,并在目录上设置 setgid 位。这样,新创建的文件和子目录将属于该组,而不是创建过程的默认组。但是,授予新文件和目录的组写入权限仍由用户决定(只有当他们拥有 时,才会自动发生这种情况
umask 002
)。chgrp mygroup . chmod g+ws .
你可能感兴趣这个帖子讨论了为什么事情会这样运作。