จะแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งจาก PPA ได้อย่างไร?


23

ฉันติดตั้งแพ็คเกจจำนวนมากจาก PPA จำนวนมากบนระบบของฉัน ฉันต้องการแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งซึ่งติดตั้งจาก launchpad PPA ไม่ใช่ที่เก็บ

เป็นไปได้ผ่าน command-line?


เป็นไปได้ซ้ำไหม askubuntu.com/questions/43581/…
มิทช์

ไม่ใช่เป็นอีกอันหนึ่ง
Avinash Raj

1
ไม่ได้เป็นอรรถประโยชน์บรรทัดคำสั่ง แต่มีประโยชน์มากคือY PPA ผู้จัดการ แสดงรายการติดตั้งและลบแพ็คเกจออกจาก PPA
Jos

คำตอบ:


23

คำสั่งต่อไปนี้จะคืนชื่อแพ็กเกจและ 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 ในนโยบาย

คำตอบสั้น ๆ / รหัสเวลา looong สำหรับการดำเนินการ
Radu Rădeanu

@Avinash: คุณทดสอบคำตอบของฉันหรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถโปรดยอมรับมันได้ไหม? ขอบคุณ
Sylvain Pineau

7

aptitudesources.listคำสั่งด้านล่างแสดงรายการแพคเกจการติดตั้งสำหรับการใช้งานในสัญญาซื้อขายไฟฟ้าของ

aptitude search '?narrow(?installed, ~Oppa)'

การอ้างอิง: ความถนัด - การอ้างอิงคำค้นหา


1
ความสามารถที่ยอดเยี่ยมอีกประการหนึ่งของaptitude +1
Ravexina

3

ตามคำตอบนี้และโพสต์นี้คุณจะได้รับรายชื่อของแพ็คเกจทั้งหมดจาก 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'

3

แหล่งที่มาของแพคเกจติดตั้งสามารถตรวจสอบได้โดยใช้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

1
ไม่ทำงานหากคุณเลือกมิเรอร์อื่น เช่นฉันมีgir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

ในกรณีgoogle-chrome-stableนี้ไม่ได้ติดตั้งจาก PPA มันมีที่เก็บแยกต่างหาก
Radu Rădeanu

ตกลงฉันเห็นอย่างนั้น แต่คุณมาพร้อมกับตัวอย่างที่ไม่ดีจริง ๆ ซึ่งสามารถทำให้ผู้ใช้มือใหม่คิดว่าถ้าแพ็กเกจไม่ได้มาจากที่เก็บของ Ubuntu แพคเกจนั้นมาจาก PPA คำถามของ OP เกี่ยวกับ PPAs
Radu Rădeanu

@ RaduRădeanuฉันได้รับคะแนนของคุณและแก้ไขโพสต์ของฉัน คุณถูกต้องอย่างแน่นอน
souravc

ดีกว่าตอนนี้แม้ว่าจะมีปัญหากับเวลาในการดำเนินการซึ่งเป็น looong ที่แท้จริง
Radu Rădeanu

1

ติดตั้งsynaptic จากนั้นคุณสามารถเรียกดูแพ็คเกจโดย "กำเนิด" หรือแม้แต่ตัวกรองที่กำหนดเองอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.