如何卸载任何Apple pkg软件包文件?


50

尽管有相反的意见,但并非所有软件包都干净地安装在一个目录中。有没有一种方法可以逆转pkg文件的安装过程,最好是使用原始软件包(或来自有关已安装软件包的信息存储库)?

具体来说,我已经在英特尔MacBook上安装了PowerPC MySQL 5.4.1软件包,并希望彻底解决这一问题,恢复了我所看到的5.1 x86安装仍然存在,但现在无法正常工作。

Answers:


83

https://wincent.com/wiki/Uninstalling_packages_(.pkg_files)_on_Mac_OS_X介绍了如何使用native卸载.pkg pkgutil

修改摘录

$ pkgutil --pkgs # list all installed packages
$ pkgutil --files the-package-name.pkg # list installed files

目视检查文件列表后,您可以执行以下操作:

$ pkgutil --pkg-info the-package-name.pkg # check the location
$ cd / # assuming the package is rooted at /...
$ pkgutil --only-files --files the-package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 sudo rm -f
$ pkgutil --only-dirs --files the-package-name.pkg | tail -r | tr '\n' '\0' | xargs -n 1 -0 sudo rmdir

不用说,在删除具有root特权的文件时应格外小心。特别是,请注意某些软件包可能会更新共享的系统组件,因此,卸载它们实际上会通过删除必要的组件来破坏系统。

对于较小的软件包,在目视检查软件包文件列表后,仅手动删除文件可能更安全。

显然,曾经有一个--unlink可用的选项pkgutil,但是从Lion开始,它在手册页中没有提到。也许将其删除是因为它被认为太危险了。

卸载文件后,可以通过以下方式删除收据:

$ sudo pkgutil --forget the-package-name.pkg

1
我建议使用rmdir代替rm -r; 您还可以使用tactail -r反转目录名称列表,以便以正确的顺序删除目录
Sam Mason

18
不要运行sudo rm -ir PART。该列表包括父目录!因此,如果pkg在/ usr / ...中安装了某些内容,则将删除所有/ usr /
FiloSottile 2014年

2
我已更改了删除要使用的目录的命令rmdir(该命令不会删除非空目录),并用于tail -r以更好的顺序列出它们。
brablc 2014年

1
具有讽刺意味的是,当使用pgkutil时,我发现可以使用的uninstaller.pl隐藏了。完善!
cmroanirgo 2015年

pkgs似乎无法跟踪的一件事是pkgs创建的符号链接。根据上面的说明(或此处的任何方法)清理软件包可能会留下破碎的符号链接。
詹姆斯·麦克马洪

19

内置于系统中,没有使用卸载程序来卸载文件的选项,因此您可以自己创建卸载程序,也可以手动删除文件。

确定已安装哪些文件的最佳方法是.pkg尽可能保留原始文件。如果不可能,您也可以使用收据代替/Library/Receipts。最大的问题是,当您处理.mpkg包含多个.pkg文件的时,您将不得不.pkg在该文件夹中查找所有单独的文件(按日期排序并不是那么困难)。

获得.pkg文件(接收文件或完整安装文件)后,可以使用实用程序创建卸载程序或查找文件,以便可以手动删除它们:

解除安装程式

Absolute Software InstallEase是一个免费程序,可以从现有.pkg文件创建卸载程序。制作卸载.pkg程序文件(注意:您需要安装Apple的Developer Tools才能真正制作该.pkg文件)

手动地

使用诸如Pacifist之类的程序或诸如Suspicious Package之类的QuickLook插件,您可以查看哪些文件已安装以及在什么位置。然后,您可以使用该列表手动导航到这些文件夹并删除文件。在发现InstallEase之前,我曾无数次使用这种方法,但是如果安装没有在很多地方进行,这种方法通常会更快。


谢谢,虽然常规的5.1 mysql软件包没有收据,但beta 5.4 mysql软件包却没有。有点奇怪。
dlamblin

4
哇,如果我知道这一点,那么我永远都不会安装.pkg。您还没有OS X的程序和功能吗?
NobleUplift



1

我做了一个壳

你可以试试

https://github.com/iamrToday/pkg-remove

它显示了一个.gif演示,您可以看到源代码,只需包装brablc的命令行即可。您可以运行它来搜索信息,也可以删除apk。它是交互式的。


它有什么作用?
Pierre.Vriens

我展示了一个.gif演示,您可以看到源代码,只需包装brablc的命令行即可。您可以运行它来搜索信息,也可以删除apk。它是交互式的。:)
rToday
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.