이 테이블의 모든 패키지를 나열하고 싶습니다.
$ dpkg -l libav\*
하지만 이 출력 외에도 각 패키지의 원본/소스(선호하는 용어는 확실하지 않음)도 원합니다. 패키지가 어떤 소스에도 해당하지 않으면 알 수 없음 또는 이와 유사한 것으로 표시되어야 합니다. 내 생각에 가장 유망한 접근 방식은 다음을 사용하는 것입니다.dctrl 도구, 하지만 어떻게 해야 할지 모르겠습니다. 배경으로 ffmpeg와 일치하지 않는 라이브러리를 디버깅하려고 합니다. 바라보다데비안 버그 보고서 - ffmpeg: 불안정한 버전에서 4:0.6.1-5를 백포트하면 경고가 발생합니다: 라이브러리 구성 불일치. 오류 보고는 더 이상 문제가 되지 않지만 여전히 문제에 관심이 있습니다.
형식을 지우려면 다음과 같아야 합니다.
ii libavahi-client-dev 0.6.27-2+squeeze1 Development files for the Avahi client library squeeze
ii libavcodec-dev 4:0.6.1-5 Development files for libavcodec unstable
동일한 패키지가 여러 카테고리에서 사용 가능한 경우. 짜내고 테스트하는 동안가장 낮은/가장 오래된사용 가능한 카테고리를 사용해야 합니다. 이 경우 짜내십시오.
답변1
Dpkg는 이 정보를 추적하지 않습니다. 각 파일의 출처는 .deb
중요하지 않습니다.
Apt는 이 정보도 추적하지 않지만 지금 패키지를 어디서 얻을 수 있는지 알고 있습니다. 이것으로 충분합니다.
~처럼9000주석으로 작성하여 apt-cache policy '^libav'
이름이 정규식과 일치하는 패키지 버전이 ^libav
설치되었거나 사용 가능한지 표시합니다. 출력은 구문 분석하기가 특히 편리하지는 않지만 원하는 형식을 대략적으로 제공하는 최소한의 테스트를 거친 스크립트는 다음과 같습니다.
{ LC_CTYPE=C apt-cache policy '^libav'; echo .; } | perl -l -ne '
if (!/^ /) {
if (defined $version) {print "$package: $version unknown"}
s/: *$//; $package=$_; $installed=1; $version=undef;
}
if (/^ *Installed: *\(none\)$/) {$installed=0}
if ($installed && /^ \*+ +([^ ]+)/) {$version=$1}
if (/^ [^ ]/) {$version=undef}
if ($installed && defined $version && /^ +[0-9]+ +[^ ]+ +([^ \/]+)/) {
print "$package: $version $1";
$version=undef;
}
'
요청한 정보를 얻는 또 다른 방법은 를 사용하는 것입니다 aptitude versions
. 다시 말하지만, 아래의 최소한으로 테스트된 코드 조각은 대략적으로 원하는 형식을 제공합니다. 패턴은 "^libav" ~i
이름이 지정된 정규식과 일치하는 설치된 패키지와 일치합니다.
aptitude versions '"^libav" ~i' |
awk -vRS= '{if ($6 !~ /[^0-9]/) {$6="unknown"}
print $3, $2, $5, $6}'
별도로 패키지된 유틸리티도 있습니다.apt-show-versions
다시 말하지만, 대략적으로 요청한 형식으로 원하는 정보를 제공합니다.
apt-show-versions | grep '^libav'