Làm thế nào để liệt kê tất cả các gói được cài đặt từ PPA?


23

Tôi đã cài đặt nhiều gói từ nhiều PPA trên hệ thống của mình. Tôi muốn liệt kê tất cả các gói đã cài đặt được cài đặt từ PPA của launchpad, không phải kho lưu trữ.

Điều này có thể thông qua dòng lệnh?


Có thể trùng lặp? Askubfox.com/questions/43581/ trộm
Mitch

Không. Một cái khác.
Avinash Raj

1
Không phải là tiện ích dòng lệnh, nhưng rất hữu ích là Y PPA Manager . Liệt kê, cài đặt và xóa các gói khỏi PPA.
Jos

Từ một PPA nhất định: Askubfox.com/questions/5976/ Hãy
Ciro Santilli 改造

Câu trả lời:


23

Lệnh sau trả về tên gói và ppa của nó (nếu được cài đặt từ ppa):

apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g;  @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'

Chi tiết:

  • dpkg --get-selections chỉ cung cấp các gói đã cài đặt sau grep -v deinstall$
  • awk '{ print $1 }' chỉ trả về tên gói
  • perl -e '@a = <>; $a=join("", @a)' nối tất cả các dòng được trả về bởi apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; thêm một dòng mới giữa mỗi phần gói
  • @packages = split("\n\n", $a); là một mảng perl chứa tất cả các gói infos, một gói cho mỗi mục.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} là một vòng lặp trong đó gói và ppa được in nếu tìm thấy ppa với pro 500 trong chính sách.

Câu trả lời ngắn / mã, thời gian thực hiện ngắn.
Radu Rădeanu

@Avinash: bạn đã kiểm tra câu trả lời của tôi chưa? Nếu vậy bạn có thể vui lòng xem xét chấp nhận nó? Cảm ơn.
Sylvain Pineau


3

Phù hợp với câu trả lời nàybài này , bạn có thể có được một danh sách tất cả các gói từ tất cả các PPA được cài đặt trên hệ thống của bạn sử dụng mã bash sau:

for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done

Và theo câu trả lời này , bạn có thể nhận được danh sách tất cả các gói đã cài đặt trong hệ thống của mình bằng cách sử dụng:

dpkg --get-selections | grep -v deinstall | cut -f1

Bây giờ, hãy tham gia hai ý tưởng này để có danh sách tất cả các gói được cài đặt từ PPA:

(for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done; dpkg --get-selections | grep -v deinstall | cut -f1) | sort | awk 'dup[$0]++ == 1'

3

Nguồn của gói đã cài đặt có thể được kiểm tra bằng cách sử dụng apt-cache, ví dụ

$ apt-cache policy oracle-java7-installer

oracle-java7-installer:
  Installed: 7u51-0~webupd8~7
  Candidate: 7u51-0~webupd8~7
  Version table:
 *** 7u51-0~webupd8~7 0
        500 http://ppa.launchpad.net/webupd8team/java/ubuntu/ precise/main i386 Packages
        100 /var/lib/dpkg/status

Đầu ra của apt-cache policy <package_name>chứa nguồn.

Người ta có thể sử dụng tập lệnh sau để lấy danh sách các gói được cài đặt từ PPA.

#!/bin/bash
echo "List of packages which are not installed from Ubuntu repository"
for i in `dpkg -l | grep "^ii" | awk '{print $2}'`
do
    j=`apt-cache policy "$i" | grep "ppa.launchpad.net"` 
    if [ $? -eq 0 ]; then
        echo "$i"
        #echo "$i $j"
    fi
done

1
Nó không hoạt động nếu bạn chọn một gương khác. Chẳng hạn, tôi cógir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

Trong trường hợp google-chrome-stablenày không được cài đặt từ PPA; nó chỉ có một kho lưu trữ riêng
Radu Rădeanu

Ok, tôi đã thấy điều đó. Nhưng bạn đã đưa ra một ví dụ thực sự tồi tệ có thể khiến người dùng mới làm quen nghĩ rằng nếu một gói không phải từ kho Ubuntu, thì gói đó là từ PPA. Câu hỏi của OP là về PPA.
Radu Rădeanu

@ RaduRădeanu Tôi đã nhận được điểm của bạn và Chỉnh sửa bài đăng của tôi. Bạn hoàn toàn chính xác.
souravc

Bây giờ tốt hơn, ngay cả khi có vấn đề với thời gian thực hiện mà thực sự rất ít.
Radu Rădeanu

1

Cài đặt synap . Sau đó, bạn có thể duyệt các gói theo "nguồn gốc" hoặc thậm chí bất kỳ bộ lọc tùy chỉnh nào khác.

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.