知道目录是否为空的许可

时间:2011-12-26 02:22:51

标签: linux

当我尝试在Linux下模拟权限系统时,出现了一些奇怪的事情。

我通过用户'normal'创建了一个目录'main',并使用root创建了目录'aha',其权限为700。

所以'main'的所有者是'正常',如果权限是755,我可以删除'aha'只是使用'普通'用户,虽然它的所有者是root。

但是当我把文件放在'aha'中时,一切都改变了。由于其中仍有文件,我无法删除'aha'。

所以,我的问题是,既然'aha'是700根,那么'正常'怎么能知道它是空的呢?

我的进一步问题是:目录的读取权限究竟是什么意思?

2 个答案:

答案 0 :(得分:2)

将UNIX目录视为库目录中索引卡的抽屉。

为了了解哪些书籍,您需要阅读“抽屉”的许可。为了创建或删除新的“书籍”,您需要写入权限(这使您能够放置新卡或从抽屉中删除现有卡)。为了将目录“遍历”到较低级别的“子抽屉”,您需要对抽屉本身具有执行权限。

如果您已经知道book / foo / bar / baz存在,则不需要//foo/foo/bar的读取权限,但您确实需要执行权限所有这些。

给定的书可以在相同或单独的“抽屉”(即硬链接)中由多个“卡片”引用。

“卡片”可以引用另一张卡片(即符号链接)。符号链接可能变成“悬空”(如果另一张卡被删除)。

当任何抽屉中的任何卡片都没有引用某本书时,它会从图书馆“蒸发”。

  

因为'aha'是root的700,所以'正常'怎么能知道它是空的

嗯,一种方法是尝试删除它。如果你成功了,那一定是空的。如果它不是空的,“正常”不能再找出,因为“正常”无法读取目录,因此无法找到该“抽屉”中有多少张卡,或者它们被称为什么

更新

  

为什么需要执行权限来遍历目录。

因为这是目录的eXecutable位的定义。由于您无法合理地执行目录,否则会浪费该位。不,...文件与执行位没有任何关系。

答案 1 :(得分:1)

基本上700的文件/目录权限不是七百但实际上是

  • owner = 7
  • group = 0
  • everyone = 0

这些数字属于权限级别

  • 0 =无权限<​​/ li>
  • 1 =允许执行(运行文件或访问目录)
  • 2 =允许写(操纵)
  • 4 =允许阅读(参见)

您添加权限级别以分配多个权限,例如

$ chmod 754 foo

给予所有者完全访问权限(1 + 2 + 4),执行'n'读取组(1 + 4),并读给大家(4)看看

了解更多信息