为什么macOS上安装完dmg文件后,即使删除了dmg文件,磁盘空间也没有变小?

因为dmg文件是一个磁盘镜像文件,需要挂载到文件系统上,才能把里面的内容copy到/Applications目录中,比如,Chrome浏览器的安装dmg文件在安装时,会挂载到目录/Volumes/Google Chrome,具体挂载到哪个目录在dmg文件里面已经定义好了,挂载后的文件目录如下:

[junjie20@Mac: 05-30 14:28:59 Google Chrome]$ ll
total 4
lrwxr-xr-x@ 1 junjie20 staff 13 5 6 10:10 -> /Applications
drwxr-xr-x@ 3 junjie20 staff 102 5 6 07:54 Google Chrome.app

里面有一个/Applications的软连接,这大概就是我们打开这个dmg后,就可以看到两个图标,一个是应用程序,一个是Applications目录,拖进去就行了。

安装完成后,我们会把dmg文件删除掉,此时并不影响我们进入目录/Volumes/Google Chrome ,因为文件引用还在,就没有真正释放;此时,执行下面命令,空间就会被释放:

hdiutil detach /Volumes/Google\ Chrome

更多请参考文章: https://phpor.net/blog/post/19146

MacOS上 DMG文件

DMG文件基础概念

  1. 定义与特性
    DMG(Disk Image)是macOS专属的磁盘映像格式,采用HFS+/APFS文件系统封装,支持压缩(AES-128/256加密)、分卷和校验功能。其本质是将文件系统结构+数据打包为单一文件,通过虚拟设备节点(/dev/disk*)挂载访问。
  2. 核心用途
    • 软件分发:78%的macOS第三方应用通过DMG分发
    • 数据备份:可创建加密的磁盘映像
    • 系统恢复:部分恢复工具使用DMG存储

macOS选择DMG的技术动因

  1. 完整性保障
    校验和机制确保安装包传输无损,双击时自动验证
  2. 安装流程标准化
    允许开发者自定义安装界面(背景图/协议文档)
  3. 文件系统兼容性
    完美支持macOS特性如资源派生(Resource Fork)

APP安装流程与底层机制

  1. 用户可见操作
  2. 底层执行过程
    • 内核将DMG映射为虚拟设备(如/dev/disk5s1)
    • 挂载到/Volumes/临时目录,文件系统驱动解析元数据
    • 复制操作触发APFS写时复制(CoW)机制

关键问题解析

  1. 挂载点溯源
  2. 大小差异原因
    • DMG压缩存储 vs 挂载后解压状态
    • 文件系统元数据(如HFS+目录B-tree)占用额外空间
  3. 废纸篓仍可访问
    文件句柄保留机制:DMG挂载后系统保持对原始文件的引用,移动至~/.Trash不影响已打开句柄
  4. 不自动卸载的设计考量
    • 用户体验:避免中断用户可能的二次安装
    • 性能优化:减少重复挂载开销
  5. 影响
    • 我们为了节省空间,安装完APP后,就会把安装文件(*.dmg)删掉,由于该文件安装后没有自动卸载,即使删除了,磁盘空间也不会被释放,此时,需要参考下面的手动卸载操作,手动卸载后,磁盘空间理解释放(很爽)

实用操作指南

  1. 手动卸载
  2. 工具差异
    • hdiutil专管磁盘映像,可追溯DMG关联
    • diskutil侧重物理设备管理,无DMG元数据接口
  3. DMG制作示例

    支持参数:

    • -format UDZO:压缩映像
    • -size 100m:预分配空间
  4. 访达中操作
    • 访达中的“位置”里面也可以看到挂载的dmg文件,也可以点击“推出”进行卸载

vscode terminal设置

使用terminal时,快捷键很重要,如:

alt+b (backword): 光标左移一个单词

alt+f (forword): 光标右移一个单词

alt+. : 自动填充上个命令的最后一个单词

但是,默认情况下,可能这个不好使,需要设置 terminal.integrated.macOptionIsMeta ,选中复选框如下:

或者 ⌘ + shift + p 打开settings.json ,添加如下配置: