如何r目录权限应该在Linux上工作?

我创build的目录创build了这些权限 – 其他用户拥有

drwxr – r– 5用户用户4096 2012-09-15 19:30网站

当做一个ls -l作为另一个用户的目录时

ls -l / home / user / sites

这是目录输出。 我以为没有在该目录上设置的X位的文件名将根本不显示。

d????????? ? ? ? ? ? dev.user.com -????????? ? ? ? ? ? user.20120914_082804.sql.gz d????????? ? ? ? ? ? shared -????????? ? ? ? ? ? shared.tar.gz -????????? ? ? ? ? ? www.20120914_083256.tar.gz d????????? ? ? ? ? ? www.user.com 

这里有一些不一致吗?

x授予您实际目录的权限并访问目录中的文件, r给予您查看目录内容的权限。

如果通过提供x位并删除r位来逆转这种情况,那么用户可以打开shared.tar.gz (假设文件本身具有适当的权限),但是只有在事先知道文件名的情况下才能打开shared.tar.gz ,因为ls是无法列出目录中的文件。

这种权限的解释可以追溯到早期的Unix文件系统。 一开始只有文件。 (那么,设备,pipe道,…但我想在这里讲一个故事,不是100%严格准确的;此外,它对设备,pipe道和其他一切都是真实的,因为一切都是文件,甚至目录)。

目录只是文件系统用来保存描述目录树的元数据及其包含的文件的文件。 目录中的每个文件都由一个简单的数据结构来描述,该结构包含一个文件名(最初为14个字符,IIRC)的空间以及存储数据的inode编号,文件大小,时间标记和权限字。 每个目录都以名为的两个条目开始... ,第一个指向这个目录的inode,第二个指向其父目录的inode。

权限字有九位来描述所有者,同一组的其他成员以及世界的处理。 每个标志的三位,无论相关用户是否可以读取,写入或执行文件。 (你可能会注意到,在16位权限字中有5个位是我忽略的,最终得到的是分配的意义,但是与这部分故事无关)(另外,在包括Linux在内的Unix早期的所有后代中,这些位都保持不变。)

所以,如果一个目录实际上只是一个特殊types的文件,并被某个目录中的条目所描述,那么它显然也具有权限位,而这些位可能意味着什么。 但问题是,究竟是什么。 分配含义的最简单方法是不要改变他们的意思。 而这基本上是做了什么。

所以,读取位表示用户可以读取目录本身。 通过这种方式,读者可以访问每个文件数据的文件名,时间戳,大小和inode数量。 具体来说,使用r set可以使用ls来查看目录中所有文件的名称,但是这不足以打开(或以任何方式使用)任何列出的文件。

执行位意味着用户可以“执行”目录。 由于目录是特殊的,执行真正的意思是按名字查找条目并使用它。 这意味着如果设置了x则可以尝试打开这些文件,但是如果没有r ,则无法find它们的名称。 当然,所请求的文件的权限也会影响访问,所以即使在目录上使用x也不能读取文件,除非它也为您提供了r

写位意味着用户可以写入目录,但是自然只能由文件系统本身来调用。 这意味着使用w set可以在该目录中创build新文件,或编辑现有文件的目录条目。 但是没有设置x ,你实际上不能使用任何文件,没有r你也看不到它们。

随着更复杂的用户身份模型在Unix及其后代发展,这些相同的基本描述已经成功地保持不变。

简而言之, r意味着你可以看到它的内容, x意味着你可以使用它, w意味着你可以修改它,即使是目录。