为什么 Windows、 Linux 都不内置类似 Everything 的全盘秒搜功能? macOS 好像搜得挺快,不知道是不是有类似的功能

2024-11-21 17:26:04 +08:00
 drymonfidelia
几乎所有用过电脑的人使用过系统搜索功能吧?
虽然现在和 Mac 相比 Windows 这边硬盘便宜得和不要钱一样,但我还是能少装一个软件就少装一个,每装一个软件都多一个攻击面,尤其是 Everything 这种自动更新服务还被劫持过,用来传播窃取文件的木马的软件 /t/878475
3727 次点击
所在节点    程序员
26 条回复
aminobody
2024-11-21 17:30:33 +08:00
因为 Linux 、macOS 都不用 NTFS 文件系统.
drymonfidelia
2024-11-21 17:31:36 +08:00
@aminobody Linux ext4 也有日志可以用来搜索啊
1988chg
2024-11-21 17:32:11 +08:00
everthing 的主要是利用 nfts 的 MTF 和 usn 特性。

Master File Table (MTF)

在 NTFS 文件系统中,有一个特殊的表,称为 MTF 表。所有文件夹和文件的名称都被存储在该表中,Everything 通过遍历这个表的所有内容,实现在不遍历文件系统就能获取当前磁盘中的所有文件的名称和路径。

USN journal

NTFS 的日志功能。所有对文件系统的修改操作都被记录在了一个 journal 日志文件中。Everything 通过监控这个日志文件实现对文件修改的监控。
drymonfidelia
2024-11-21 17:33:19 +08:00
@1988chg ext4 也有日志功能,也有存放 inode 关系的表
drymonfidelia
2024-11-21 17:34:00 +08:00
而且 Windows 也没内置这种功能
aminobody
2024-11-21 17:35:56 +08:00
@drymonfidelia #2 目前所有主流文件系统都是有 journal 的, 不过这个是为了维护一致性. EV 搜得快是因为 NTFS 特有的 USN 日志, 注意不要与 NTFS 文件系统的日志设计混淆。
PTLin
2024-11-21 17:44:49 +08:00
其实 fzf 也没慢到哪去的
yanqiyu
2024-11-21 17:45:45 +08:00
USN 日志和日志式文件系统维护一致性的那个日志不是一个日志
yinxs2003
2024-11-21 17:48:31 +08:00
Linux 有啊,locate 命令,比 everything 快多了
itskingname
2024-11-21 17:55:54 +08:00
@yinxs2003 亲测 locate 没有 everything 快。

我的 windows 电脑上面安装了很多游戏,理论上硬盘里面有非常多的文件。打开 everything 以后, 他是在整个硬盘层面搜索某个文件名,能秒出。

然后我在 Linux 的~/Project 里面,搜索某个文件名。由于这个文件夹里面有很多 ts 项目,node_modules 文件夹比较多。使用 locate 命令搜索某个文件名,速度非常慢,要好几秒才有结果。
yanqiyu
2024-11-21 17:56:34 +08:00
@yinxs200 不过 plocate 是靠的预先扫描的数据库来实现的,数据库扫描是靠 timer 来触发的
loading
2024-11-21 18:00:39 +08:00
1. 目前其他系统没有 everything 类似性能的工具。
2. windows 不会像 OS X 那样集成别人开发的优秀工具到自己系统,而 OS X 就比较喜欢,这样能杀死开发者。
proxytoworld
2024-11-21 18:06:54 +08:00
权限隔离
vcn8yjOogEL
2024-11-21 18:17:59 +08:00
NTFS 本身有索引, 其他平台的全盘搜索都是另跑一个服务在后台扫文件
NoInternet
2024-11-21 19:07:21 +08:00
系统可能不会集成,但是没准 powertoys 哪天搞一个
MoonLin
2024-11-21 19:23:36 +08:00
everything 不能区分用户,所以作为一个系统来说 Windows 肯定不会集成的
drymonfidelia
2024-11-21 20:44:54 +08:00
@MoonLin 不能区分用户很容易解决啊,像 everything 一样弄个高权限 daemon 常驻,搜索调用 daemon 的接口,二次筛选当前用户能访问的文件列表返回
@proxytoworld
ekucn
2024-11-22 06:12:18 +08:00
@drymonfidelia 这样搞速度就上不去了,那又跟普通搜索啥区别?
zwl2012
2024-11-22 08:31:47 +08:00
1.windows 环境下不止使用 ntfs 文件系统
2.windows 作为一个极其看重兼容性的系统,其搜索功能不能仅考虑 ntfs 文件系统,它的搜索需要在系统支持的所有文件系统中都能使用
3.everything 快是因为其开启了索引服务监听 ntfs 下 usn 日志变化加载到内存做相关过滤筛选,而 windows 搜索比较慢的时候会提示你开启文件索引,最差的情况下系统会逐个便利
4.现代的 windows 的索引不仅可以针对文件名称,文件内容也可以;只是默认并未开启,仅需用户做好相关配置加一定的建立索引的时间,即可达到媲美 everything 的效果
以上是个人对此问题的部分看法
yinxs2003
2024-11-22 10:45:08 +08:00
@itskingname everything 的快是在后台占用不少资源的,locate 搜啥也是秒出,谁知道你的为啥那么慢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1091566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX