설치된 패키지 목록이 있고 apt
이미 목록에 있는 다른 패키지의 종속성인 모든 패키지를 제거하고 싶습니다.
https://gist.github.com/rubo77/bd9183fe2794467f482c
이러한 패키지는 400개가 넘지만 대부분은 이 목록에 있는 다른 패키지로 인해 설치되었습니다.
이 목록의 범위를 좁히고 이 목록에 있는 정말 흥미로운 주요 프로그램을 어떻게 고수할 수 있습니까?
어떻게 든 이것을 사용해야합니다 :apt에서 특정 패키지에 의존하는 패키지를 찾는 방법은 무엇입니까?
아니면 재미있는 프로그램과 기본 프로그램과 함께 설치되는 작은 도우미 패키지를 구별하는 더 쉬운 방법이 있습니까?
답변1
다음 코드는 $package_name
목록의 일부 패키지가 의존하는 패키지 목록을 인쇄합니다. dpkg -s
설치된 패키지 목록의 데이터를 사용하기 위해 입력을 전달 하거나, apt-cache show
사용 가능한 패키지 목록의 데이터를 사용하기 위해 입력을 전달할 수 있습니다. 이 코드는 PACKAGE1 | PACKAGE2
가져올 항목을 결정하는 것이 훨씬 더 복잡하고 실제로 큰 차이를 만들지 않을 수 있으므로 모든 OR 종속성( )을 건너뜁니다.
dpkg -s $package_names | awk -F '[:,] *' '
$1=="Depends" || $1=="Recommends" {
for (i=2; i<=NF; i++) {
if ($i ~ /\|/) continue;
sub(/ .*/, "", $i);
print $i
}
}'
파일을 필터링하려면 Packages
다음 awk 스니펫을 사용할 수 있습니다.
<Packages awk -v RS= -v packages="$package_names" '
BEGIN {split(packages, pa)}
$2 in pa
' | awk -F '[:,] *' '…'
이제 패키지 목록이 포함된 텍스트 파일이 있다고 가정하면 다음과 같이 다른 패키지의 종속성인 패키지를 제거할 수 있습니다.
comm -23 <(sort packages.txt) <(apt-cache show $(cat packages.txt) |
awk -F '[:,] *' ' '…' |
sort)
입력 목록에는 있지만 종속성으로 발견되지 않은 패키지가 출력됩니다.
답변2
apt-get
또한 aptitude
종속성을 통해 자동으로 설치된 패키지를 추적합니다. 적어도 적성에서는 종속성을 통해 설치되지 않은 모든 패키지를 나열할 수 있습니다 aptitude search '!~M'
.
불행하게도 이는 일반적으로 시스템 설치 중에 설치된 패키지에 포함되지 않습니다. 또한 apt-get install
인수로 전달한 모든 패키지에 대해 "자동 설치" 플래그를 제거합니다. 이는 패키지를 그런 식으로 업그레이드하려는 경우에도 패키지가 명시적으로 설치되기를 원한다고 가정하기 때문입니다.
바라보다적성을 사용하여 자동 설치로 표시되지 않은 라이브러리를 찾는 방법에 대한 내 블로그 게시물"autoinstall" 플래그가 누락된 패키지를 찾는 방법에 대한 세부 정보입니다.
답변3
apt-cache depends package
(종속성의 경우) 또는 apt-cache rdepends package
(역방향 종속성의 경우)를 사용할 수 있습니다 .