![将文件访问权限更改为只读,但我仍然可以写入该文件。为什么?](https://linux22.com/image/32791/%E5%B0%86%E6%96%87%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E6%9B%B4%E6%94%B9%E4%B8%BA%E5%8F%AA%E8%AF%BB%EF%BC%8C%E4%BD%86%E6%88%91%E4%BB%8D%E7%84%B6%E5%8F%AF%E4%BB%A5%E5%86%99%E5%85%A5%E8%AF%A5%E6%96%87%E4%BB%B6%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在运行一个使用 buildroot 构建的小型嵌入式系统。当我尝试在目标设备上设置文件权限时,我遇到了这种奇怪的行为。为了说明让我困惑的地方,我尝试了以下更简单的示例
# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish
# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish
我对此感到非常困惑。如何将文件和目录设置为只读,但仍然可以修改该文件的内容?我在同一目录中有一个可执行文件,当我尝试执行它时,我得到了这个
# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied
其行为正如我所期望的那样。显然,我对文件访问模型在 Linux 上的工作原理存在一些根本性的误解。谁能解释为什么我能够写入我设置为只读的文件?
答案1
正如您似乎正在这样做,root
这说明您有权在目录中写入。root
也可以附加到文件,即使它的权限是-r--r--r--
.
这
echo "new-rubbish" > tmp.txt
确实截断文件(正如 JoelDavis 指出的那样),因此它不会删除它并再次写入(使用时bash
)。