为什么我可以看到没有“读取”权限的目录?

为什么我可以看到没有“读取”权限的目录?

现在我是用户“lawrence.li”,我可以看到具有“读取”权限的目录“lijunda”

在此输入图像描述

但现在我没有“读取”权限,为什么我仍然可以看到这个目录?

在此输入图像描述

我很困惑“r”和“-”(没有读取权限)有什么区别,有人能告诉我为什么吗?非常感谢

答案1

尝试ls -l /tmp/lijunda一下,您将看到的只是名字其中的文件的—您将无法打开这些文件,甚至无法查看该目录中文件的文件大小、权限等。

这是因为目录本身只包含文件名和索引节点号-就这样。

读取访问权限文件名由读权限控制。

访问索引节点目录所指向的权限由执行权限控制,而不是读取权限。索引节点包含所有实际细节关于文件,例如文件大小、所有者、权限、上次修改时间以及包含文件内容的二进制数据的物理位置(在物理硬盘上)。

要查看名字目录中的文件—您需要对该目录的读取权限。您不需要为此执行或写入权限。

要查看细节目录中的文件即要查看 inode 内容,您需要对该目录的执行权限。目录的读取权限对于查看文件的详细信息没有影响如果您已经知道该文件的名称。

查看文件的详细信息你还不知道的名字,你需要阅读执行权限。

最后,查看内容一个文件的-你需要:

  1. 文件本身的读取权限,
  2. 对包含文件*的目录的执行权限,以及
  3. 至少其中之一: 对包含该文件的目录的读取权限或者通过其他方式了解文件的名称。

参见下面的例子。

$ whoami
vagrant
$ ls -l
total 12
drwxrwx--x 2 pete pete 4096 Dec 24 08:51 execute_only
drwxrwxr-x 2 pete pete 4096 Dec 24 08:52 read_and_execute
drwxrwxr-- 2 pete pete 4096 Dec 24 08:52 read_only
$ ls -l read_only/
ls: cannot access read_only/mysterious_file: Permission denied
total 0
-????????? ? ? ? ?            ? mysterious_file
$ cat read_only/mysterious_file 
cat: read_only/mysterious_file: Permission denied
$ ls -l execute_only/
ls: cannot open directory execute_only/: Permission denied
$ ls -l execute_only/unicorn_file
-rw-rw-r-- 1 pete pete 55 Dec 24 08:51 execute_only/unicorn_file
$ cat execute_only/unicorn_file
This file only exists for you if you know it's here ;)
$ ls -l read_and_execute/
total 4
-rw-rw-r-- 1 pete pete 83 Dec 24 08:52 jack_sparrow
$ cat read_and_execute/jack_sparrow 
"After the reading, you will be executed."
"That's *Captain* Jack Sparrow to you!"
$ 

*您还需要执行权限全部顺便说一句,父目录一直到根目录。

答案2

读权限是指读取文件内容的能力。要查看哪些文件/目录,您必须删除用户对目录本身的执行权限。当然,这意味着用户将无法再看到任何该目录中的文件/目录。

这个链接例如:

目录权限

chmod 命令还可以用于控制目录的访问权限。在大多数情况下,目录的权限方案的工作方式与文件的权限方案相同。然而,执行权限的使用方式不同。它提供对文件列表和其他内容的访问控制。

编辑:我似乎没有解释清楚这一点,因为我的意思是引用父目录(tmp)而不是lijunda目录。 @Wildcard 在回答这个问题时做得更好(也更深入)这里

相关内容