Làm thế nào để xác định xem một gói là một gói meta từ dòng lệnh?


14

Làm cách nào để xác định xem một gói có phải là gói meta từ dòng lệnh, có thể thông qua apt-get, aptitude hoặc apt-cache không?

Tôi đã thử:

apt-cache show texlive-full
apt-cache showpkg texlive-full

nhưng cách duy nhất tôi có thể nói gói này là meta là đọc trường "en-description".

Có cách nào tự động hơn để làm việc này không, sẽ cho tôi câu trả lời có / không, hoặc ít nhất là có một trường như "mô tả" dành riêng cho việc này?


1
Bên cạnh thực tế là câu hỏi này và câu trả lời khá thú vị, tại sao bạn muốn biết điều này?
Joe

1
Tôi đã cài đặt công cụ với apt-get và nhận thấy rằng nếu tôi cài đặt một siêu dữ liệu (texlive-full), nó sẽ cài đặt các phụ thuộc mà tôi muốn, nhưng nếu tôi gỡ cài đặt siêu dữ liệu, các phụ thuộc sẽ ở đó (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Sau đó, tôi thấy rằng đây là trường hợp chỉ dành cho siêu dữ liệu brainstorm.ubfox.com/idea/17785 . mặt khác, năng khiếu loại bỏ các phụ thuộc không cần thiết từ một siêu dữ liệu.
Ciro Santilli 心 心

Câu trả lời:


7

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 copyrighttệ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 showtrê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 showliệ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\$"

cảm ơn vì những phương pháp đó: tôi không biết về nợ! Ngoài ra, tôi đã đọc ở đâu đó rằng khi bạn cài đặt một siêu dữ liệu với apt-get, thì chính xác như thể bạn đã cài đặt từng phụ thuộc bằng tay, có nghĩa là loại bỏ gói ban đầu sẽ không loại bỏ ngay các phụ thuộc của nó, trong khi đối với các gói thông thường, sẽ loại bỏ loại bỏ các phụ thuộc được cài đặt. Điều này có đúng không? Nếu vậy, làm thế nào apt-get có thể nói sự khác biệt? Điều này cũng có thể được khai thác ... (cũng có vẻ như năng khiếu không quan tâm đến meta của nó hay không, điều này có đúng không?)
Ciro Santilli 新疆 改造 心 心 事件 事件

@cirosantilli Tính năng tự động loại bỏ các phụ thuộc không liên quan đến siêu dữ liệu. Điều này xảy ra bởi vì nếu bạn không yêu cầu một gói rõ ràng, nó được đánh dấu là tự động cài đặt và một gói được đánh dấu là tự động cài đặt sẽ bị xóa nếu không có gói nào phụ thuộc vào nó được cài đặt. Xem apt-get autoremove, aptitude (un)markautothì Mlệnh trong giao diện tương tác năng khiếu.
Gilles 'SO- ngừng trở nên xấu xa'

@cirosantilli Sau khi phản ánh, tôi tự hỏi nếu bạn có những gì bạn nghĩ là gói ảo, và không phải là siêu dữ liệu? Xem câu trả lời cập nhật của tôi.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi thực sự không biết về các gói ảo, nhưng tôi nghĩ texlive-full không phải là ảo vì apt-cache hiển thị texlive-full hiển thị các kết quả thông thường. Mặc dù vậy, sau khi tôi đã làm apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovekhông loại bỏ tất cả các phụ thuộc được cài đặt. Tôi đã đọc ở đâu đó rằng điều này là do texlive-full là một siêu dữ liệu và đây là hành vi bình thường của một siêu dữ liệu, nhưng có lẽ điều này đã sai. mặt khác, năng lực dường như loại bỏ các phụ thuộc được cài đặt tự động tốt.
Ciro Santilli 新疆 心 心 事件

2

Bạn có thể thử nhập

apt-cache search 'metapackage | meta-package'

trong đó sẽ cung cấp cho bạn một danh sách dài, và sau đó sử dụng grepđể hiển thị tất cả các siêu dữ liệu liên quan đến khoa học với

apt-cache search 'metapackage | meta-package' | grep -i science

Điều này sẽ trả về một danh sách dài (tôi đã rút ngắn nó ở đây)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Bạn có thể sử dụng bất kỳ số lượng thay thế cho khoa học, chẳng hạn như KDEđể tìm tất cả các KDEsiêu dữ liệu.

Đây có lẽ là về điều tốt nhất bạn có thể làm với apt-cache, nhưng nó sẽ nhanh chóng xác định vị trí của hầu hết các siêu dữ liệu bạn muốn tìm. Nếu nó không tìm thấy chính xác mọi thứ bạn đang tìm kiếm, điều đơn giản nhất là tìm trong phần siêu dữ liệu trong Synaptic.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.