2017-09-13 120 views
0

有一天,我正在搞一些文件,它们的扩展属性为com.apple.quarantine。我知道它的目的,但我一直很好奇当你输出它的值时,下面的属性是什么意思。了解xattr的输出-p com.apple.quarantine

E.g.当我在

xattr -p com.apple.quarantine xmlrpc.php

键入一个文件已经在说XATTR,我得到的输出是这样的:

0083;59b926ad;Safari.app;55847AA4-5562-42A2-89A7-8FAD394B455C

什么前4位代表什么?即0083谷歌没有提出任何好的建议,并且我从用户那里找到一些指南,试图弄清楚这些数字究竟代表了什么。

回答

4

正如您可能已经知道的,当代理(浏览器,邮件客户端等)将文件保存到您的计算机时,会设置隔离标志。这是您首次尝试打开从互联网下载的应用程序时出现的警告的责任。

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

前4位数字是我期望在quarantine.h中定义的一组标志,它在Apple的开源代码中似乎是copyfile.c中包含的专用标头。

这些标志代表状态,例如文件是否被隔离。我们可以看到quarantine_get_flags这个函数。

这里只是一个拆解KEXT enter image description here

注意XATTR输出的第4个标志与_sscanf格式(RBX, “%04X;”)的片段==为0x1)

这请致电quarantine_get_info

enter image description here

我们可以看到这里的标志表示该系统上的文件的各种状态,与VFS是虚拟文件系统和vnode是一个文件的基本表示结构。

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

〜/库/首选项/ com.apple.LaunchServices.QuarantineEventsV2

数据库只有一个表LSQuarantineEvent。您可以通过在终端

sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "select * from LSQuarantineEvent;" 

使用sqlite3命令如果过滤结果(grep的或替代),你就可以说弥补了xattr后期的GUID匹配读取所有数据输出,您将看到有关该特定下载的所有信息,包括哪个代理负责下载文件,甚至包括从中检索文件的URL。