8

Есть ли способ узнать, какое приложение / пакет владеет или создает определенный файл? Например, в Linux эти команды покажут владельца пакета

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

В OS X файл может быть частью собственного приложения OS X или установлен Macports или Homebrew. Это абсолютно разные среды. Существуют ли команды для каждой среды, чтобы проверить, какому приложению / пакету принадлежит определенный файл?

3 ответа3

17

Уже немного поздно, но, возможно, это поможет другим.

Вы можете использовать команду 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.

4

На самом деле это невозможно, поскольку нет стандартизированного управления пакетами.

Если вы не настроили 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 .

1

Чтобы собрать их в одном месте для двух других менеджеров пакетов в OSX:

Для MacPorts (как упомянуто Нейлом в комментариях выше):

port provides /opt/local/bin/progname

Для Brew это не так просто, но обычно можно найти пакет, используя:

ls -la /usr/local/bin/progname

На котором должна отображаться программная ссылка, содержащая имя пакета, иначе можно воспользоваться другими предложениями из одного из этих вопросов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .