Ubuntu操作系统中的文件表

Linux / Ubuntu操作系统是否创build一个表,它保存每个文件的入口与其存储在硬盘上的绝对地址?

只是想知道,因为我打算做一个文件search程序。

我知道有像find这样的terminal命令,但是我会在CI中编程,想着是否有任何这样的事情Ubuntu操作系统,如果是这样,我怎么能访问该表?

更新:

正如有些人提到的那样,没有这样的事情,那么如果我想做一个文件search程序,我将不得不search每个目录的每个文件夹,从程序根目录开始。 由此产生的scheme将非常缓慢,performance不佳! 那么有没有更好的方法? 或者我的路是好的!

你所描述的“东西”通常被称为文件系统,正如你可能知道的那样,Linux可以选择的文件系统有:ext3,ext4,btrfs,Reiser,xfs,jffs等等。

你描述的表可能会很好地映射到inode目录组合。

从我的角度来看,文件在硬盘上的物理位置的全部管理都不是用户的业务,这完全是操作系统的领域,除非你有一个很好的借口(比如你正在写一个数据恢复程序)以及相关文件系统的深入了解。 而且,在大多数情况下,文件的存储不会是连续的,而是分布在磁盘上的多个位置(碎片)。

但是这里更重要的问题可能是:通过这种方式找到文件,你希望达到什么目的?

编辑:基于OP的评论我认为这里可能存在一个严重的误解 – 我看不到绝对文件地址和文件搜索器之间的联系,但这可能是由于我们对“绝对地址”在文件系统的上下文中。

如果你只是想看看文件系统中的所有文件,你也可以

  1. 执行递归目录读取或
  2. 按照SmartGuyz的建议使用updatedb编写的数据库

正如你想查看文件反正 – 这几乎所有的运行时间将花在 – 我不能想到任何优势2)将超过1)和2)有缺点有一个外部的依赖,由updatedb准备的文件必须存在并且非常新鲜。

一个SO问题,讲述更高级的遍历目录的方式,而不是老的opendir / readdir / closedir: 用opendir(),readdir()和closedir()

编辑2基于OP的问题补充:是的,遍历目录需要时间,但这就是生活。 考虑下一个最好的东西,即定位和朋友。 这取决于定期更新(通常每天一次)的“数据库”,因此在上次预定更新之后添加或重命名的所有文件将不会被找到,并且在上次预定更新之后删除的文件将被提及数据库,尽管他们不存在了。 假设定位甚至安装在目标机器上,这是你无法确定的。

与编程中的大部分事情一样,从以前的解决方案来看,同样的问题也不会让人感到痛苦,所以我建议你阅读GNU findutils的文档?

不,没有一个文件的块地址表,你需要更深入。

首先,文件的布局取决于文件系统的类型(如ext2,ext3,btrfs,reisersf,jfs,xfs等)。 这是由Linux内核提取的,Linux内核为许多文件系统上的文件提供访问驱动程序,并且在文件系统的一个特定分区下抽象出单个虚拟文件系统(单个文件目录树,其中包含其他设备作为其子树)。

所以,基本上没有,你需要使用内核抽象接口( readdir()/proc/mounts等)来搜索文件或者滚动你自己的用户空间驱动(例如通过FUSE)来检查原始块设备( /dev/sda1等),如果你真的需要检查低级别的细节(这需要对内核/文件系统内部的很多理解,并且非常容易出错)。

 updatedb -l 0 -o db_file -U source_directory 

这将创建一个数据库与文件,我希望这会帮助你。

不是。文件系统实际上是由目录构成的,每个目录包含文件和目录。

在Linux中,所有这些都通过inode管理到内核中。

是。

从概念上讲,它确实创建了光盘上每个文件位置的表格**。 有很多的细节,这个图片稍微浑浊。

但是,你通常不应该在意。 你不想在这个水平上工作,也不应该。 Linux中有很多文件系统,都以稍微(甚至显着)不同的方式进行。

**实际上不是实际的位置。 硬盘驱动器可以通过其固件以某种方式将逻辑块映射到物理块。