아치 리눅스에서 pacman으로 선택적 의존성 나열


23

아치 리눅스를 사용하고 있습니다.

설치된 모든 패키지의 선택적 종속성을 나열하는 방법이 있습니까? 그렇다면,이 목록을 필터링하여 누락 된 (설치되지 않은) 패키지 만 볼 수 있습니까?


1
아치를 사용하지는 않았지만 "종속성"은 선택적으로 들리지 않습니다 (다른 배포판에는 없음).
jordanm

AFAIK, pacman으로 바로 그렇게 할 수 있다고 생각하지 않습니다. 그러나 작은 스크립트를 작성하는 것이 가능합니다. 설치된 패키지 목록은 pacman에 문의하십시오. Yaourt에게 PKGBUILD를 가져 와서 optdeps 목록을 읽도록하십시오. 최신 버전의 pacman-git에는 optdeps가 이미 설치되어 있는지 여부를 나타내는 커밋이 있습니다.
darnir

@jordanm : 빌드 종속성과 선택적 종속성이 있습니다. Optdeps는 패키지의 특정 기능에만 필요합니다. 따라서 해당 기능을 사용하지 않는 한 많은 종속성으로 시스템을 확장 할 필요가 없습니다.
darnir

내가 사용pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

답변:


5

expac 을 사용하여 pacman데이터베이스 를 쿼리 할 수 있습니다 .

다음과 같은 것 :

awk 'NF>=2' <(expac "%n %O") > optdeps

시스템에 설치된 모든 패키지 목록을 인쇄하고 것 optdepends하나 하나에 대한 ( %O) 1 라는 파일에 optdeps. 그런 다음 설치된 optdepends 패키지 목록과 비교하여 정렬 할 수 있습니다.

man expac전체 옵션 목록을 참조하십시오 .


1. 0이 아닌 대문자 O입니다. 우리 는 둘 사이를 구별하는 글꼴을 가질 수 없기 때문에 ...


[poke] 우리는 지금 그런 글꼴을 가지고 있습니다. :)
muru

4

AUR-Repository (aur / pacdep)에는 유용한 유틸리티가 있습니다.

pacdep에는 "thunar-archive-plugin"에 대한 옵션 패키지를 찾기위한 많은 옵션이 있습니다.

> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB
[...]

위의 결과는 선택적 패키지가 설치되지 않았 음을 의미합니다. "xarchiver"를 설치 한 후 출력은 다음과 같습니다

[...]
Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB
[...]

http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies 에서이 답변을 찾았습니다 (첫 번째 부분)
.


3

이것은 효율적이지 않지만 원하는 것을 찾을 수 있습니다 (COLOR!) :

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
   done 
   echo
done 

나는 완벽하게 잘 모르겠지만,하지 않을 것을 ||대신 &&애프터 grep하고 주변의 라인의 나머지 부분을 괄호?
Rörd November

그리고 더 중요한 것은 팩맨 출력의 "Depends On"섹션 대신 "Optional Deps"섹션을 사용해야한다는 것입니다.
Rörd

예를 들어 xmms2의 경우 :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_

2

@DarkHeart의 솔루션이 실제로 작동하지 않는다는 것을 알고 있었지만 작동하는 솔루션을 만들도록 영감을주었습니다. (색상 없음)

내가 사용하고 패키지 쿼리 내가 (이 요구르트의 종속성의)가 이미 설치 했어 때문에, @jasonwryan에 의해 제안 된 대신 expac의 비슷한 도구를. expac을 대신 사용하도록 이것을 변경하는 것은 사소한 일입니다.

모든 선택적 종속성의 목록은 대부분 package-query 호출로 수행됩니다. 첫 번째 for-loop는 설명을 제거하므로 선택적 종속성의 패키지 이름 만 남아 있습니다. 두 번째 for-loop는 결과를 인쇄하기 전에 첫 번째 행에서 이미 설치된 종속성을 제거합니다.

#!/usr/bin/perl
use strict;
use warnings;

my %deps;
for (`package-query -Q -f'%n %O'`) {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
}

2

트릭을 수행해야합니다.

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

첫 번째 입력 comm은 모든 선택적 종속성 을 나열하고 두 번째 입력은 설치된 모든 패키지 및 해당 '제공'속성을 입력합니다. 두 목록 모두로 분류되어 각 요소를 한 번만 포함합니다 sort -u. 그런 다음 첫 번째 목록에는 포함되지만 두 번째 목록에는 포함되지 않은 행만 표시됩니다.

(@Archemar의 제안을 통합하도록 편집 됨)


0

때로는 역순으로 작업해야합니다 ... 먼저 선택 사항이 아닌 모든 종속 항목을 찾은 다음 전체 목록으로 상호 참조 한 다음 uniq을 사용하십시오. 설치된 옵션 옵션 목록이 생성됩니다.

설치된 모든 찾기

pacman -Q

모든 비 선택적 찾기 :

pacman -Qent

따라서 고유 한 항목은 선택 사항이어야합니다.

(pacman -Q; pacman -Qent) | sort | uniq -u 

누락 된 옵션 목록 생성은 설명이 아닌 설명에 따라 다르지만 작동합니다.

pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done

for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'

0

나는 GNU sed에서만 시도했지만

yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'

이것은 효과가 있습니다 (원하는대로 sort / uniq를 사용하십시오).

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