จะค้นหาไฟล์ที่เป็นของแพ็คเกจใดใน Mac OS X ได้อย่างไร?


8

มีวิธีหา Application / แพ็คเกจใดที่เป็นเจ้าของหรือสร้างไฟล์เฉพาะ? ตัวอย่างเช่นใน Linux คำสั่งเหล่านี้จะแสดงเจ้าของแพ็คเกจ

apt-file /bin/progname

rpm -qf /bin/progname

yum whatprovides /bin/progname

ใน OS X ไฟล์อาจเป็นส่วนหนึ่งของแอปพลิเคชั่น OS X ดั้งเดิมหรือติดตั้งโดย Macports หรือ Homebrew เหล่านี้เป็นสภาพแวดล้อมที่แตกต่างอย่างสิ้นเชิง มีคำสั่งสำหรับแต่ละสภาพแวดล้อมในการตรวจสอบแอพพลิเคชั่น / แพ็กเกจที่เป็นเจ้าของไฟล์เฉพาะหรือไม่?

คำตอบ:


19

มันสายไปหน่อย แต่บางทีมันอาจจะช่วยคนอื่นได้

คุณสามารถใช้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


ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง คุณสามารถใช้กับแอพพลิเคชั่น 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)
juansesant

5

สิ่งนี้เป็นไปไม่ได้เนื่องจากไม่มีการจัดการแพ็คเกจที่ได้มาตรฐาน

หากคุณไม่ได้กำหนดค่า MacPort หรือ Homebrew ให้แตกต่างกันคุณจะพบไฟล์ปฏิบัติการในตำแหน่งที่ไม่มีใครใช้ ตั้งแต่ MacPorts และ Homebrew rootไม่ได้ทำงานภายใต้บัญชีผู้ใช้แยกไฟล์ที่พวกเขาสร้างมักจะเป็นเจ้าของโดยผู้ใช้หรือของคุณ

สิ่งที่เหลืออยู่คือคุณสามารถลองเดาได้จากสถานที่ปฏิบัติงานเท่านั้น นี่คือกฎบางอย่าง:

  • ใช้ MacPorts /opt/local/binและ/opt/local/sbinสำหรับ executables /opt/localทุกอย่างอยู่ภายใต้การนำหน้า

  • ใช้ Homebrew /usr/local/binสำหรับ executables /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
Neil Mayhew

1
คุณถูก. ฉันพูดถึงโปรแกรมที่อาจไม่ใช้แพ็คเกจมาตรฐานมากขึ้น ไม่รู้มากเกี่ยวกับ pkgutil เมื่อฉันเขียนคำตอบนี้
slhck

ฉันก็ไม่รู้pkgutilเหมือนกันและมันก็ฟังดูมีประโยชน์มาก
Neil Mayhew

ด้วย MacPorts คุณสามารถค้นหาว่าพอร์ตใดเป็นเจ้าของไฟล์เฉพาะโดยใช้port provides FILE
Neil Mayhew

2

ในการรวบรวมพวกเขาในที่เดียวสำหรับผู้จัดการแพ็คเกจอีกสองคนใน OSX:

สำหรับMacPorts (ตามที่ Neil กล่าวไว้ในความคิดเห็นด้านบน):

port provides /opt/local/bin/progname

สำหรับ Brewมันไม่ง่ายนัก แต่มักจะพบแพ็คเกจที่ใช้:

ls -la /usr/local/bin/progname

ซึ่งควรจะแสดง softlink ที่มีชื่อแพคเกจหรืออื่น ๆ หนึ่งสามารถใช้ข้อเสนอแนะอื่น ๆ จากการหนึ่งของเหล่านี้คำถาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.