Mac OS X的文件系统(转载)

2 > 3 > 4 的方式来选择。 刚才从用户的角度讲了 Mac OS X 怎样组织文件和文件夹,下面从技术的角度将 Mac OS X 怎么管理卷上的那些文件。 Mac OS X 支持好几种宗卷格式,不过最常用的是 Mac OS 扩展( HFS+ )格式,从 Mac OS 8.1 以来一直是推荐格式。这个格式不是大小写敏感的,但大小写保护,意思是:你无法在同一个位置同时保存 File1 和 file1 两个文件,因为 Mac OS X 认为它们是相同的,但是,如果你一开始保存的是 File1 ,那么它始终是 File1 而不会变成 file1 。从 Mac OS X Server 10.2.2 开始,这个格式引入了“日志式”概念,它会记录文件每次的更改,以保护文件不受断电或者宕机的影响。从 Mac OS X 10.3 开始,这个概念全面应用。 另外, HFS+ 支持资源分支,很有用的东东,后面会详细介绍。 然后是 Mac OS 标准( HFS )格式,比较旧,存储空间利用率很低, Mac OS X 不能安装在这上面。基本上这个格式没有使用的意义,但是,如果你正在使用很古老的系统( Mac OS 8.1 以前),你可能需要它,因为它们不识别 HFS+ 。 再然后是 UNIX 文件系统( UFS ),这种格式兼容其他 UNIX 类操作系统,它有一个重要特性:它是大小写敏感的,所以你可以在同一个位置同时保存 File1 和 file1 。如果你需要开发 UNIX 应用软件,这个是比较理想的格式。需要注意的是: UFS 对 Classic 环境和 Mac OS 9 是不可见的。 MS-DOS 格式( FAT ),这个不用多说,和 Windows 兼容。需要注意的是:在“磁盘工具”中用户无法直接指定使用 FAT 16 还是 FAT 32 格式,“磁盘工具”会根据宗卷的大小来自动选择(虽然 FAT 32 的空间利用率更好,但它的文件表需要占用的空间也大,所以对于一些小宗卷 —- 比如软盘 —- 可能 FAT 16 更合适)。如果一定要自己指定,则可能需要用 Shell 来格式化。 一般情况下,我们只用 HFS+ 格式。在这个文件系统上,每个文件都有两个分支( Fork ):数据分支( Data fork )和资源分支( Resource fork )。其中的数据分支和我们普通的文件的概念相同,而资源分支则用来存储其它 Mac OS X 特性的信息,比如自定义图标、用户指定的打开方式(单独指定的“打开方式”保存在该文件的资源分支中,而“应用到所有”的“打开方式”则保存在 ~/Library/Preferences/com.apple.LaunchServices.plist 文件中)等。在 Finder 窗口中,不管是否显示隐藏文件,我们都只能看到一个文件(数据分支),对资源分支需要通过其他间接操作(如果在“显示简介”里贴自定义图标,或者指定打开方式等),但一些程序员工具也可以单独对资源分支进行处理。 由于只有 Mac OS X 才能识别资源分支,所以在不同的文件系统中交换文件的时候,其他的系统会把资源分支舍弃掉。为了避免丢失这些信息,在需要途径非 Mac OS X 的系统之前,应该先转换,比如 BinHex ,或者制作成磁盘映像。需要注意:标准的 zip 和 tar 格式都不支持资源分支,但系统自带的“归档”功能以及 StuffIt 等压缩软件可以把资源分支独立成一个文件,然后在 Mac OS X 上解压缩时能识别并还原回去,以此来保存资源分支。当在 Mac OS X 上直接把一个文件保存在 FAT 等不支持资源分支的宗卷上时,它也会把资源分支独立成一个文件(和原文件同名,但添加了“ ._ ”前缀),以便在 Mac OS X 上访问该文件时资源分支得以重现,在 Windows 上打开由 Mac OS X “归档”出来的 zip 文件也是如此。其实,这个是 Mac OS X 所使用的影子文件( AppleDouble )的方式。而如果你在 Windows 使用该文件时将 ._ 文件删除,那么原来资源分支上的数据也就没了~~ 突然想到 Backup 3.1 ,顺便说一下,在备份前, Backup 会先扫描所有符合备份要求的文件,然后有一个标记的过程,这个过程会把需要备份的资源分支提取出来单独保存,也就是说, Backup 是把文件的数据分支和资源分支分开保存的,所以你直接爆开备份文件直接挂载里面的映像时,所有的文件都没有资源部分,而需要用 Backup 还原文件才能再把数据分支和资源分支合并起来。同时,如果备份文件中资源分支数据量过多(比如大量的文件都有自定义图标),那么这个“标记过程”将会比较慢,而且 ~/Library/Application Support/Backup/Backup Library 里的备份库也会很大。 (题外话:相信了解了资源分支之后,部分新用户对于自定义图标的疑惑应该有所了解了。) Mac OS X 中还有一种叫“包”的机制(《 Mac OS X Help Desk 》的中文译版错误百出,比如 Disk Image 本来叫“磁盘映像”,它说是“磁盘图像”;“钥匙串” Keychain 它说是“键链”,貌似是金山词霸直译,令人哭笑不得。而在这里,它翻译成“束”,我也不敢“尽信书”,鉴于 Mac OS X 中显示的是“显示包内容”而不是“显示束内容”,所以我打算还是说“包”机制好了)。比如 .app 应用程序、 .bundle 捆绑资源、 .component 组件、 .plugin 插件、 .pkg 安装包等,它以单个文件的形式将一些结构化组织好的文件们显示给用户。这大大方便用户管理和使用一些具有集体组织性的文件。 Windows 上充分迷信扩展名,一个什么样的扩展名就代表一个什么类型的文件;而 Linux 则有点过分放纵扩展名,基本上扩展名仅仅是一个指示,在 Linux 上就算是一个 .txt 也是可以执行的。相比之下, Mac OS X 则比较中立,即不严格约束扩展名,也不对普通用户放纵。在连按(在 Windows 上一般说“双击”,不过在 Apple 的文档中用“连按”)一个文件的时候, Mac OS X 先在资源分支上查找这个文件的创建者(这个创建者是指生成这个文件的应用程序,而不是保存这个文件的用户)信息,如果它没有被单独指定过打开方式,那么会直接用该应用程序打开;如果没有相关信息,再根据扩展名来判断。 细心的用户会发现 Microsoft Office 2004 自己安装的部分字体没有扩展名,不过由于资源分支里已经标示了它们是字体文件,所以是可以正常用的,因为 Mac OS X 优先判断的是资源分支里的信息。但如果去掉资源分支,那么它们就变成了没有扩展名不知道任何信息未知文件,就不知道干什么用了。 一般情况下,普通用户不需要去直接干涉资源部分的内容,系统也不提供这样的功能。但是,如果真的需要,那么可以用 Shell 或者第三方工具来藐视扩展名直接指定文件类型等等。 注意, Shell 中 cp 和 mv 命令是忽略资源分支的,复制或移动过的文件的资源分支将丢失。安装了 Developer Tools 的用户可以用 CpMac 和 MvMac 等 Mac OS X 特有的命令,它们用法和 cp 和 mv 一样,但支持资源分支。 另外还有 ditto 命令,如果要复制一个文件并保留它的资源分支,那么可以: ditto -rsrcFork 源文件 目标文件 还有, Renamer4Mac 用户可以发现在预置里可以选择是通过“系统更名”还是通过“ Finder 更名”。其中,“ Finer 更名”就像普通在 Finer 里更名操作一样,只是自动完成而已。而“系统更名”其实是借助 Shell ,操作速度快,但由于忽略了资源分支,所以更名之后的文件的资源分支将丢失。 转载自:http://www.macfans.com.cn/forum/thread-42552-1-1.html

Leave a Reply

Your email address will not be published. Required fields are marked *