ฉันติดตั้งแพ็คเกจจำนวนมากจาก PPA จำนวนมากบนระบบของฉัน ฉันต้องการแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งซึ่งติดตั้งจาก launchpad PPA ไม่ใช่ที่เก็บ
เป็นไปได้ผ่าน command-line?
ฉันติดตั้งแพ็คเกจจำนวนมากจาก PPA จำนวนมากบนระบบของฉัน ฉันต้องการแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งซึ่งติดตั้งจาก launchpad PPA ไม่ใช่ที่เก็บ
เป็นไปได้ผ่าน command-line?
คำตอบ:
คำสั่งต่อไปนี้จะคืนชื่อแพ็กเกจและ ppa ของมัน (หากติดตั้งจาก 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}'
รายละเอียด:
dpkg --get-selections
ให้เฉพาะแพ็คเกจที่ติดตั้งหลังจากนั้น grep -v deinstall$
awk '{ print $1 }'
ส่งคืนเฉพาะชื่อแพ็กเกจperl -e '@a = <>; $a=join("", @a)'
เชื่อมต่อทุกบรรทัดที่ส่งคืนโดย apt-cache policy
$a =~ s/\n(\S)/\n\n$1/g;
เพิ่มบรรทัดใหม่ระหว่างแต่ละส่วนของแพ็คเกจ@packages = split("\n\n", $a);
เป็นอาร์เรย์ perl ที่มี infos แพ็คเกจทั้งหมดหนึ่งแพ็คเกจต่อรายการforeach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}
เป็นลูปที่แพ็กเกจและ ppa ถูกพิมพ์หากพบ ppa ที่มี prio 500 ในนโยบายaptitude
sources.list
คำสั่งด้านล่างแสดงรายการแพคเกจการติดตั้งสำหรับการใช้งานในสัญญาซื้อขายไฟฟ้าของ
aptitude search '?narrow(?installed, ~Oppa)'
การอ้างอิง: ความถนัด - การอ้างอิงคำค้นหา
aptitude
+1
ตามคำตอบนี้และโพสต์นี้คุณจะได้รับรายชื่อของแพ็คเกจทั้งหมดจาก 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
ตอนนี้เรามารวมแนวคิดสองข้อนี้เพื่อรับรายการแพ็คเกจทั้งหมดที่ติดตั้งจาก PPAs:
(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'
แหล่งที่มาของแพคเกจติดตั้งสามารถตรวจสอบได้โดยใช้apt-cache
ตัวอย่างเช่น
$ 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
ผลลัพธ์ของapt-cache policy <package_name>
ประกอบด้วยแหล่งที่มา
หนึ่งสามารถใช้สคริปต์ต่อไปนี้เพื่อรับรายการแพคเกจติดตั้งจาก PPAs
#!/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
นี้ไม่ได้ติดตั้งจาก PPA มันมีที่เก็บแยกต่างหาก