ไม่มีคำจำกัดความที่เป็นทางการของ metapackage คำจำกัดความที่ไม่เป็นทางการคือ metapackage นั้นมีไว้สำหรับการอ้างอิงเท่านั้นและไม่มีไฟล์ที่เป็นประโยชน์ของตัวเอง
คุณสามารถกำหนด metapackage เป็นแพ็คเกจที่ไม่มีไฟล์ ไม่มีวิธีการตรวจสอบนี้จากฐานข้อมูลแพคเกจ คุณสามารถใช้ฐานข้อมูลไฟล์และตรวจสอบว่าแพ็คเกจมีเฉพาะไดเรกทอรี (แพ็คเกจดังกล่าวมีหลายไดเรกทอรี) อันที่จริง metapackages ส่วนใหญ่มีไฟล์อยู่สองสามไฟล์/usr/share/doc/<package name>
: copyright
ไฟล์, changelog และบางครั้งก็มีอีกสองสามไฟล์ นี่คือการประมาณที่กำหนด metapackage ว่ามีเฉพาะไฟล์ใน/usr/share/doc/<some directory>
(ไม่ใช่ในไดเรกทอรีย่อยของ) และไดเรกทอรีชั้นนำ:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
อีกวิธีหนึ่งคือการมองหาแท็กแพคเกจdebtags
ด้วย มีแท็กหลายแท็กที่ใช้กันทั่วไปใน metapackages
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
อีกวิธีคือการมองหาแพ็คเกจที่มีขนาดเล็ก แต่ละไดเรกทอรีนับเป็น 4 kB ดังนั้นวางแผนตามเมื่อเลือกขีด จำกัด (อีกครั้งนี่เป็นการประมาณ)
aptitude -F '%I %p' search "~n^$package\$"
จากการไตร่ตรองฉันสงสัยว่าคุณหมายถึงแพ็คเกจเสมือนจริงหรือเปล่ามากกว่า metapackages แพคเกจเสมือนจริงไม่ใช่แพ็คเกจ แต่เป็นชื่อแพคเกจที่ใช้ในProvides:
ฟิลด์ aptitude search '~v'
คุณสามารถแสดงรายการพวกเขาด้วย การเรียกใช้apt-cache show
บนหน้าจอหนึ่งแสดงว่า "ไม่สามารถเลือกรุ่นจากแพ็คเกจ" zcav "เนื่องจากเป็นแบบเสมือนแท้" การวิ่งaptitude show
แสดงรายการแพ็คเกจที่ให้มา วิธีที่สะดวกในการแสดงแพ็คเกจเสมือนคือapt-cache
: นี้พิมพ์หนึ่งบรรทัดสำหรับแพ็คเกจที่ไม่ใช่เสมือนและอาจมีหลายบรรทัด (หนึ่งรายการสำหรับผู้ให้บริการแต่ละราย) สำหรับแพ็คเกจเสมือน - คุณสามารถบอกได้ว่าแพคเกจนั้นเสมือนจริงแม้ว่าจะมีผู้ให้บริการรายเดียว เนื่องจากชื่อของผู้ให้บริการแตกต่างกัน
apt-cache -n search "^$package\$"