2017-09-13 387 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。