Bagaimana cara mengetahui file milik paket mana di Mac OS X?

8

Apakah ada cara untuk mengetahui Aplikasi / paket mana yang memiliki atau membuat file tertentu? Sebagai contoh, di Linux perintah ini akan menampilkan pemilik paket

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

Di OS X, file bisa menjadi bagian dari aplikasi OS X asli, atau diinstal oleh Macports atau Homebrew. Ini adalah lingkungan yang sangat berbeda. Apakah ada perintah untuk setiap lingkungan untuk memeriksa aplikasi / paket mana yang memiliki file tertentu?

hanxue
sumber

Jawaban:

19

Ini sedikit terlambat, tapi mungkin itu akan membantu orang lain.

Anda bisa menggunakan pkgutilperintah.

Misalnya, jika Anda ingin tahu paket apa yang dimiliki oleh perintah "less" untuk dijalankan:

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

Yang akan menampilkan sesuatu seperti:

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

Untuk daftar semua file yang terkandung dalam paket, com.apple.pkg.BaseSystemBinariesdalam contoh kami, jalankan:

pkgutil --files com.apple.pkg.BaseSystemBinaries

Saya tahu alat ini telah ada sejak OS X 10.6.

Bhavin
sumber
Ini harus ditandai sebagai jawaban yang benar. Anda bahkan dapat menggunakannya dengan aplikasi GUI. Coba pkgutil --file-info /Applications/TextEdit.app, dan Anda akan mendapatkan bahwa itu milik com.apple.pkg.Essentials, tetapi juga akan memberi tahu Anda siapa pembaru yang telah menerapkannya (dalam kasus saya, 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

Ini tidak benar-benar mungkin karena tidak ada manajemen paket standar.

Kecuali Anda mengonfigurasi MacPorts atau Homebrew secara berbeda, Anda akan selalu menemukan executable mereka di lokasi yang tidak digunakan orang lain. Karena MacPorts dan Homebrew tidak berjalan di bawah akun pengguna yang terpisah, file yang mereka buat akan selalu dimiliki oleh pengguna atau root.

Yang tersisa adalah Anda hanya bisa mencoba menebak berdasarkan lokasi yang dapat dieksekusi. Berikut ini beberapa aturan:

  • MacPorts menggunakan /opt/local/bindan /opt/local/sbinuntuk executable, semuanya diawali di bawah /opt/local.

  • Homebrew menggunakan /usr/local/binuntuk executable, semua lainnya di bawah /usr/local/.

  • Aplikasi lain harus membuat direktori mereka sendiri di suatu tempat di bawah /usr, misalnya /usr/local/git/binuntuk installer Git OS X atau /usr/X11/binuntuk X11.

  • Beberapa kerangka kerja sistem berhubungan dengan /usr/bin, misalnya rakemenunjuk/System/Library/Frameworks/Ruby.framework

  • Tidak boleh ada aplikasi yang menggunakan /binatau /sbin. Tidak ada aplikasi pihak ketiga (yaitu apa pun yang bukan kerangka OS X) yang boleh digunakan /usr/bin.

slhck
sumber
Tidak benar tidak ada manajemen paket standar. Mac OS X menginstal hampir semua perangkat lunak dari paket (menggunakan Installer) dan menyimpan catatan. Lihat jawaban dari @bhavin.
Neil Mayhew
1
Kamu benar. Saya lebih banyak berbicara tentang program yang mungkin tidak menggunakan paket standar. Tidak tahu banyak tentang pkgutil ketika saya menulis jawaban ini.
slhck
Saya juga tidak tahu pkgutil, dan kedengarannya cukup praktis.
Neil Mayhew
Dengan MacPorts, Anda dapat mengetahui port mana yang memiliki file tertentu menggunakanport provides FILE
Neil Mayhew
2

Untuk mengumpulkannya di satu tempat untuk dua manajer paket lain di OSX:

Untuk MacPorts (sebagaimana disebutkan oleh Neil dalam komentar di atas):

port provides /opt/local/bin/progname

Untuk Brew itu tidak begitu sederhana tetapi orang biasanya dapat menemukan paket menggunakan:

ls -la /usr/local/bin/progname

Yang harus menunjukkan softlink yang berisi nama paket, atau orang dapat menggunakan saran lain dari salah satu pertanyaan ini .

Pierz
sumber