为什么我们要通过`.dmg`文件安装软件?


28

当我想安装软件时,通常会下载一个.dmg(Disk iMaGe)文件。当我打开它时,该.dmg文件看起来像我所谓的“虚拟磁盘”(因此我假设使用它的名称),并Finder在下列出 devices。它也列在Disk Utility下面Disk Images,似乎可以像删除其他磁盘一样将其擦除或卸载。

  • 需要使用这种“虚拟磁盘”安装软件的逻辑是什么?
  • 为什么它不以简单的二进制文件形式出现,或者我不知道呢?

12
安装软件总能引起ð
甜点

1
一个简单的二进制文件将是安装程序。使用DMG,您无需运行安装程序即可复制应用程序。
托尔比约恩Ravn的安徒生

10
大多数Mac应用程序看起来像单个文件,但实际上是“应用程序捆绑包”,基本上是文件夹,其中包含许多文件。Finder将其显示为单个实体,但是您可以右键单击它们,然后选择“打开内容”以检查其中的文件。因此,“简单的二进制”将不起作用。
el.pescado


最后一段应该是一个单独的问题,因为它会引起单独的答案
user151019

Answers:


34

DMG具有一些关键功能,使其优于普通的旧拉链

  • 它们是完整的文件系统(意味着它们可以存储文件权限,具有自定义文件夹背景等)
  • 它们在安装前支持“强制性” EULA,这对法律法规而言非常有用
  • 提供更可靠的执行环境。如果必须安装绝对路径(不应该这样做),则可以准备DMG,将其标记为只读,然后使用它来安装

真正的关键功能是它们支持完整的HFS +文件系统。Zip(通常,Linux版本有时支持权限)很愚蠢,仅支持捆绑文件和文件夹,而没有其他支持。没有元数据,只有文件。


14
其他要点:从10.12开始,可以对.dmg文件进行代码签名以确保完整性(.zip文件可以包含签名的代码,但不能以能够在下载后生存的方式对其进行签名)。而且,“简单二进制”选项根本不起作用,因为大多数macOS软件都是打包提供的-具有复杂(隐藏)内部结构的文件夹-而不是纯文件。
戈登·戴维森

9
“邮编很愚蠢,仅支持...”-我不同意这种评估。仅仅因为简单就意味着愚蠢。简单是一种优点,在分布式安装程序中很少(通常不可见)具有任何值的文件元数据。

14
@Dai他的意思是愚蠢的,愚蠢的。该程序不知道它在做什么-不是说它没有用。
蒂姆(Tim)

3
我想ZIP并不是一个很好的比较。为什么不压缩TAR之类的tar.gz?它确实存储权限。
Ruslan

2
@Dai,“在分布式安装程序中,很少有文件元数据具有(通常是不可见的)任何值” –在许多其他平台上都适用,但是Apple在“资源分叉”中存储关键内容(例如图标!)已有很长的历史(这些天,xattrs)。
Charles Duffy

3

Mac软件可以作为.app应用程序捆绑包(实质上是包含所有程序资源的文件夹)或作为.pkg安装程序提供,该安装程序是一种以类似于Windows的方式安装应用程序的程序。

仅命令行工具可用作纯二进制文件,然后将其复制到用户的某个位置(PATH例如)/usr/local/bin

这些可以打包为OS X / macOS磁盘映像(.dmg)或传统的存档格式,例如.zip.tar


需要使用这种“虚拟磁盘”安装软件的逻辑是什么?

这在很大程度上取决于开发人员。A .dmg只是一个虚拟硬盘驱动器,而不是安装程序。使用a的选择.dmg是关于包装而不是安装。

如果应用程序是简单的.app捆绑软件,则它是独立的,可以通过双击运行它。/Applications为了方便起见,通常将其复制到。

除了打开时的加密和EULA以外,.dmg存档类型的好处还在于品牌。.dmg可以给s自定义图标,自定义背景图像和内容的布局。.dmgs通常也是只读的,因此内容将保持与开发人员预期的相同。

它们还迫使用户选择他们想要应用程序的位置。解压缩档案文件时,内容通常会提取到档案文件所在的位置。相反,.dmgs将挂载在文件系统中,然后.app必须显式复制分发包。


为什么它不以简单的二进制文件形式出现,或者我不知道呢?

Mac应用程序不仅仅是二进制文件。除了二进制文件(位于<appname>.app/Contents/MacOS/),.app还包含中的许多资源<appname>.app/Contents/Resources/。这些资源包括图标,图形和本地化文件,例如en.lproj


2

.dmg文件除了软件安装以外还有其他用途吗?

关于DMG的另一个有用功能(自您询问其他用途以来)是能够创建加密的存储空间并将文件存储在该受保护的空间中。如果要保护某些文件但不加密整个主硬盘,则很有用。

有关创建加密的.dmg文件的更多信息,请参见macOS Sierra的磁盘实用程序:使用磁盘实用程序创建磁盘映像


但是,无需加密就可以进行加密.dmg。Unix不加密吗?
Pacerier '18

@ Pacerier-可以肯定的是-像Linux / Unix上的所有东西一样,有多种方法可以做某事。
肯(Ken)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.