Come scoprire un file appartiene a quale pacchetto in Mac OS X?


8

C'è un modo per scoprire quale Applicazione / pacchetto possiede o crea un file specifico? Ad esempio, in Linux questi comandi mostreranno il proprietario del pacchetto

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

In OS X, un file potrebbe far parte di un'applicazione OS X nativa o installato da Macports o Homebrew. Questi sono ambienti completamente diversi. Esistono comandi per ciascun ambiente per verificare quale applicazione / pacchetto possiede un file specifico?

Risposte:


19

È un po 'tardi, ma forse sarà di aiuto per gli altri.

Puoi usare il pkgutilcomando

Ad esempio, se vuoi sapere a quale pacchetto appartiene il comando "less" per eseguire:

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

Che produrrà qualcosa di simile:

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

Per elencare tutti i file contenuti in un pacchetto, com.apple.pkg.BaseSystemBinariesnel nostro esempio, eseguire:

pkgutil --files com.apple.pkg.BaseSystemBinaries

So che questo strumento è presente da OS X 10.6.


Questo dovrebbe essere contrassegnato come la risposta giusta. Puoi persino usarlo con le applicazioni della GUI. Prova pkgutil --file-info /Applications/TextEdit.appe otterrai che appartiene a com.apple.pkg.Essentials, ma ti dirà anche quali programmi di aggiornamento sono stati applicati ad esso (nel mio caso, 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,

5

Questo non è davvero possibile poiché non esiste una gestione dei pacchetti standardizzata.

A meno che tu non abbia configurato MacPorts o Homebrew in modo diverso, troverai sempre i loro eseguibili in una posizione che nessun altro usa. Poiché MacPorts e Homebrew non vengono eseguiti con un account utente separato, i file che creano saranno sempre di proprietà dell'utente o root.

Ciò che rimane è che puoi provare a indovinare solo in base alla posizione dell'eseguibile. Ecco alcune regole:

  • MacPorts utilizza /opt/local/bine /opt/local/sbinper gli eseguibili tutto con prefisso /opt/local.

  • Homebrew utilizza /usr/local/binper eseguibili, tutto il resto sotto /usr/local/.

  • Altre applicazioni dovrebbero creare le proprie directory da qualche parte sotto /usr, ad esempio /usr/local/git/binper il programma di installazione di Git OS X o /usr/X11/binper X11.

  • Alcuni framework di sistema si collegano simbolicamente a /usr/bin, ad esempio rakepunta a/System/Library/Frameworks/Ruby.framework

  • Nessuna applicazione dovrebbe mai usare /bino /sbin. Nessuna applicazione di terze parti (vale a dire qualcosa che non sia un framework OS X) dovrebbe usare /usr/binneanche.


Non è vero non esiste una gestione dei pacchetti standardizzata. Mac OS X installa quasi tutto il software dai pacchetti (utilizzando il programma di installazione) e mantiene una registrazione. Vedi la risposta di @bhavin.
Neil Mayhew,

1
Hai ragione. Stavo più parlando dei programmi che potrebbero non usare i pacchetti standard. Non sapevo molto di pkgutil quando ho scritto questa risposta.
Slhck,

Neanche io ne sapevo nulla pkgutil, e sembra abbastanza utile.
Neil Mayhew,

Con MacPorts, puoi scoprire quale porta possiede un determinato file usandoport provides FILE
Neil Mayhew,

2

Per raccoglierli in un posto per gli altri due gestori di pacchetti su OSX:

Per MacPorts (come menzionato da Neil nei commenti sopra):

port provides /opt/local/bin/progname

Per Brew non è così semplice ma di solito si può trovare il pacchetto usando:

ls -la /usr/local/bin/progname

Che dovrebbe mostrare un softlink che contiene il nome del pacchetto, oppure si possono usare altri suggerimenti da una di queste domande .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.