您何时有权使用 unlink()

When do you have permission to use unlink()?

本文关键字:unlink 何时      更新时间:2023-10-16

我试图使用 unlink() 预测我可以删除哪些文件。

到目前为止,我的理解是该文件必须可写入其他人,或者与执行程序具有相同的组 ID 或所有者 ID。

还有其他情况吗?我正在尝试解释我的程序如何删除这些文件(该程序既未以 root 身份运行,也不在管理员组中运行)。

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

谢谢!

实际上,重要的是目录的权限!

正如其他人所提到的,目录必须可由有效用户写入。但是,该文件可以应用扩展权限 (ACL),以防止其被删除。从您展示的示例来看,我认为您使用的是Mac OS,对吗?在那里,您可以使用ls -le来显示 ACL。chmod(1) 手册页会告诉你各种权限。如果你想在程序中查询 ACL, 你应该从阅读 acl(3) 手册页开始。

另一种情况是另一个进程仍然打开了您要删除的文件。从unlink的手册页

电子繁忙

无法取消链接文件路径名,因为它正由 系统或其他进程;例如,它是一个挂载点或 NFS 客户端软件创建它以表示活动但除此之外 无名索引节点("NFS 愚蠢地重命名")。

另请注意,进程的有效 UID 应该对包含要取消链接的文件路径的目录具有写入访问权限。

它所在的目录应该有+w