我理解第一个例子:
> mkdir foo
> chmod u-w foo
> touch foo/test
touch: cannot touch `foo/test': Permission denied
> echo "BAD" >> foo/test
bash: foo/test: Permission denied
这是有道理的:我没有该目录的写入权限,因此我不应该能够写入任何更改。我无法触摸或创建可以附加的文件。然而为什么这会起作用呢?
> mkdir bar
> touch bar/test
> chmod u-w bar
> echo "BAD" >> bar/test
> cat bar/test
BAD
答案1
您对该目录没有写权限。这意味着您无法修改该目录。在目录中创建或删除文件(包括创建或删除文件,以及将文件移入或移出目录)会修改目录。如果您修改目录内的文件(通过追加或覆盖它),则不会修改目录本身。
只要您拥有该文件,您就可以修改文件的元数据(日期、权限等),而不管目录和文件的权限如何。您甚至可以通过读取文件来间接修改文件的访问时间,即使读取是您对该文件拥有的唯一权限。对文件元数据的访问不受权限控制。
目录上与修改其中文件相关的唯一权限是执行权限。它控制您是否可以访问该文件。 (目录的读权限控制是否可以列出该目录的文件;读但不可执行,可以看到文件名,但不能访问文件;执行但不可读,可以访问目录中的文件,但只能访问如果您知道他们的名字。)只要您可以访问该文件,目录的权限就不再重要。
如果要将整个目录树设置为只读,则不能仅通过更改目录的权限来实现,必须更改每个文件的权限。或者,创建只读视图。