PPA에서 설치된 모든 패키지를 나열하는 방법은 무엇입니까?


23

시스템에 많은 PPA의 많은 패키지를 설치했습니다. 저장소가 아닌 런치 패드 PPA에서 설치된 모든 설치된 패키지를 나열하려고합니다.

이것은 명령 줄을 통해 가능합니까?



아닙니다. 다른 것입니다.
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 배열입니다 (항목 당 하나의 패키지).
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} 정책에서 prio 500이 포함 된 ppa가 발견되면 패키지 및 ppa가 인쇄되는 루프입니다.

짧은 답변 / 코드, 실행 시간이 충분합니다.
Radu Rădeanu

@ Avinash : 내 대답을 테스트 했습니까? 그렇다면 받아 들일 것을 고려할 수 있습니까? 감사.
Sylvain Pineau

7

aptitude아래의 명령은의 활성 PPA에 대해 설치된 패키지 목록을 보여줍니다 sources.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

이제이 두 가지 아이디어를 결합하여 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

설치된 패키지의 소스는 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>소스 를 포함합니다.

다음 스크립트를 사용하여 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
다른 미러를 선택한 경우 작동하지 않습니다. 예를 들면 다음과 같습니다gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

이 경우 google-chrome-stablePPA에서 설치되지 않습니다. 별도의 저장소 만 있습니다.
Radu Rădeanu

알았어 그러나 초보 사용자가 패키지가 Ubuntu 리포지토리의 패키지가 아닌 경우 패키지가 PPA의 패키지라고 생각할 수있는 나쁜 예가 있습니다. OP의 질문은 PPA에 관한 것입니다.
Radu Rădeanu

@ RaduRădeanu 당신의 포인트를 얻었고 내 게시물을 편집했습니다. 당신은 절대적으로 정확합니다.
souravc

실행 시간에 문제가 있어도 실제로 더 좋았습니다.
Radu Rădeanu

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.