iOS文件系統(tǒng)結(jié)構(gòu)
- 可視化方式查看iOS系統(tǒng)文件
在iOS通過Cydia安裝Apple File Conduit 2,在OS X使用iFunBox可以查看iOS系統(tǒng)文件(iOS和OS X需要在同一個(gè)局域網(wǎng)內(nèi))- 通過SSH遠(yuǎn)程登錄iOS來查看
- Filesystem Hierarchy Standard 文件系統(tǒng)層次化標(biāo)準(zhǔn)(以下簡稱FHS)
FHS為類UNIX操作系統(tǒng)的文件目錄結(jié)構(gòu)制定了一套標(biāo)準(zhǔn),目的是讓用戶預(yù)知文件或目錄的存放位置悔据。
UNIX操作系統(tǒng)的常見目錄結(jié)構(gòu)
/:根目錄浇坐,以斜杠表示诅诱,其他所有文件和目錄在根目錄下展開壹置。
/bin:"binary"的簡寫孕似,存放提供用戶級基礎(chǔ)功能的二進(jìn)制文件踩娘,如ls、ps等喉祭。
/boot:存放能使系統(tǒng)成功啟動的所有文件养渴。iOS中此目錄為空。
/dev:"device"的簡寫泛烙,存放BSD設(shè)備文件理卑。每個(gè)文件代表系統(tǒng)的一個(gè)塊設(shè)備或字符設(shè)備,一般來說蔽氨,“塊設(shè)備”以塊為單位傳輸數(shù)據(jù)藐唠,如硬盤;而“字符設(shè)備”以字符為單位傳輸數(shù)據(jù)孵滞,如調(diào)制解調(diào)器中捆。
/sbin:"system binaries"的簡寫,存放提供系統(tǒng)級基礎(chǔ)功能的二進(jìn)制文件坊饶,如netstat、reboot等殴蓬。
/etc:"Et Cetera"的簡寫匿级,存放系統(tǒng)腳本及配置文件,如passwd染厅、hosts等痘绎。在iOS中,/etc是一個(gè)符號鏈接肖粮,實(shí)際指向/private/etc孤页。
/lib:存放系統(tǒng)庫文件、內(nèi)核模塊及設(shè)備驅(qū)動等涩馆。iOS中此目錄為空行施。
/mnt:"mount"的簡寫允坚,存放臨時(shí)的文件系統(tǒng)掛載點(diǎn)。iOS中此目錄為空蛾号。
/private:存放兩個(gè)目錄稠项,分別是/private/etc和/private/var。
/tmp:臨時(shí)目錄鲜结。在iOS中展运,/tmp是一個(gè)符號鏈接,實(shí)際指向/private/var/tmp精刷。
/usr:包含了大多數(shù)用戶工具和程序拗胜。/usr/bin包含那些/bin和/sbin中未出現(xiàn)的基礎(chǔ)功能,如nm怒允、killall等挤土;/usr/include包含所有的標(biāo)準(zhǔn)C頭文件;/usr/lib存放庫文件误算。
/var:"variable"的簡寫仰美,存放一些經(jīng)常更改的文件,比如日志儿礼、用戶數(shù)據(jù)咖杂、臨時(shí)文件等。其中/var/mobile和/var/root分別存放了mobile用戶和root用戶的文件蚊夫,是重點(diǎn)關(guān)注的目錄诉字。
UNIX系統(tǒng)文件權(quán)限簡介
- UNIX一切皆文件:讀寫普通文件、目錄知纷、設(shè)備壤圃、socket、管道琅轧、CPU信息伍绳、進(jìn)程信息等
- 系統(tǒng)用3位(bit)來表示文件的權(quán)限,從高位到低位分別是r(read)權(quán)限乍桂、w(write)權(quán)限冲杀,以及x(execute)權(quán)限。
文件與用戶的關(guān)系存在以下三種可能性:
- 此用戶是屬主用戶(文件所有者的權(quán)限)
- 此用戶不是屬主用戶睹酌,但在屬主組里(組用戶權(quán)限)
- 此用戶既不是屬主用戶权谁,又不在屬主組里(Other用戶權(quán)限)
rwx r-x r--
111 101 100
所有者 屬組 其他
- 用3*3位來表示一個(gè)文件的權(quán)限,如果某一位為1憋沿,則這一位代表的權(quán)限生效旺芽,否則無效。
- 例如,111101101代表rwxr-xr-x采章,即該文件的屬主用戶擁有r运嗜、w、x權(quán)限共缕,而屬主組和其他所有人只具有r和x權(quán)限洗出;
- 同時(shí),二進(jìn)制的111101101轉(zhuǎn)換成十六進(jìn)制是755图谷,也是一種常見的權(quán)限表示法翩活。
使用chmod 命令修改文件權(quán)限
可以使用chmod 命令修改文件權(quán)限
chmod 755 filename
iOS的獨(dú)有目錄
/Applications:存放所有的系統(tǒng)App和來自于Cydia的App,但不包括StoreApp便贵。
/Developer:如果一臺設(shè)備連接Xcode后被指定為調(diào)試用機(jī)菠镇,Xcode就會在iOS中生成這個(gè)目錄,其中會含有一些調(diào)試需要的工具和數(shù)據(jù)承璃。
/Library:存放一些提供系統(tǒng)支持的數(shù)據(jù)利耍。其中/Library/MobileSubstrate下存放了所有基于CydiaSubstrate(原名MobileSubstrate)的插件(如:tweak編寫的插件)。
/System/Library:iOS文件系統(tǒng)中最重要的目錄之一盔粹,存放大量系統(tǒng)組件隘梨。
/System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各種framework
/System/Library/CoreServices里的SpringBoard.app:iOS桌面管理器(類似于Windows里的explorer),是用戶與系統(tǒng)交流的最重要中介舷嗡。
/User:用戶目錄(其實(shí)就是mobile用戶的home目錄)轴猎,實(shí)際指向/var/mobile,這個(gè)目錄里存放大量用戶數(shù)據(jù)进萄,比如:
/var/mobile/Media/DCIM下存放照片捻脖;
/var/mobile/Media/Recordings下存放錄音文件;
/var/mobile/Library/SMS下存放短信數(shù)據(jù)庫中鼠;
/var/mobile/Library/Mail下存放郵件數(shù)據(jù)可婶。
/var/mobile/Containers,存放StoreApp援雇。值得注意的是矛渴,App的可執(zhí)行文件在bundle與App中的數(shù)據(jù)目錄被分別存放在/var/mobile/Containers/Bundle和/var/mobile/Containers/Data這兩個(gè)不同目錄下。其中/var/mobile/Containers/Data是我們常用的應(yīng)用沙盒目錄的起始目錄:NSString *directory = NSHomeDirectory(); //獲取沙盒根目錄
iOS應(yīng)用(Store App)沙盒目錄:
- Application Bundle 包含應(yīng)用可執(zhí)行文件和資源文件
如獲取iOS上微信程序的Bundle路徑熊杨,可以通過ps -e | grep appname
luz-iphone:/ root# ps -e | grep WeChat
1368 ?? 5:41.43 /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
- Application Data 包含App運(yùn)行生產(chǎn)的數(shù)據(jù)和配置信息等
如獲取iOS上微信程序的Date路徑曙旭,可以通過cycript工具
luz-iphone:~ root# cycript -p WeChat
cy# directory = NSHomeDirectory()
@"/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE"
cy#
- Data目錄結(jié)構(gòu)如下:
luz-iphone:/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE root# ls
Documents/ Library/ tmp/
- Document 存放應(yīng)用運(yùn)行時(shí)生成的并且需要保存的數(shù)據(jù)。注:iTunes或iCloud同步設(shè)備時(shí)會備份該目錄
- Library/Caches 存放應(yīng)用運(yùn)行時(shí)生成的并且需要保存的數(shù)據(jù)晶府。iTunes或iCloud不同步。
- Library/Preferences 存放偏好設(shè)置钻趋。iOS的偏好設(shè)置(settings)應(yīng)用也會在該目錄查找應(yīng)用的設(shè)置信息川陆。NSUserDefaults保存在該目錄下。iTunes或iCloud同步設(shè)備時(shí)備份該目錄蛮位。
- tmp 存放應(yīng)用運(yùn)行時(shí)所需的臨時(shí)數(shù)據(jù)较沪。當(dāng)某個(gè)應(yīng)用沒運(yùn)行時(shí)鳞绕,iOS系統(tǒng)可能會清除該目錄下的文件。但不可依賴這種自動清除機(jī)制尸曼,應(yīng)該及時(shí)手動清除们何。