Phân biệt giữa apt-cache và dpkg -l


9

Tôi sử dụng pkgname apt-cache để lấy các gói như

me@host:~$ apt-cache pkgnames | wc -l
62803

nhận được 62804 kết quả

nhưng

me@host:~$ dpkg -l | wc -l
2336

Những lý do dẫn đến một sự khác biệt lớn như vậy. Tôi đoán rằng dpkg là siêu hơn apt.


2
Có thể trùng lặp dpkg-query so với apt-cache
Olorin

@Olorin Tôi đã bỏ phiếu để lại câu hỏi này. Chúng trùng lặp hoàn toàn, nhưng tôi muốn hướng của sự trùng lặp được đảo ngược và dpkg-query vs apt-cache sẽ được đóng lại như một bản sao của câu hỏi này.
karel

Câu trả lời:


16

aptlà để quản lý kho từ xa, dpkg- cho các gói được cài đặt cục bộ. Chúng có liên quan. aptlà kết thúc trước dpkg. Khi bạn chạy apt-get install packagenó sẽ nhận được .debtập tin và cài đặt nó thông qua dpkg. Vì vậy, số lượng khác nhau vì có rất nhiều gói có sẵn, nhưng chỉ một phần được cài đặt cục bộ trên hệ thống của bạn.

apt-cachecó thể hiển thị cả gói đã cài đặt và chưa cài đặt, vì nó truy vấn aptbộ đệm - liệt kê những thứ có sẵn trong kho từ xa (bộ đệm đó là thứ bạn nhận được khi bạn làm apt-get update). Ví dụ,

$ apt-cache policy terminator
terminator:
  Installed: (none)
  Candidate: 1.91-1


$ dpkg -l terminator
dpkg-query: no packages found matching terminator

Lưu ý rằng có một công cụ khác có thể truy vấn danh sách các gói cục bộ đã cài đặt / gỡ bỏ và đó là dpkg-query. Ví dụ,

$ dpkg-query -l 'libc6'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

$ dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

Theo hướng dẫn sử dụng dpkg

dpkg cũng có thể được sử dụng làm giao diện người dùng cho dpkg-deb (1) và dpkg-query (1). Danh sách các hành động được hỗ trợ có thể được tìm thấy sau này trong phần HÀNH ĐỘNG. Nếu bất kỳ hành động nào gặp phải, dpkg chỉ chạy dpkg-deb hoặc dpkg-query với các tham số được cung cấp cho nó, nhưng hiện tại không có tùy chọn cụ thể nào được chuyển cho chúng, để sử dụng bất kỳ tùy chọn nào như vậy, back-end cần được gọi trực tiếp.

Theo như vậy dpkg-query, cần lưu ý rằng công cụ này tập trung vào truy vấn cơ sở dữ liệu của các gói đã cài đặt và có thể xuất thông tin ở định dạng cụ thể ( -ftùy chọn cộng với -Whành động). Ví dụ,

$ dpkg-query -W -f='PACK:${Package}\nARCH:${Architecture}\nSTAT:${Status}\n---\n' libc6
PACK:libc6
ARCH:amd64
STAT:install ok installed
---
PACK:libc6
ARCH:i386
STAT:install ok installed
---

Thật thú vị, cơ sở dữ liệu dpkg duy trì danh sách các gói được chọn để loại bỏ hoặc đã bị xóa tại một số điểm . dpkg-querycũng có thể lấy mẫu toàn cầu làm đối số và tùy thuộc vào sự hiện diện của nó mà chỉ hiển thị các gói đã cài đặt / cấu hình hoặc tất cả các gói.


2

dpkg -l hiển thị các phiên bản gói đã cài đặt của bạn (bắt đầu bằng ii), các phiên bản đã xóa (RC) và một số phiên bản khác (ví dụ: đã cài đặt nhưng không được định cấu hình, xem trang hướng dẫn).

pkgnames apt-cache hiển thị cho bạn tất cả các tên gói có sẵn (nhưng không phải là phiên bản của cùng một gói) trong kho được thêm vào.

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.