技术摘要| Mac OS 与 Linux 的目录结构比较

2019-03-28 coding macos linux

Mac OS 与 Linux 的目录结构比较

从系统内核说起

传统 Linux 的内核是宏内核,其绝大部分功能都是由一个巨大的内核完成的。而Mac OS 的内核既不是宏内核,也不是微内核。从构成来看应当算混合内核,其核型组建是由卡耐基·梅隆大学开发的 Mach kernel ,其上实现了许多 FreeBSD 的众多组件。最终大部分系统调用都是由 UNIX/BSD 接口提供的,也因此其系统文件目录结构与 Linux 较为相似。

然而在 Linux 常见的文件存放位置确实与 MacOS 以及 FreeBSD 有较大区别,这也常常会给我们带来困扰。因此,有必要对其目录结构进行梳理。我们将从 Linux 的文件结构作为对照,给出相应的区别。

FreeBSD 与 Linux 的不同。

就笔者的感受而言,FreeBSD 与 Linux 的文件存放位置基本一致,只在细微之处存在一星半点的区别。主要有一下几点。

  1. 大部分情况下 Linux内核一般放置在 /boot 处,或者直接放在根目录下;而 FreeBSD 存放在 /boot/kernel/kernel 或者 /boot/kernel.old/kernel 中。这种命名很容易让人想起 Windows.old 文件夹,有异曲同工之妙。
  2. FreeBSD 的核心系统和软件会跟随官方代码源 SVN 进行滚动,因此 /bin, /lib, /etc 等文件夹之中的大部分文件都是不建议修改的(会在升级时被覆盖),以此来保证系统的完整性和更新时候的稳定性。默认软件安装、配置全部存放于 /usr/local 之中的 bin, etc, lib, share 等文件夹之下。这样的好处就是用户软件和核心组建分离,不像 Linux 那样在大版本更新时经常遇到各种问题。

Mac OS 的文件系统

在 Majave(10.14.x) 版本中,mac os 引入了新的文件系统 APFS。APFS 分区之中,可以有多个容器共享一片硬盘分区。此外,APFS 的每个容器还支持配额、备份、COW、加密等高级特性。

在默认的 MacOS Majave 安装之后,默认只有两个分区,一个EFI分区,用于引导,一个AFPS分区。APFS分区之中,有四个容器,分别是:

  1. APFS Volume Macintosh HD,挂载于 / 。是根分区。
  2. APFS Volume Preboot,不挂载不可见,是预先启动分区。由 EFI 分区引导 Prebooot 中的系统启动器。
  3. APFS Volume Recovery, 不挂载不可见,恢复分区。当无法成功引导任何操作系统后,将引导 Recovery 用于恢复。
  4. APFS Volume VM, 挂在于 /vm。 其下存放了交换文件(swapfilex)和系统休眠时的内存镜像。

之前有说过容器之间共享一个分区,动态调整大小。swapfilex是以1g为单位的交换文件,当内存紧张时动态地申请和释放。

Mac 的文件目录结构

Mac 根目录下有一下几个文件夹:

  1. /System 文件夹,系统文件夹。与Windows 之中的 C:\windows32 等文件夹类似。
    • Library 系统资料库,其中的 Caches 可以删除。
    • iOSSupport 提供了系统的 iOS 支持。
  2. /Applications GUI软件文件夹,共享的所有软件包都存放在此。
  3. /Library 应用资料库,包括了大部分非核心的系统组件。Caches 可删除。
  4. /Users 文件夹,与 Linux 之中的 /home 文件夹功能类似。而mac 之中的 /home 只是为了与 Linux 兼容,一般不放任何东西。
  5. /Network 和 /net 网络相关,空的。
  6. /Volumes 与 /mnt 类似,其中挂载了全部硬盘、网络硬盘等。
  7. /sbin,/bin,/usr /dev文件夹,与 Linux 基本一致。与 Linux 兼容。
  8. /etc, /var /tmp 文件夹,是位于 /private 之中对应文件夹的软连接。存放系统配置、数据库、缓存等。用于与 Linux 文件结构兼容。

注意,/root, /procfs, /boot, /sysfs 等非必须文件夹均不存在。

上述文件夹之中,只有大些的 System, Library, Applications, Users, Network 和 Volumes 默认对外可见。剩下来的小写文件夹只是为了 POSIX 兼容,默认情况下不可见。

常见软件位置

无论是系统资料库还是应用资料库都包括了软件的配置信息、第三方包、扩展等。比如:

  1. OPENSSL 位于 /System/Library/OpenSSL 中。
  2. Perl 位于 /System/Library/Perl 之中。
  3. 系统自带的 Python, Java, Ruby, Tex位于 /Library/ 对应文件夹下。比如,系统自带的 Python 的第三方包位于 /Library/Python/2.7/site-packages。

值得注意的是,Mac 后来默认不再安装 gcc, git, make 等开发工具。使用 xcode-select --install 可以一键安装这些命令行工具。其位置位于 /Library/Developer/CommandLineTools 之中。特别的,这些命令在 Library/Developer/CommandLineTools/bin 之中,该目录写入了环境变量 $PATH 之中。

Brew 软件位置。

Macos 不自带包管理。但是可以很方便的获取 brew 包管理工具。brew 自身位于 /usr/local/Homebrew 目录。其软件安装包没有安装在系统目录之下,而是位于 /usr/local/Cellar 里面。举个例子,brew 安装的 Python3 位于 /usr/local/Cellar/python/3.7.1/ 之中,而 go 则可能位于 /usr/local/Cellar/go/1.12.1 之中。

但是这些软件位置互相独立,PAYH,LIBRARY 等环境变量管理较为麻烦,因此 brew 又维护了一个映射关系,将所有文件软链接到 /usr/local 的 bin, etc, lib, var 等文件夹之中。正是这个道理 mysql 安装的数据库的位置可能就位于 /usr/local/var/db 之中。

另外,Mac 的 GUI软件(即 Cocoa 软件)全部是按照软件包的形式发放,没有分散的文件。brew 也可以安装 chrome 等这类 GUI 软件,此时位置全部放置在默认位置 /Applications 之中。

家目录

家目录与 Linux 基本一致,只是多一个 Library 个人资料库,主要是个人的应用软件配置文件等。

本人保留对侵权者及其全家发动因果律武器的权利

版权提醒

如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/tech/macandlinuxdict/

如有其它需要,请邮件联系!版权所有,违者必究!