如何手动打开.pkg文件?


60

某些应用程序包含在.pkg文件中,并要求您提供管理员密码,即使它们所做的只是将二进制文件复制到/ Applications中。

我喜欢将我的应用程序放置在〜/ Applications中,并且我不喜欢将管理权限授予并非来自母系的任何内容。

有没有一种方法可以手动打开.pkg文件并拉出应用程序?开发人员工具中有PackageMaker,但似乎没有做到这一点(它确实产生了一些输出,使我认为安装程序中实际上没有脚本或其他部分,只有应用程序)。


2
尝试unpkg
lhf 2012年

Answers:


67

如果右键单击它,然后单击“ 显示包内容”,将在“内容”文件夹中获得一些文件。(注意:如果看不到“ 显示软件包内容”,则需要打开Terminal.app并运行pkgutil --expand mystubbornpackage.pkg path/to/expand

其中一个是BOM表文件(物料清单),它变成一张收据,可用于卸载应用程序。该文件包含软件包将安装的所有内容以及安装位置的清单。要读取此文件,请使用lsbom命令。

大多数软件包(我在这里使用Office 2008)也都有一个Archive.pax.gz文件,该文件包含Installer将按照BOM文件的指示移动到各个文件夹中的所有内容。尽管将其拖到/ Applications可能会使它没有需要运行的框架,但大多数应用程序似乎都在该存档中包含.app。因此,您必须弄清楚还需要哪些其他文件以及需要它们在哪里进行工作。

此外,所有软件包都可以记录消息,如果您单击Cmd-L(或从“ 窗口”菜单中选择“ 安装程序日志”选项,则可以在生成消息时查看它们。这可能使您了解在安装过程中还安装了哪些其他东西)。如果您不信任该软件包,至少可以得到更多信息。


3
右键单击菜单中没有显示“显示包装内容”。
Thilo

3
@Thilo如果没有选择“显示软件包内容”,则pkg文件将被创建为平面文件。苹果推出平板式PKG的一对夫妇几年前
用户名

@username:那我怎么打开那些?
Thilo

10
pkgutil会做到的。您可以使用展开它,pkgutil --expand file.pkg path_to_expand并将其转换为目录样式包。
Mathew Hall

@username,“扁平化”甚至是什么意思?
Pacerier '17

34

除了Matthew Hall所说的以外,您还可以在Installer应用程序中点击Cmd-I以查看安装程序将安装哪些文件以及安装在何处。


3
+1。这样,我可以快速验证其中是否只有应用程序二进制文件,而没有其他系统范围的东西。
Thilo

7

如果您对安装程序的信任程度不足以授予安装管理权限,那么为什么要信任/ Applications中的二进制文件?

Pacifist将让您查看软件包文件。这并不一定只是让您“提取二进制文件”。


1
我也不相信二进制文件。我永远不要授予它管理权限(无论如何它都不需要)。
Thilo

3
只要您不从具有管理员权限的任何用户运行该应用程序,您的信任关系就会得到维持。不要忘记,即使是用户级别的应用程序也可以从管理员级别的流程发出请求,因此运行您实际上不信任的应用程序需要大量的工作。
bmike

@ghoppe,这是因为默认值有时无法针对用户(但应用程序创建者)进行优化。例如,我可以选择仅提取必不可少的文件,而不是安装默认提供的所有安装垃圾。例如,当下载Mysql / Java /等时
Pacerier

4

或者,您可以尝试,

sudo installer -pkg ~/Downloads/packagename.pkg -target ~/Applications/

要么

installer -pkg ~/Downloads/packagename.pkg -target ~/Applications/

不幸的是,这没有用。它仍然坚持要“在基本路径/下安装”,然后要求输入管理员密码。
Thilo

1
可以安装到使用类似方法创建的磁盘映像hdiutil create -size 200m -fs HFS+ -volname Scratch scratch.dmg,然后将文件复制到您喜欢的位置。不幸的是,您仍然需要sudo来运行安装程序。
mjs

2
  1. 成功打开程序包后,请查找前面提到的Archive.pax.gz文件。

  2. 在桌面上创建一个新的空文件夹,将其命名为任意名称。我通常将它们命名为“ xxxx”或“ zzzz”等,以使以后的输入更加容易。

  3. 按住Option键并将Archive.pax.gz文件的副本拖到桌面上的新文件夹“ xxxx”中。

    如果文件位于只读媒体内部,则可以将其拖到“ xxxx”文件夹中,而无需使用Option键来创建副本。

  4. 现在打开Terminal.app并在命令行上导航到新的“ xxxx”目录并列出目录内容,以确认其中存在Archive.pax.gz文件:

    cd ~/Desktop/xxxx
    ls -al
    
  5. 现在有两个简单的命令可以输入:

    gunzip -v Archive.pax.gz
    

    Gzip会告诉您它已将“ Archive.pax.gz”替换为“ Archive.pax”。)现在再次列出目录的内容以确认这一点。

    pax -r -f Archive.pax
    

    (您必须将-r和分开-f-rf否则将不起作用)

  6. 最后,使用再次列出目录的内容ls -al。除了Archive.pax文件,您现在还将看到目录层次结构,其中可能包含一个或多个目录。

    该目录层次结构中的文件将向您说明OS X安装程序在系统上的文件安装位置,就好像您的“ xxxx”目录是根目录“ /”一样。

  7. 然后,您可以根据需要手动将这些文件复制到它们的目的地。


3
换句话说cd ~/Desktop; cp Package.pkg/Contents/Archive.pax.gz .; gunzip -v Archive.pax.gz; pax -r -f Archive.pax。你不需要在描述的一切详细程度。
Lri 2011年

6
Lri,我提供了这么多的详细信息,以便任何专业水平的用户都可以遵循并取得成功。当然,您的隐秘版本将获得相同的结果。但是,将来可能不熟悉命令行的其他用户在阅读本文档时可能会毫无希望地迷路。
stargood 2011年

1

pkgutil --expand 为我失败,出现以下错误:

Error encountered while creating .. Error 17: File exists

但是我设法用以下方法提取文件xar

xar -xvf foo.pkg


1
这对我有用。但是很显然,如果给pkgutil一个不存在的目录作为目的地,这将使17错误消失。
迈克尔

1

检查软件包文件的最佳工具是Suspicious Package。它还允许您从文件中复制文件。

它不仅会在应用程序中提供您所需的所有信息,还会安装一个Quick Look插件,因此只需选择软件包文件并单击空格键,即可打开包含最基本信息的窗口。


0

取档可以做到这一点; 它的作用与pkgutil --expand拖放相同。无论如何,它是Apple的Archive Utility.app的更好替代。


0

UnArchiver做到了这一点。

安装UnArchiver,打开UnArchiver;打开时-双击该讨厌的东西MAMP_MAMP_3.5.pkg

请按照以下步骤安装MAMP。

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.