如何创建一个看不见的目录,只能通过其绝对路径名访问?

如何创建一个看不见的目录,只能通过其绝对路径名访问?

我正在完成一项向标准 UNIX 系统添加时间支持的作业。然而,其中一部分涉及通过使备份文件不可见来保护备份文件的位置(默认情况下我们将其设置为系统根目录),即使通过“ls -al”之类的命令也可以,并且只能通过指定来访问它的绝对路径名。这是原始引用:

最后,历史目录应该是“虚拟的”,因为它们在检查代表根目录的 inode 的内容或执行“ls -al /”等命令时不会出现,并且只能通过直接 chdir 访问() (“cd”) 操作到历史路径名。

我一直在探索 UNIX 文件系统 API,但我还没有想出一种方法来强制执行此操作(我认为命令行程序或 bash 脚本中的这些程序的组合可能可以完成这项工作)。我的思考方向错了吗?

将不胜感激任何正确方向的指示或提示,谢谢:)

答案1

您可以删除目录的读取权限。在这种情况下,仍然可以访问其内容(文件或子目录,前提是它们的权限允许),但您必须知道(或:尝试...)它们的名称,因为不再可能列出目录内容。

答案2

x您可以通过授予非 root 用户权限但不授予 权限来阻止非 root 用户列出目录的内容,同时允许他们访问该目录中的文件r。对于目录,r(“读取”)意味着您可以列出内容,而x意味着您可以访问目录中或cd目录中的文件。但是,这似乎不是分配的含义,因为它不是指权限。

对于普通文件系统,目录中的条目就是出现在目录列表中的条目。但是,如果您控制文件系统驱动程序,则可能会违反此约定。以下是您可能在野外发现的一些示例:

  • 在不区分大小写的文件系统中,在列表仅显示一个文件的目录中Foo,您还可以访问名为 、 等的文件FOOfOO它们都是同一个文件,因为文件系统驱动程序就是这样设计的。
  • 某些自动挂载程序会对目录名称做出反应并尝试相应地挂载。例如,为 NFS 配置的自动挂载程序通常会决定,当您访问 时/amnt/myserver/somedir,它会尝试挂载myserver:/somedir,从而使目录/amnt/myserver/amnt/myserver/somedir进入存在状态。
  • AVFS,如果文件被识别为存档,则您可以将其作为目录访问,但假目录名称不会出现在目录列表中:如果ls ~/.avfs/path/to显示 afoo.zip则目录~/.avfs/path/to/foo.zip#也存在。
  • 某些文件系统快照系统按照您的作业所描述的方式运行:如果您访问目录/snapshot/20140415022342,或者/snapshot/yesterday您在指定时间之前获取最新快照。

相关内容