我试图使用unlink()来预测哪些文件可以删除。
到目前为止,我的理解是该文件必须可写入其他人,或者与执行程序具有相同的组ID或所有者ID。
还有其他案件吗?我试图解释我的程序如何删除这些文件(该程序不是以root用户身份运行,也不是以admin用户身份运行)。
drwxrwxr-x 4 root admin 136 Apr 17 23:53 .
drwxrwxr-x 7 root admin 238 Jan 27 11:49 ..
-rwxrwxr-x 1 root admin 560 Jan 27 11:49 info.nib
-rwxrwxr-x 1 root admin 18399 Jan 27 11:49 keyedobjects.nib
谢谢!
答案 0 :(得分:3)
实际上,重要的是目录的权限!
答案 1 :(得分:1)
还有一种情况是,另一个进程仍然有要删除的文件,打开了。来自unlink
EBUSY
文件路径名无法取消链接,因为正在使用它 系统或其他过程;例如,它是一个挂载点或 NFS客户端软件创建它以表示活动但是否则 无名的inode(“NFS傻瓜重命名”)。
另请注意,进程的有效UID应具有对包含要取消链接的文件路径的目录的写访问权。
答案 2 :(得分:1)
正如其他人所提到的,目录必须是有效用户可写的。但是,该文件可以具有应用于它的扩展权限(ACL),以防止其被删除。从你展示的例子中,我认为你正在使用Mac OS,对吧?在那里,您可以使用ls -le
来显示ACL。 chmod(1) manpage会告诉您各种权限。如果要在程序中查询ACL,则应该首先阅读acl(3) manpage。
答案 3 :(得分:0)
它所在的目录应该有+w