Câu trả lời:
Theo chủ đề này :
Để liệt kê các gói đã cài đặt:
dpkg --list | wc --lines
Để xem nếu một gói được cài đặt:
dpkg --list | grep package
dpkg -l | grep -c '^ii'
Có các biến thể tinh tế như dpkg -l | grep -c '^?i'
nếu bạn muốn bao gồm các gói được cài đặt nhưng loại bỏ bạn đã yêu cầu. Một cách khác là
aptitude search '~i' |wc -l
Bạn thậm chí có thể chọc trực tiếp vào cơ sở dữ liệu dpkg:
sh -c 'set /var/lib/dpkg/info/*; echo $#'
Gói này bao gồm các gói không được cài đặt nhưng có các tệp cấu hình còn sót lại; bạn có thể liệt kê những thứ này với dpkg -l | grep '^rc'
.
Những gì tôi đã sử dụng là:
dpkg --get-selections | wc --lines
Điều này sẽ cung cấp cho bạn số lượng các gói cài đặt.
Nếu bạn muốn tìm nếu một gói cụ thể được cài đặt, hãy sử dụng:
dpkg --get-selections | grep <package>
Tôi tin rằng điều này sẽ giải quyết khiếu nại của Gilles về việc bao gồm các gói không cài đặt khác .
Nếu bạn muốn số lượng gói chính xác, bạn không nên đếm đầu ra của dòng tiêu đề dpkg-query -l
, vì vậy bạn cần một mẫu để khớp với các dòng bắt đầu bằng ii
. Một lớp lót sau đây cung cấp cho bạn số lượng dòng bắt đầu ii
và do đó số lượng gói được cài đặt:
dpkg-query -l | grep "^ii" | wc -l
Điều này cho cùng một đầu ra như
dpkg --get-selections | grep "[[:space:]]install" | wc -l
Mẫu grep trong lệnh thứ hai bỏ qua các dòng có chứa chuỗi "deinstall" trong đầu ra của dpkg --get-selections
.
Đối với instace, bạn có thể làm điều này:
dpkg-query -l | nl | tail -1 | awk '{print $1}'
nl | tail -1 | awk '{print $1}'
sẽ báo cáo số lượng dòng trong đầu vào của nó (ngoại trừ, nếu không có đầu vào, nó sẽ không nói gì thay vì báo cáo 0
) - nhưng tại sao bạn lại đề xuất loại bùn như vậy khi các câu trả lời khác đang sử dụng wc -l
?
rc
(đã gỡ cài đặt nhưng với các tệp cấu hình còn sót lại)) trong số của bạn.