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?
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âu trả lời:
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óiperl -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.aptitude
lệnh bên dưới hiển thị danh sách các gói đã cài đặt cho PPA đang hoạt động sources.list
.
aptitude search '?narrow(?installed, ~Oppa)'
Tham khảo: năng khiếu - Tìm kiếm thuật ngữ tham khảo
aptitude
+1
Phù hợp với câu trả lời này và bà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'
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
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
google-chrome-stable
này không được cài đặt từ PPA; nó chỉ có một kho lưu trữ riêng
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.