मैक ओएस एक्स में किस पैकेज का पता लगाना है?


8

क्या यह पता लगाने का कोई तरीका है कि कौन सा एप्लिकेशन / पैकेज किसी विशिष्ट फ़ाइल का स्वामी है या बनाता है? उदाहरण के लिए, लिनक्स में ये कमांड पैकेज मालिक को दिखाएंगे

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 के अंतर्गत आता है, लेकिन आपको यह भी बताएगा कि इस पर कौन से updaters लागू किए गए हैं (मेरे मामले में, com.apple.pkg.update.os.10.10.1.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/binGit OS X इंस्टॉलर के लिए या /usr/X11/binX11 के लिए।

  • कुछ सिस्टम ने सहिष्णुता को ढाँचा दिया /usr/bin, उदाहरण के rakeलिए/System/Library/Frameworks/Ruby.framework

  • किसी भी एप्लिकेशन को कभी भी उपयोग नहीं करना चाहिए /binया /sbin। किसी भी तीसरे पक्ष के आवेदन (यानी कुछ भी नहीं एक ओएस एक्स ढांचे) /usr/binया तो उपयोग करना चाहिए ।


यह सच नहीं है कि कोई मानकीकृत पैकेज प्रबंधन नहीं है। मैक ओएस एक्स पैकेज (इंस्टॉलर का उपयोग करके) और कीप रिकॉर्ड से लगभग सभी सॉफ़्टवेयर स्थापित करता है। @Bhavin से उत्तर देखें।
नील मेव्यू

1
आप सही हे। मैं उन कार्यक्रमों के बारे में अधिक बात कर रहा था जो शायद मानक पैकेज का उपयोग नहीं कर सकते हैं। Pkgutil के बारे में ज्यादा नहीं पता था जब मैंने यह जवाब लिखा था।
slhck

मैं pkgutilया तो इसके बारे में नहीं जानता था , और यह बहुत आसान लगता है।
नील मैय्यूज

MacPorts के साथ, आप यह पता लगा सकते हैं कि कौन सा पोर्ट किसी विशेष फ़ाइल का उपयोग कर रहा हैport provides FILE
Neil Mayhew

2

OSX पर दो अन्य पैकेज प्रबंधकों के लिए उन्हें एक स्थान पर एकत्र करने के लिए:

के लिए MacPorts (जैसा कि ऊपर टिप्पणी में नील ने उल्लेख किया):

port provides /opt/local/bin/progname

के लिए ब्रियू यह इतना आसान है, लेकिन एक आम तौर पर उपयोग करते हुए पैकेज पा सकते हैं:

ls -la /usr/local/bin/progname

जो एक Softlink पैकेज का नाम, वरना एक से अन्य सुझावों उपयोग कर सकते हैं कि दिखाना चाहिए एक इनमें से सवाल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.