iOS文件系统目录结构

iOS是属于类UNIX的操作系统,基本遵守了UNIX文件系统层级标准(Filesystem Hierarchy Standard)。但由于iOS的封闭性,它还是有一些特有的目录。下面以iOS 12.4.8系统为例说明,方便后续查阅。

Applications目录

存放iOS系统预装的APP二进制文件,比如AppStore、短信、电话等,示例:

/Applications/AppStore.app
/Applications/Camera.app

Developer目录

iPhone设备连接上Xcode开发后,新增Developer目录,包含Applications、Library、System、usr子目录。是部署到iOS系统上用于支持开发的文件。

Library目录

存放了系统需要的数据文件、帮助文档等。示例:

//铃声文件
/Library/Ringtones 
//壁纸文件
/Library/Wallpaper 

System目录

只包含一个名为Library的目录,存放了系统的绝大部分组件,如各种公开/私有Framework、内核模块、字体文件等。示例:

//字体
/System/Library/Fonts 
//桌面
/System/Library/CoreServices/SpringBoard.app/SpringBoard
//系统库
/System/Library/Frameworks/
/System/Library/PrivateFrameworks/

Frameworks和PrivateFrameworks目录存放了iOS公开和私有的Framework动态库。细心就会发现,这些库文件中很多找不到对应的二进制文件。这是由于dyld为了优化启动速度,启用了shared cache技术,将常用的动态库打包到一个cache文件中预加载。这个cache文件存放在路径是:

/System/Library/Caches/com.apple.dyld/dyld_shared_cache_<架构名称>

关于dyld的内容,可以参考EASEAPI的另一篇博文:iOS 13中dyld 3的改进和优化

User目录

链接至/var/mobile。

bin目录

存放传统UNIX用户级命令,如ls、ps、rm、mv等。

boot目录

cores目录

dev目录

存放设备文件,比如ttyp0、null。

etc目录

链接至/private/etc/。

lib目录

mnt目录

private目录

有/etc、/var两个重要的目录,存放用户的配置,数据文件。

//共享数据目录
/private/var/containers/Shared
//相册
/private/var/mobile/Media/DCIM
//录音
/private/var/mobile/Media/Recordings
//APP数据目录
/private/var/mobile/Containers/Data/Application
//APP二进制目录
/private/var/containers/Bundle/Application

sbin目录

存放系统级管理命令,如mount,launchd等。

tmp目录

链接至/private/var/tmp/。

usr目录

存储各种工具和程序。

var目录

链接至/private/var/。

其他文章

CocoaPods Podfile & podspec configurations
NSUserDefaults的suitename
pod package的不足和改进
iOS:IDFV(identifierForVendor)使用陷阱