如何找出Mac OS X中属于哪个软件包的文件?


8

有没有办法找出哪个应用程序/程序包拥有或创建一个特定文件?例如,在Linux中,这些命令将显示软件包所有者

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

在OS X中,文件可以是本机OS X应用程序的一部分,也可以由Macports或Homebrew安装。这些是完全不同的环境。每个环境都有命令来检查哪个应用程序/程序包拥有特定文件吗?

Answers:


19

有点晚了,但也许会对其他人有所帮助。

您可以使用该pkgutil命令。

例如,如果您想知道“ less”命令属于哪个程序包,请运行:

pkgutil --file-info /usr/bin/less

它将输出类似:

volume: /
path: /usr/bin/less

pkgid: com.apple.pkg.BaseSystemBinaries
pkg-version: 10.7.0.1.1.1309742044
install-time: 1310407891
uid: 0
gid: 0
mode: 755

要列出包中包含的所有文件,com.apple.pkg.BaseSystemBinaries在我们的示例中,运行:

pkgutil --files com.apple.pkg.BaseSystemBinaries

我知道此工具自OS X 10.6起就存在。


这应该被标记为正确答案。您甚至可以将其与GUI应用程序一起使用。试试看pkgutil --file-info /Applications/TextEdit.app,您将获得它属于com.apple.pkg.Esssentials的信息,但同时还会告诉您已对其应用了哪些更新程序(在我的情况下为com.apple.pkg.update.os.10.10.2.14C109 .patch,com.apple.pkg.update.os.10.10.3.14D131.delta,com.apple.pkg.update.os.10.9.2.13C64.combo)。
juandesant '16

5

由于没有标准化的软件包管理,因此这实际上是不可能的。

除非您对MacPorts或Homebrew进行了不同的配置,否则您将始终在其他人无法使用的位置找到它们的可执行文件。由于MacPorts和Homebrew不在单独的用户帐户下运行,因此它们创建的文件将始终由您的用户或拥有root

剩下的就是您只能尝试根据可执行文件的位置进行猜测。以下是一些规则:

  • MacPorts使用/opt/local/bin/opt/local/sbin作为可执行文件,所有前缀为/opt/local

  • Homebrew /usr/local/bin用于可执行文件,其他所有内容都在之下/usr/local/

  • 其他应用程序应该建立在自己的目录中的某个地方/usr,比如/usr/local/git/bin对于Git的OS X安装或/usr/X11/bin为X11。

  • 一些系统框架符号链接到/usr/bin,例如rake指向/System/Library/Frameworks/Ruby.framework

  • 任何应用程序都不得使用/bin/sbin。任何第三方应用程序(即非OS X框架的任何东西)都不应使用/usr/bin


没有标准化的软件包管理是不正确的。Mac OS X从软件包(使用安装程序)中安装几乎所有软件,并保存keepsa记录。请参阅@bhavin的答案。
尼尔·梅休

1
你是对的。我更多是在谈论那些可能不使用标准软件包的程序。当我编写此答案时,对pkgutil的了解并不多。
slhck

我都不知道pkgutil,这听起来很方便。
尼尔·梅休

使用MacPorts,您可以使用port provides FILE
Neil Mayhew 2015年

2

要将它们收集到OSX上其他两个软件包管理器的一个位置:

对于MacPorts(如Neil在上面的评论中所述):

port provides /opt/local/bin/progname

对于Brew来说,它并不是那么简单,但是通常可以使用以下方法找到该软件包:

ls -la /usr/local/bin/progname

其中应显示包含软件包名称的软链接,否则可以使用这些问题之一的其他建议。

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.