Làm cách nào tôi có thể liệt kê tất cả các gói tôi đã cài đặt từ một kho lưu trữ cụ thể?


51

Làm cách nào tôi có thể liệt kê tất cả các gói tôi đã cài đặt từ một kho lưu trữ cụ thể?

Làm cách nào tôi có thể liệt kê tất cả các gói đã cài đặt không có sẵn từ kho lưu trữ chính của Ubuntu và cũng xem chúng được lưu trữ từ đâu? (Nếu tôi biết câu trả lời cho câu hỏi này, tôi có thể grep danh sách đó cho một tên PPA cụ thể để tìm ra câu trả lời cho câu hỏi đầu tiên của tôi.)


Vì dường như không có một công cụ dòng lệnh nào cho việc này (đáng buồn thay), tôi sẽ chấp nhận một trong những câu trả lời GUI.
Marius Gedminas

Câu trả lời:


24

Mở rộng mục "Phần mềm đã cài đặt" trong Trung tâm phần mềm Ubuntu. Bạn sẽ thấy một danh sách tất cả các kho lưu trữ khác nhau mà bạn đã kích hoạt. Nhấp vào repo sẽ hiển thị cho bạn các gói bạn đã cài đặt từ mỗi gói.

văn bản thay thế


Tôi sợ rằng tùy chọn đó chỉ có sẵn trong Ubuntu 10.10 hoặc tôi đang thiếu thứ gì đó? Trung tâm phần mềm của tôi không hiển thị các nguồn bên dưới menu đó.
lovlinux

2
Trong phiên bản của tôi, tôi có một danh sách thả xuống "Đã cài đặt" ở trên cùng. Khi tôi chọn tùy chọn đó, tôi có thể chọn các nguồn khác nhau (cốt lõi, cho người mua, PPA ...)
Alexis Wilke

Trong Ubuntu 16.04, trang này không còn nữa. Tuy nhiên, synaptic có một tính năng tương tự - nhấp vào "Origin" ở phía dưới bên trái.
Josh

26

Dường như không có hồ sơ về nguồn gốc của một gói được cài đặt .

Nếu bạn ổn với việc lấy vị trí từ đâu thì một gói cùng tên sẽ được tải xuống từ đó, điều này có sẵn thông qua apt-cache policy. Kịch bản (khá xấu xí) sau đây thực hiện thủ thuật cho tôi:

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

Lưu ý rằng nó khá dễ vỡ, vì nó đưa ra các giả định về đầu ra apt-cache policy, có thể thay đổi giữa các phiên bản ...


Vâng, điều này về cơ bản có nghĩa là viết một công cụ từ đầu. Và tôi nghĩ rằng phân tích cú pháp / var / lib / apt / list bằng Perl hoặc Python sẽ nhanh hơn và mạnh hơn.
Marius Gedminas

Hoạt động bình thường tại đây, năm 2018 :) Cảm ơn bạn!
N0rbert

Tôi đã phát triển một giải pháp tương tự được thử nghiệm trên Ubuntu và Debian.
famzah

23

Mở Trình quản lý gói Synaptic và nhấp vào nút "Xuất xứ" ở dưới cùng của thanh bên trái. Nó sẽ liệt kê các nguồn của bạn. Chọn một nguồn để xem các gói có sẵn / cài đặt.


4

Tập lệnh này liệt kê các gói được cài đặt và có sẵn trong PPA:

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

Tôi đã áp dụng điều này .

BTW Đối với việc loại bỏ PPA khỏi sử dụng, sử dụng chương trình ppa-purge; Tôi đã tạo ra một phiên bản cải tiến của nó ở đây .


3

Trong Quantal (12.10), không gian trong dòng gốc cần được loại bỏ.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
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.