Không có định nghĩa chính thức về một siêu dữ liệu. Định nghĩa không chính thức là siêu dữ liệu là một siêu dữ liệu chỉ dành cho mục đích cài đặt cho các phần phụ thuộc của nó và không chứa tệp hữu ích nào.
Bạn có thể định nghĩa một siêu dữ liệu là một gói không chứa tệp. Không có cách nào để xác định điều này từ cơ sở dữ liệu gói. Bạn có thể sử dụng cơ sở dữ liệu tệp và kiểm tra xem gói chỉ chứa các thư mục (nhiều gói như vậy chứa một vài thư mục). Trong thực tế, hầu hết các siêu dữ liệu chứa một vài tệp trong /usr/share/doc/<package name>
: một copyright
tệp, một thay đổi, đôi khi một vài tệp nữa. Đây là một xấp xỉ xác định một siêu dữ liệu là chỉ chứa các tệp trong /usr/share/doc/<some directory>
(không phải trong thư mục con của điều đó) và các thư mục hàng đầu:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Một cách tiếp cận khác là tìm kiếm một thẻ gói với debtags
. Có một số thẻ thường được sử dụng trên các siêu dữ liệu.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Một cách tiếp cận khác là tìm kiếm các gói với kích thước nhỏ. Mỗi thư mục được tính là 4 kB, vì vậy hãy lập kế hoạch phù hợp khi chọn ngưỡng (một lần nữa, đây là một xấp xỉ).
aptitude -F '%I %p' search "~n^$package\$"
Khi phản ánh, tôi tự hỏi nếu bạn có nghĩa là các gói ảo chứ không phải là siêu dữ liệu. Các gói ảo thực sự không phải là các gói mà là các tên gói được sử dụng trong Provides:
các trường. Bạn có thể liệt kê chúng với aptitude search '~v'
. Chạy apt-cache show
trên một màn hình, không thể chọn các phiên bản từ gói 'zcav' vì nó hoàn toàn là ảo ảo. Chạy aptitude show
liệt kê các gói cung cấp nó. Một cách thuận tiện để hiển thị các gói ảo là apt-cache
: cách này in một dòng cho gói không ảo và có khả năng nhiều dòng (một cho mỗi nhà cung cấp) cho gói ảo - bạn có thể biết gói đó là ảo ngay cả khi có một nhà cung cấp duy nhất bởi vì tên của nhà cung cấp là khác nhau
apt-cache -n search "^$package\$"