적절한 저장소에서 설치된 패키지를 적절하게 찾습니다.


답변:


17

aptitude를 사용하여 안정적인 브랜치 외부에 설치된 패키지를 찾으려면 다음을 사용할 수 있습니다.

aptitude search "?narrow(?installed,?not(?archive(stable)))"

패키지 이름 (설명 대신)과 버전을 보려면 -F다음과 같이 format 옵션과 함께이 명령을 사용할 수 있습니다 .

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

자세한 형식은 맨 페이지를 참조하십시오 ( 제공되는 옵션이 포함 된 설명서 ).

예를 들어, Squeeze 외부에 패키지를 설치 한 경우 (예 : apt-get install -t sid package-name.

를 통해 설치된 패키지의 출처를 확인할 수 apt-cache policy있으며 사용법은 다음과 같습니다.

apt-cache policy <package-name>

예를 들어, python-numpy 패키지는 다음 출력을 렌더링합니다.

$ LANG=C apt-cache policy python-numpy
python-numpy:
  Installed: 1:1.6.2-1
  Candidate: 1:1.6.2-1.2
  Version table:
     1:1.7.0-1 0
          1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
     1:1.6.2-1.2 0
        500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
 *** 1:1.6.2-1 0
        100 /var/lib/dpkg/status
     1:1.4.1-5 0
        990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages

즉, 현재 sid / main 지점보다 한 버전이므로 구 버전이 설치되어 있습니다. 나는 아직 안정되어 있지 않고 1.4.1-5현재에 1.6.2-1있습니다.

제출시이 패키지는 이미 업데이트되었습니다 :)


내가 선호 ?any-version()하기 때문에, ~narrow(pat1, pat2)과 동일 ?any-version(pat1 pat2)하며 지원 ?any-version(pat1 pat2 pat3)바보 보지 않고.
Robert Siemer

18

적성과 수십 번의 정보 페이지를 읽은 후 마침내 이것을 얻었습니다.

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'

또는 (동등한) :

aptitude search '~S ~i (!~Atesting ~Aunstable)'

그것은 불안정 아카이브에서 설치 패키지를 검색합니다 모든 저장소를. 기본 아카이브에서 패키지를 필터링해야합니다 (위 예제에서 테스트).

www.debian-multimedia.org/unstable에서 설치된 패키지를 필터링하려면 다음을 수행하십시오.

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))

편집 : “아카이브”,“원산지”등이 Release리포지토리 파일 에서 공제됩니다 . 불행히도 모든 도구가 모든 행을 볼 수있는 것은 아니며 다른 구문을 사용합니다. 해당 파일을로 찾을 수 있습니다 /var/lib/apt/lists/*Release. 또는 입력 apt-cache policy하여 개요를 얻으십시오. apt-cache는 출력 형식을 변경했습니다. 이후 버전은 apt_preferences 스타일을 사용합니다.

  • Suite:또는 Archive:(이전 이름!)
    • 적성 검색 : ?archive(___)또는~A___
    • 적성 형식 : %t
    • apt_preferences : release a=___
    • 예 우분투 : natty-backports, trusty-security,stable
  • Origin:
    • 적성 검색 : ?origin(___)또는~O___
    • 적성 형식 : 해당 없음
    • apt_preferences : release o=___
    • 우분투 예 : Canonical, Google, Inc., LP-PPA-dockbar-main,Ubuntu
  • 다른 모든 라인
    • 적성 : 해당 없음

15

현재 리포지토리 각각에 대해 오리진 태그 (예 : o = Debian )를 검사하십시오 .

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq

그런 다음 특정 출처에서 패키지를 검색하십시오.

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

입니다 하지 그것이 자신의 원산지 정보를 제공하기 위해 각 저장소에 의존하기 때문에 보안 감사에 적합하지만, 여러 저장소에 존재하는 패키지의 기원 문제를 해결하는 데 도움이 될 수 있습니다.


2
귀하의 aptitude search패턴이 잘되지 않습니다. – 이들은“하나의 버전이 설치되어 있고 다른 버전은 데비안에있는 패키지 목록”또는“일부 버전이 설치되어 있으며, 해당 패키지의 버전 중 적어도 하나는 데비안에서 사용할 수 있습니다”와 같이 선택합니다. – 우리가 찾는 것은“설치된 버전은 데비안 (또는 그렇지 않은)”입니다. ?narrow()또는 로 수행해야합니다 ?any-version().
Robert Siemer

확인했습니다. nemo-fileroller에서 설치 linuxmint했지만 Debian에 있습니다. 설치되어 있고 데비안 어딘가에 있기 때문에 목록에 나타납니다 .
Boldewyn

6

완전성 : Ubuntu 시스템에서이 작업에도 Synaptic을 사용할 수 있습니다. 왼쪽 열에서 출처별로 패키지를 필터링 할 수 있습니다.


이 작업을 시도하고 Google을 통해이 SU 게시물을 찾았습니다. 시냅틱을 간과했습니다. 감사합니다!
David Claridge

내가 / O 충분한 답변을 w 이틀 만 그것을 인정하고 있음을, 당신의주의를 미끄러 수도 @RobertSiemer 전에 다른 답변 중 하나가에. 떨어 그것을 해결하기 때문에 나는 그것을 받아 문제. 나는 또한 나중에 모든 대답을 찬성했지만, 당신의 사면을 간청하고 결코 수용 상태를 바꾸지 않았습니다. 또한이 사이트의 FAQ 에서이 이동으로 명성을 얻지 못했습니다. 실제로 다른 사람의 답변을 수락하지 않아서 2 명의 담당자를 잃었습니다 . 따라서 일반인의 결정을 판단하기 전에 장차 물러서서 가능한 원인을 다시 생각해보십시오.
Boldewyn

2

나는 이것을 발견했다 :

aptitude search "?origin (<repository>) ?installed"

"적성 검색" 에서 지원되는 검색어 목록도 여기에서 찾을 수 있습니다 .


왜 이것을 실행해야 sudo합니까? 루트로 실행하지 않고도 작동하는 것 같습니다.
Andre Holzner

sudo로 실행할 필요가 없습니다
Kurtis Nusbaum

@Anonymous answer에 대해 언급했듯이 원하는 효과가 없습니다.
Robert Siemer

2

먼저 / var / lib / apt / lists에서 관심있는 저장소에 적합한 파일을 찾으십시오. 프로그래밍 방식 으로이 작업을 수행 할 수 있어야하지만 그렇게 할 필요는 없습니다.

예를 들어 Google 크롬을 사용하여 다음을 시도하십시오.

SEARCH_PATTERN=dl.google.com_linux_chrome  # adjust to suit your needs

for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
    if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
    then
        echo ${PKG}
    fi
done

그리고 나는 출력을 얻는다 :

google-chrome-stable

패키지가 설치되면 dpkg -s는 0을, 그렇지 않으면 0이 아닌 값을 반환합니다. 향후 참조 목적으로

grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages

였다

Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable

...이 적성을 사용합니까?
Robert Siemer

2
@RobertSiemer 어떻게 관련이 있습니까? 합리적인 영어 구사를 가정한다면, aptitude와 함께 설치된 패키지의 소스를 찾는 방법이 문제 입니다. 솔루션이 적성을 사용할 필요는 없습니다.
Auspex

@Auspex, 나는 그렇지 않다고 믿는다. – 걱정하지 마십시오. 제가 영어를 구사 한 명령은 2 년 전에“합리적”을 능가했습니다.
Robert Siemer

2
분명히 ...
Auspex

2
@Auspex : 나를 자극하려고합니까? 반대의 경우도 마찬가지입니다. 문제는 적성과 함께 설치된 패키지가 아니라 적성을 기반으로 한 솔루션을 요구하는 것입니다.
Robert Siemer

0

to 매개 변수 ?archive()는 정규식 이므로 다른 답변은 실제로 잘못되었습니다 . 그래서 ?archive(stable)모두 일치 stable하고 unstable. 제외 시키려면 stable정규식 패턴을 고정해야합니다.

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'

여러 저장소를 제외하려면 다음을 수행하십시오.

aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'

또한 일부 패키지는 여러 리포지토리에 속합니다 (예 :) xenial-security,xenial-updates. ?archive()는 각 리포지토리에 대해 정규식 패턴을 개별적으로 평가하므로 다른 리포지토리에도 속하는 경우에도에 ?archive("^xenial-updates$")속하는 모든 패키지와 일치합니다 xenial-updates.

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