haorui658 发表于 2010-2-26 19:56:06

[文件搜索]Everything--最强大的搜索工具

名称:Everything
类别:硬盘搜索
语言:多语言(包括中文)
官网:http://xbeta.info/everything-search-tool.htm
介绍:
       Everything(官网|中文主页|教程)是速度最快的文件搜索软件。其速度之快令人震惊,百G硬盘几十万个文件,可以在几秒钟之内完成索引;文件名搜索瞬间呈现结果。它小巧免费,支持中文,支持正则表达式,可以通过HTTP或FTP分享搜索结果。如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything!
截图:
推荐人的闲话:很好的一个小软件,是我的机器上不多的随机启动软件之一,查找速度是我用过的最快的,尤其是工作找文件很方便,还支持正则查找
但注意如下几点:
- 只搜索文件名,不能搜索文件内容;
- 只适用NTFS文件系统,不适合FAT32;
- 完美支持中文,但必须使用V1.2.x及更高版本。

afan 发表于 2010-2-26 21:10:56

闪电速度~!

zmj2008 发表于 2010-2-26 21:11:41

这个软件确实很好用.

破帽遮颜 发表于 2010-2-26 21:31:03

确实很厉害!几十万数据,闪电般就出来了!这View列表不知道怎么实现这么快速度的

tianya1631 发表于 2010-2-26 21:35:55

经常用,速度不错。。。。不知道用什么语言写的。。。

pusofalse 发表于 2010-2-26 22:38:29

确实是精品软件,我想知道实现原理~ - -|||

devilma 发表于 2010-2-27 14:35:35

这么多人都说好,看来得试试了

lynfr8 发表于 2010-2-27 14:55:46

根据Everything的官网所说,它1分钟可以索引100万个文件。48万多个文件,建立索引需要的时间也只有几秒,索引无需逐一扫描硬盘文件,而是直接读取NTFS文件系统的USN日志
Everything由于核心原理建立在NTFS的底层机制上,NTFS文件系统中的 USN 日志记录了系统对NTFS分区中的文件所做的所有更改。对于每一卷,NTFS 都使用 USN 日志来跟踪有关添加、删除和修改的文件的信息。
直接读取NTFS文件系统的USN日志,是能做到很快的,但就只能按文件名来处理。
如果要做内容的索引,那就不是一秒两秒的事了。而且还要考虑文件格式,需要索引的信息等。也就是说你如果需要搜寻你所有的分区,那么你所有的分区都需要时NTFS格式的,这是由软件的工作原理决定的。

lynfr8 发表于 2010-2-27 14:57:54

确实是精品软件,我想知道实现原理~ - -|||
pusofalse 发表于 2010-2-26 22:38 http://www.autoitx.com/images/common/back.gif
网上关于USN的资料太少了,如果能摸透原理,au3或许也可以借鉴everything写出高效的文件搜索工具
http://zh.wikipedia.org/zh-cn/NTFS#USN_.E6.97.A5.E5.BF.97

lynfr8 发表于 2010-2-27 15:03:14

文章出处:http://news.newhua.com/news1/Skills_System/2009/629/0962915408EE2AE3CIJIC117DFG44CGJ7CK36K8C9EKF8I25AIH94KG_2.html?lt=common

....(前面无关部分省去)

了解文件变动信息的变动日志

  在Windows 7中,NTFS分区具有文件变动信息的记录功能。变动日志可以针对卷的所有操作记录完整的日志,记录的内容可包含添加、删除和修改操作,无论那个用户进行的操作,或者进行的添加、删除和修改操作都会记录在案。这和系统日志类似,变动日志是持续的,因此就算是关闭或重启系统,这些内容依旧可以保留。当发生NTFS检查点事件后,系统就会将记录写入到NTFS变动日志中,检查点会告诉系统写入变动,以便让NTFS可以在发生故障后恢复到特定的检查点状态下。
  要了解有关变动日志功能的摘要信息,我们只需在命令行下运行“fsutil usn queryjournal DriveDesignator”命令即可,其中DriveDesignator的我们要查询的卷。例如我们要查看C盘的变动日志摘要,可运行命令“fsutil usn queryjournal c:”。在笔者的Windows 7中,命令的输出结果如下:
  Usn Journal ID : 0x01c9cb581f565250
  First Usn : 0x00000000004c0000
  Next Usn : 0x000000000224be08
  Lowest Valid Usn : 0x0000000000000000
  Max Usn : 0x7fffffffffff0000
  Maximum Size : 0x0000000002000000
  Allocation Delta : 0x0000000000400000  “Usn Journal ID”是USN日志ID,这是该变动日志的唯一标识符。“First Usn”是第一个USN,这是日志中的第一个USN。“Next Usn”是下一个USN,这时变动日志下一个可以被写入的USN。“Lowest Valid Usn”是最低有效USN,这是可以被写入变动日志的最低有效USN。“Max Usn”是最大USN,这是可以被分配的最大USN。“Maximum Size ”是最大值,这是变动日志可以使用的字节最大值,如果变动日志超过该值,以前的项目就会被覆盖。“Allocation Delta”是分配差,这是当变动日志装满后,可以被添加到日志的末尾,或者从日志的开头处删除的,被分配的内容空间大小。



假如我们要了解某个文件最新的变动日志项,只需在命令行下执行命令“fsutil usn readdate filepath”即可,其中filepath是要查看变动信息的文件的路径和名称。例如,如果要查看C:\Windows\setupact.log文件的最新变动日志信息,可执行命令“fsutil usn readdata C:\Windows\setupact.log”,命令的输出结果如下:

  Major Version : 0x2
  Minor Version : 0x0
  FileRef# : 0x0001000000002abe
  Parent FileRef# : 0x0001000000000210
  Usn : 0x0000000002246948
  Time Stamp : 0x0000000000000000 12:00:00 AM 1/1/1601
  Reason : 0x0
  Source Info : 0x0
  Security Id : 0x0
  File Attributes : 0x20
  File Name Length : 0x18
  File Name Offset : 0x3c
  FileName : setupact.log
  (图3)http://news.newhua.com/Files/Remoteupfile/2009-6/29/20090629102516192.jpg
    这些数据的开始位置显示了该文件在根文件索引中的索引编号以及父项,同时还显示了该文件当前的USN已经文件属性标记。所有这些有关该文件的最新变动日志,方便了特定的系统服务直接查询,以判断对文件的修改情况,不仅速度更快,而且对系统资源是使用也更高效。

lynfr8 发表于 2010-2-27 15:09:07

本帖最后由 lynfr8 于 2010-2-27 15:11 编辑

在用Vopt9对硬盘进行碎片整理时发现有好多元数据,其中有个叫$Extend\$UsnJrnl,很碎,元数据是锁定的,也就是说碎片整理时不能移动,但是这个文件碎的很使其它文件也就变的很碎,于是我就想这个文件是干嘛用的,要是没什么作用就删除。
查了一下,还真的发现它可以删除,首先Vopt9里面就有一个安全删除$UsnJrnl文件的。
另外还可以在命令行下删除:

fsutil usn deletejournal /d c:

c:是硬盘的盘符

下面给大家简单说一下什么是元数据文件:
这是NTFS文件系统的文件,记录文件系统,里面的文件目录等:
MFT中的第1个记录就是MFT自身。由于MFT文件本身的重要性,为了确保文件系统结构的可靠性,系统专门为它准备了一个镜像文件($MftMirr),也就是MFT中的第2个记录。
第3个记录是日志文件($LogFile)。该文件是NTFS为实现可恢复性和安全性而设计的。当系统运行时,NTFS就会在日志文件中记录所有影响NTFS卷结构的操作,包括文件的创建和改变目录结构的命令,例如复制,从而在系统失败时能够恢复NTFS卷。
第4个记录是卷文件($Volume),它包含了卷名、被格式化的卷的NTFS版本和一个标明该磁盘是否损坏的标志位(NTFS系统以此决定是否需要调用Chkdsk程序来进行修复)。
第5个记录是属性定义表($AttrDef,attribute definition table),其中存放了卷所支持的所有文件属性,并指出它们是否可以被索引和恢复等。
第6个记录是根目录(\),其中保存了存放于该卷根目录下所有文件和目录的索引。在访问了一个文件后,NTFS就保留该文件的MFT引用,第二次就能够直接进行对该文件的访问。
第7个记录是位图文件($Bitmap)。NTFS卷的分配状态都存放在位图文件中,其中每一位(bit)代表卷中的一簇,标识该簇是空闲的还是已被分配了的,由于该文件可以很容易的被扩大,所以NTFS的卷可以很方便的动态的扩大,而FAT格式的文件系统由于涉及到FAT表的变化,所以不能随意的对分区大小进行调整。
第8个记录是引导文件($Boot),它是另一个重要的系统文件,存放着Windows 2000/XP的引导程序代码。该文件必须位于特定的磁盘位置才能够正确地引导系统。该文件是在Format程序运行时创建的,这正体现了NTFS把磁盘上的所有事物都看成是文件的原则。这也意味着虽然该文件享受NTFS系统的各种安全保护,但还是可以通过普通的文件I/O操作来修改。
第9个记录是坏簇文件($BadClus),它记录了磁盘上该卷中所有的损坏的簇号,防止系统对其进行分配使用。
第10个记录是安全文件($Secure),它存储了整个卷的安全描述符数据库。NTFS文件和目录都有各自的安全描述符,为了节省空间,NTFS将具有相同描述符的文件和目录存放在一个公共文件中。
第11个记录为大写文件($UpCase,upper case file),该文件包含一个大小写字符转换表。
第12个记录是扩展元数据目录($Extended metadata directory)。
第13个记录是重解析点文件($Extend\$Reparse)。
第14个记录是变更日志文件($Extend\$UsnJrnl)。
第15个记录是配额管理文件($Extend\$Quota)。
第16个记录是对象ID文件($Extend\$ObjId)。
第17~23记录是是系统保留记录,用于将来扩展。
Fsutil: usn
主要由技术支持人员使用。管理更新序列号 (USN) 更改日志,该日志提供了对卷中所有文件已做更改的永久性记录。当添加、删除和修改文件、目录及其他 NTFS 对象时,NTFS 会将记录输入 USN 更改日志中,计算机上每个卷都有一个更改日志。每个记录指定更改类型和所更改的对象。新的记录将添加到数据流的最后。
程序可以查询 USN 更改日志,从而确定对文件集的所有更改。USN 更改日志的效率比检查时间戳或注册文件通知的效率高。USN 更改日志可由索引服务、文件复制服务 (FRS)、远程安装服务 (RIS) 和远程存储启用和使用。
语法
fsutil usn m=MaximumSize a=AllocationDelta VolumePathname
fsutil usn {/D | /N} VolumePathname
fsutil usn FileRef LowUsn HighUsn VolumePathname
fsutil usn VolumePathname
fsutil usn FileName
参数
createjournal
创建 USN 更改日志。
m=MaximumSize
指定 NTFS 分配给更改日志的最大空间(以字节表示)。
a=AllocationDelta
指定分配给更改日志尾部以及从更改日志起点删除的内存分配大小(以字节表示)。
VolumePathname
指定驱动器号(后跟冒号)、装入点或卷名。卷名形式为 \\?\Volume{GUID}\,此处 {GUID} 为全局唯一标识符 (GUID),例如,\\?\Volume\{2eca078d-5cbc-43d3-aff8-7e8511f60d0e}\。
deletejournal
删除或禁用活动的 USN 更改日志。
警告
删除变更日志会影响文件复制服务 (FRS) 和索引服务,因为删除过程需要这些服务对卷进行彻底的(而且是耗时的)扫描。重新扫描卷时,这反过来又会对 FRS SYSVOL 复制和在 DFS 链接的备用链接之间的复制产生负面影响。
/D
禁用活动的 USN 更改日志,并在该更改日志禁用后返回 I/O 控制。
/N
禁用活动的 USN 更改日志,并只在该更改日志已禁用后返回 I/O 控制。
enumdata
枚举并列出两个指定边界之间的更改日志入口。
FileRef
开始枚举的卷上的文件中的序数位置。
LowUsn
用于筛选需要返回的记录的 USN 值下边界范围。只返回其最近更改日志 USN 的值在 LowUsn 和 HighUsn 成员值之间(或等于)的记录。
HighUsn
用于筛选需要返回的文件的 USN 值的上边界范围。
queryjournal
查询卷的 USN 数据,以收集有关当前更改日志、记录和容量的信息。
readdata
读取文件的 USN 数据。
FileName
指定包括文件名和扩展名的文件的完整路径,例如 C:\documents\filename.txt。
注释
使用 createjournal
如果卷上存在更改日志,则 createjournal 参数将更新更改日志的 MaximumSize 和 AllocationDelta 参数。这使得您可以增加具有活动日志所保留的记录数目,而不必禁用它。如果将 MaximumSize 和 AllocationDelta 指定为零,则系统会根据卷大小选择默认值。
使用 m=MaximumSize
更改日志可以增大到大于该目标值,但会在下一个 NTFS 检查点处被截断,以使其小于该值。NTFS 会检查更改日志,并在其值超过 MaximumSize 和 AllocationDelta 之和时对其进行调整。在 NTFS 检查点,操作系统将记录写入 NTFS 日志文件中,这些记录允许 NTFS 确定恢复数据所需的处理。
使用 a=AllocationDelta
更改日志可以增大到大于 MaximumSize 和 AllocationDelta 调整之前的总数。
使用 deletejournal
删除或禁用活动更改日志是非常耗时的,因为系统必须访问主控文件表 (MFT) 中的所有记录,并将最后的 USN 属性设置为零。这个过程可能需要几分钟,并在需要时可能持续到系统重启之后。在此期间,不考虑更改日志是活动的或是被禁用状态。在系统禁用日志时,不能访问日志,且所有日志操作都将返回错误。禁用活动日志时要特别小心,因为这可能对其他使用该日志的应用程序产生不良影响。
示例
要在驱动器 C 上创建 USN 更改日志,请键入:
fsutil usn createjournal m=1000 a=100 C:
要删除驱动器 C 上活动的 USN 更改日志,请键入:
fsutil usn deletejournal /D C:
要枚举并列出驱动器 C 上两个指定边界的更改日志入口,请键入:
fsutil usn enumdata 1 0 1 C:
要查询驱动器 C 上卷的 USN 数据,请键入:
fsutil usn queryjournal C:
要读取驱动器 C 上临时文件夹中文件的 USN 数据,请键入:
fsutil usn readdata C:\Temp\sample.txt

---本文来自应序康的个人网站---

lynfr8 发表于 2010-2-27 15:13:24

貌似原理已经有点眉目了,呵呵,谁对文件系统比较熟悉的写一个出来让大家学习下?

xlcwxl 发表于 2010-2-27 21:40:00

:face (14):占最后一楼

nmgwddj 发表于 2010-2-27 23:07:00

最后一楼的沙发:face (29):

jhwl 发表于 2010-2-28 09:33:22

所有的文件信息写在数据库里,每次启动和关闭时做检测结构是否更新,搜索列表直接查询数据库
页: [1] 2 3 4 5
查看完整版本: [文件搜索]Everything--最强大的搜索工具