특정 리포지토리에서 설치 한 모든 패키지를 어떻게 나열합니까?


51

특정 리포지토리에서 설치 한 모든 패키지를 어떻게 나열합니까?

기본 우분투 아카이브에서 사용할 수없는 설치된 모든 패키지를 나열하고 패키지가 어느 저장소에서 왔는지 확인할 수 있습니까? (이 질문에 대한 답을 알고 있다면, 특정 PPA 이름에 대한 목록을보고 첫 번째 질문에 대한 답을 찾을 수 있습니다.)


이것에 대한 기존의 명령 줄 도구가없는 것 같습니다 (슬프게도). 나는 GUI 답변 중 하나를 받아들입니다.
Marius Gedminas

답변:


24

Ubuntu Software Center에서 "Installed Software"항목을 확장하십시오. 활성화 한 모든 다른 리포지토리 목록이 표시됩니다. 저장소를 클릭하면 각각에서 설치 한 패키지가 표시됩니다.

대체 텍스트


옵션이 Ubuntu 10.10에서만 사용 가능하거나 뭔가 빠졌습니까? 내 소프트웨어 센터는 해당 메뉴 아래에 소스를 표시하지 않습니다.
lovinglinux

2
내 버전에서는 맨 위에 "설치됨"드롭 다운이 있습니다. 이 옵션을 선택하면 다양한 출처 (핵심, 구매, PPA 등)를 선택할 수 있습니다.
Alexis Wilke

Ubuntu 16.04에서는이 페이지를 더 이상 사용할 수 없습니다. 그러나 시냅틱에는 비슷한 기능이 있습니다. 왼쪽 하단에서 "원본"을 클릭하십시오.
Josh

26

설치된 패키지 의 출처에 대한 기록이없는 것 같습니다 .

동일한 이름의 패키지를 다운로드 할 때 위치를 가져 오는 것이 좋으면을 통해 사용할 수 있습니다 apt-cache policy. 다음 (추악한) 스크립트가 나를 위해 트릭을 수행합니다.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

apt-cache policy버전에 따라 변경 될 수 있는의 출력에 대한 가정을하기 때문에 매우 취약 합니다.


예, 이것은 기본적으로 도구를 처음부터 작성하는 것을 의미합니다. 그리고 Perl 또는 Python으로 / var / lib / apt / lists를 구문 분석하는 것이 더 빠르고 강력하다고 생각합니다.
Marius Gedminas

2018 년에 정상적으로 작동합니다 :) 감사합니다!
N0rbert

우분투와 데비안에서 테스트 한 비슷한 솔루션을 개발했습니다 .
famzah

23

Synaptic Package Manager를 열고 왼쪽 사이드 바 하단에있는 "Origin"버튼을 클릭하십시오. 그것은 당신의 소스를 나열합니다. 사용 가능한 / 설치된 패키지를 보려면 소스를 선택하십시오.


4

이 스크립트는 PPA에 설치되어 사용 가능한 패키지를 나열합니다.

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

나는 이것을 적용 했다 .

BTW PPA를 사용하지 않으려면 ppa-purge 프로그램을 사용하십시오. 여기에 개선 된 버전을 만들었습니다 .


3

Quantal (12.10)에서 원선의 공백을 제거해야합니다.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.