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.
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.
Câu trả lời:
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
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.
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.