macos - 了解 xattr -p com.apple.quarantine 的输出

标签 macos terminal xattr

前几天,我正在处理一些具有扩展属性 com.apple.quarantine 的文件。我知道它的用途,但我一直很好奇当你输出它的值时下面的属性意味着什么。

例如。当我输入
xattr -p com.apple.quarantine xmlrpc.php
对于具有上述 xattr 的文件,我得到如下输出:
0083;59b926ad;Safari.app;55847AA4-5562-42A2-89A7-8FAD394B455C
前4位代表什么?即0083谷歌没有提出任何好的东西,我从用户那里找到了一些指南,也试图弄清楚这些数字究竟代表什么。

最佳答案

您可能已经知道,隔离标志是在代理(浏览器、邮件客户端等)将文件保存到您的计算机时设置的。这是您第一次尝试打开从 Internet 下载的应用程序时出现的警告的原因。

所有这些信息都已存储,并且每个用户都有完整的历史记录。

前 4 位数字是一组我希望在 quarantine.h 中定义的标志,这似乎是 copyfile.c 中包含的私有(private) header ,在 Apple 的开源代码中。

这些标志代表状态,例如文件是否被隔离。

仔分割析,内核扩展 quarantine.kext负责处理这个,在反汇编时,我们可以看到函数 quarantine_get_flags .

这里只是一个反汇编的 kext 片段
enter image description here

注意 xattr 输出的前 4 个标志的格式为 _sscanf(rbx, "%04x;") == 0x1)

这调用 quarantine_get_info .

enter image description here

我们可以在这里看到,flags 表示文件在系统上的各种状态,其中 vfs 是虚拟文件系统,vnode 是文件的基本表示结构。

至于xattr 的其余部分输出,每个用户都有一个本地的sqlite3记录下载的每个项目的数据库。它的位置是

~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2



数据库只有一张表LSQuarantineEvent .您可以使用 sqlite3 读取所有数据终端中的命令
sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "select * from LSQuarantineEvent;" 

如果您过滤结果(grep 或替代),您将能够匹配构成 xattr 后半部分的 GUID输出,您将看到有关该特定下载的所有信息,包括负责下载文件的代理,甚至是从中检索文件的 URL。

关于macos - 了解 xattr -p com.apple.quarantine 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198557/

相关文章:

MySQL pid 结束(无法启动 mysql)

linux - 比较两个文件夹时如何避免.git文件

linux - linux fsync 会同步文件的 xattr 吗?

linux - 定位扩展属性

Java 控制面板和命令行在 Mac OS X 10.9.5 上显示不同的 Java 1.7 版本。这是怎么回事?

python - 使用 EPD enthought 7.2 在 OS X 10.6.8 上安装 pygame

ios - 使用终端通过 USB 将文件从计算机 (Mac) 传输到 iOS 设备(必要时越狱)

linux - 使用现有终端的参数打开一个新终端

c++ - 获取 C++ 程序写入文件