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 iivà 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.