对于目录,一些参考资料说:
- r:我们可以列出目录内容
- w:我们可以在目录上写入
- x:我们可以切换到目录(cd 进入目录)。
但在我的测试中我遇到了以下情况:
- 我的用户马特乌斯适用于他人许可。
- x 是目录
仅在r
他人许可的情况下 ( chmod 704
):
如果我在目录中发出 ls -l ,我会得到这个疯狂的输出:
mateus@engsrv:/tmp$ ls -l x/
ls: cannot access 'x/file_teste': Permission denied
total 0
-????????? ? ? ? ? ? file_teste
mateus@engsrv:/tmp$
我也无法“cat”该文件。
mateus@engsrv:/tmp$ cat x/haha
cat: x/haha: Permission denied
好吧,让我们看看只有在w
其他人允许的情况下会发生什么(chmod 702
)
mateus@engsrv:/tmp$ touch x/file_test2
touch: cannot touch 'x/file_test2': Permission denied
mateus@engsrv:/tmp$
如果我授予执行(chmod 703
),我可以写入该文件夹:
mateus@engsrv:/tmp$ touch x/file_test2
读取权限也会发生同样的情况(chmod 705)
:
mateus@engsrv:/tmp$ ls -l x
total 4
-rw-rw-r-- 1 mateus mateus 0 Oct 3 17:45 file_test2
-rw-r--r-- 1 root root 3 Oct 3 17:31 file_teste
那么,执行 (x) 总是必要的吗?但为什么?后台还有什么需要执行权限的吗?
答案1
在文件夹中创建(写入)文件时需要进入(执行)文件夹。因为 OS/shell 正在移动到该文件夹中以创建文件。更改文件夹正在执行它(不是直接执行)。
解决这个问题的一个好观点是,当您将文件夹视为文件(在 Linux 系统中)时 - 它与文件相同,但执行它时您将位置更改为文件夹内部而不是运行(例如脚本、程序)它。
但是:您可以更改文件夹名称,即使它没有写入权限(写入用于文件夹内部 - 创建文件)。没有执行权限,您无法进入文件夹。如果您可以执行文件夹,那么您可以根据权限只读或稍后在其中写入。
编辑:它是这样设计的。
答案2
这只是因为。
当您更改目录时,您不会在后台执行任何操作。执行一个目录并没有真正的意义,所以它可以自由地以任何方式解释。就这样决定了。不是因为执行了任何代码。 sys_chdir 系统调用检查权限但不执行任何操作。