linux - 知道目录是否为空的权限

标签 linux

当我尝试模拟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/

相关文章:

c++ - Valgrind 在不应该的时候报告竞争条件

linux - 如何在 Ubuntu 上设置和运行 PhantomJS?

C++ 套接字不接收传入数据包,在 Python 中工作

python - 使用单个 Python 脚本从 Linux、Mac 和 Windows 上的剪贴板复制数据

linux - 有没有办法将以下逻辑放入 grep 命令中?

Linux 嵌入式系统中的 Java Swing

linux - 如何让 `MANPATH=~/.nmap/doc man 1 nmap` 寻找 nmap.1?

linux - 从 Linux 'ps' 生成 CSV 列表

c - pthread_mutex 和进程终止

linux - 列出 tar.gz 中深度一级的目录