Як дізнатися, який файл належить до якого пакета в Mac OS X?


8

Чи є спосіб дізнатися, який додаток / пакет є власником або створює певний файл? Наприклад, в Linux ці команди покажуть власника пакета

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

У OS X файл може бути частиною нативного додатка OS X або встановлений Macports або Homebrew. Це абсолютно різні середовища. Чи є команди для кожного середовища, щоб перевірити, яка програма / пакет має певний файл?

Відповіді:


19

Трохи пізно, але, можливо, це допоможе іншим.

Ви можете використовувати pkgutilкоманду.

Наприклад, якщо ви хочете знати, до якого пакета належить виконати команду "менше":

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.Essentials, але також розповість, які оновники були застосовані до нього (у моєму випадку 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).
юндесант

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 встановлює майже все програмне забезпечення з пакетів (за допомогою Інсталятора) і зберігає запис. Дивіться відповідь від @bhavin.
Ніл Мейхью

1
Ти правий. Я більше говорив про програми, які можуть не використовувати стандартні пакети. Не знав багато про pkgutil, коли я писав цю відповідь.
slhck

Я про це не знав pkgutil, і це звучить досить зручно.
Ніл Мейхью

За допомогою MacPorts ви можете дізнатися, яким портом належить певний файл, використовуючиport provides FILE
Ніл Мейхью,

2

Щоб зібрати їх в одному місці для двох інших менеджерів пакетів на OSX:

Для MacPorts (як згадував Ніл у коментарях вище):

port provides /opt/local/bin/progname

Для Brew це не так просто, але зазвичай можна знайти пакунок, використовуючи:

ls -la /usr/local/bin/progname

У якому має відображатися програмне посилання, яке містить назву пакета, або ж можна використовувати інші пропозиції з одного з цих питань .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.