【问题标题】:c program: Why does remove() delete a file with no write permissionsc程序:为什么remove()会删除没有写权限的文件
【发布时间】:2017-02-04 10:54:00
【问题描述】:

我已经使用 GNU/Linux 超过 10 年了,所以我认为自己对文件权限非常熟悉。

为了测试以下代码,我在“undo_path”上使用了“chmod -w”。然后我使用 ls -al 验证了该文件没有写权限。它显示:

-r--r--r-- 1 andy andy 52 Sep 26 18:17 lastrmw

然后我尝试了代码。两次。两次 remove() 语句都是成功的。

if (remove (undo_path))
{
  fprintf (stderr, "Warning: failed to remove %s\n", undo_path);
  perror (__func__);
}

没有写权限的文件怎么删除?

我正在使用 Debian 8/Jessie 和我的内核:Linux oceanus 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux

【问题讨论】:

  • 文件权限与文件的内容有关。
  • 但是再想一想:是否有其他类型的文件,其文件名本身就是内容的一部分?
  • 谢谢,@KerrekSB,我看到当我在文件上使用 rm 时,我只会在删除之前收到删除它的提示。有趣的是我以前从未意识到这一点。
  • '这只是rm 的礼貌,完全由其自行决定。您可以使用 -f 禁用它。
  • 我知道 -f,谢谢。通常我只在 rm'ing 目录时使用它。 :) 好吧,现在我知道了。

标签: c linux file-permissions chmod


【解决方案1】:

remove 函数是对目录的操作,可从中删除条目。它确实删除文件,除非它碰巧产生文件系统自动删除文件的条件。例如,如果同一个文件有两个对应的目录条目,或者被进程打开,则不会被删除。

【讨论】:

    【解决方案2】:

    remove() 适用于目录,因此仅当您没有文件夹而不是文件的写入权限时,它才会起作用。

    【讨论】:

      【解决方案3】:

      删除文件意味着删除目录条目。删除(以及创建)目录条目会影响磁盘上包含目录的块,而被删除的文件使用的块不受影响。事实上,当有多个对文件的引用(硬链接)时,甚至可能不会释放文件块。所以它包含被检查的目录的写权限,而不是文件的。

      【讨论】:

        猜你喜欢
        • 2015-05-18
        • 2011-01-11
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 2015-06-24
        • 1970-01-01
        相关资源
        最近更新 更多