当我尝试模拟Linux下的权限系统时,出现了一些奇怪的事情。
我由用户'normal'创建了一个目录'main',并使用root创建了权限为700的目录'aha'。
所以 'main' 的所有者是 'normal',如果权限是 755,我可以使用 'normal' 用户删除 'aha',尽管它的所有者是 root。
但是当我将文件放入“啊哈”时,一切都改变了。我无法删除“啊哈”,因为其中还有一个文件。
所以,我的问题是,既然 'aha' 是 700,'normal' 如何知道它是否为空?
我的进一步问题是:目录的读取权限究竟意味着什么?
最佳答案
将 UNIX 目录想象成图书馆目录中索引卡的抽屉。
为了知道里面有哪些书,您需要获得“抽屉”的阅读权限。为了创建或删除新的“书”,您需要写入权限(这使您能够放置新卡片或从抽屉中删除现有卡片)。为了将目录“遍历”到较低级别的“子抽屉”,您需要抽屉本身的执行权限。
如果您已经知道/foo/bar/baz 这本书存在,则不需要对 /
、/foo
或 /foo/的读取权限bar
,但您确实需要所有这些的执行权限。
同一本书可以被同一个或不同“抽屉”(即硬链接(hard link))中的多个“卡片”引用。
“卡片”可以引用另一张卡片(即符号链接(symbolic link))。符号链接(symbolic link)可能会变得“悬空”(如果另一张卡片被移除)。
当一本书没有被任何抽屉中的任何卡片引用时,它就会从图书馆“消失”。
since 'aha' is 700 by root, how can 'normal' know it's empty or not
好吧,一种方法是尝试将其删除。如果你成功了,它一定是空的。如果它不是空的,“normal”就再也找不到了,因为“normal”无法读取目录,因此无法找到那个“抽屉”中有多少张卡片,或者它们叫什么.
更新:
why do you need execute permissions to traverse a directory.
因为那是目录的可执行位的定义。由于您不能合理地执行一个目录,否则就会浪费那一点。不,.
和 ..
文件与执行位无关。
关于linux - 知道目录是否为空的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632588/