문제 설명

문제 설명

문제 설명

apt와 aptitude 모두 어떤 패키지가 설치되어 있는지 기억합니다.자동으로다른 패키지의 종속성으로 또는수동몇 가지 이유. 여러 가지 이유로 목록에수동가방은 불필요하게 커질 수 있으며 시간이 지남에 따라 합산되기 시작할 수 있습니다. 이러한 패키지는 특별히 요청한 경우에만 제거됩니다.

일반적인 예로는 어떤 이유로 패치로 설치될 수 있지만 나중에 이에 의존하는 일부 소프트웨어가 설치되면 자동 설치로 표시될 수 있는 라이브러리 패키지가 있습니다. 그러나 이것이 발생하지 않으면 해당 패키지에 의존하는 패키지가 제거되더라도 설치된 상태로 유지됩니다. 경우에 따라 유사한 도구를 사용하여 deborphan나머지 패키지를 찾을 수 있지만 많은 추측을 수행해야 하며 체계적인 솔루션이 아닙니다.

가능한 솔루션에 대한 설명

그래서 저는 패키지를 제거하지 않고도 자동 설치로 표시할 수 있는 패키지를 찾는 방법을 찾고 있습니다. 이는 현재 수동으로 설치된 것으로 표시되어 있지만 설치된 다른 패키지의 종속성(또는 권장 종속성)인 패키지를 찾는 것을 의미합니다. 그런 다음 이러한 패키지는 다음과 같이 표시될 수 있습니다.자동으로더 이상 필요하지 않은 경우 다른 소프트웨어를 설치하고 제거합니다.

비슷한 도구를 만들 수 있을 거라 생각했어요libapt용 Python 바인딩, 하지만 비슷한 것이 이미 존재한다면 바퀴를 재발명하고 싶지 않습니다.

답변1

수동으로 설치된 패키지와 설치된 패키지의 필수 또는 권장 종속성인 패키지를 검색합니다. 자격이 있으면 가능합니다.

aptitude search -q -F %p '?installed !?automatic (?reverse-depends(?installed .*) | ?reverse-recommends(?installed .*))'

각 패키지에 대해 어떤 종속성이 있는지 표시하는 방법이 없다고 생각합니다. 이 정보를 원한다면 Python이 최선의 선택입니다. 이 매우 빠르고 더러운 스크립트는 트릭을 수행하는 것 같습니다(대부분 분리, 버전 종속성, 사전 종속성 등과 관련된 일부 비직접적 사례에서는 올바르지 않을 수 있다고 생각합니다).

#!/usr/bin/env python2
import apt

packages = apt.Cache()
covered = {}
# Inverse dependency computation: for each installed package, record which
# packages require it (as Depends: or Recommends:).
for p in packages:
    if p.installed:
        for l in p.installed.dependencies + p.installed.recommends:
            for d in l:
                if packages.has_key(d.name) and packages[d.name].installed:
                    if not covered.has_key(d.name):
                        covered[d.name] = []
                    covered[d.name] += [p.name]
# Print out the manually installed packages that are required by another
# installed package, as well as the requiring package(s).
for p in sorted(covered.keys()):
    if not packages[p].is_auto_installed:
        print(' '.join([p] + covered[p]))

답변2

apt패키지 관리자는 다음 패키지를 쉽게 찾을 수 있는 방법을 제공합니다 apt-mark.

# apt-mark showmanual

그러면 수동 설치로 표시된 모든 패키지가 표시됩니다. 다음을 사용하여 이들 중 하나를 자동으로 변경할 수 있습니다.

# apt-mark auto PACKAGE_NAME

~에서apt-mark 매뉴얼 페이지:

자동차

auto는 패키지를 자동으로 설치된 것으로 표시하는 데 사용됩니다. 이 경우 수동으로 설치된 패키지가 더 이상 종속되어 있지 않으면 패키지가 제거됩니다.

수동

수동은 패키지를 수동으로 설치한 것으로 표시하는 데 사용됩니다. 이렇게 하면 종속된 다른 패키지가 없는 경우 해당 패키지가 자동으로 제거되지 않습니다.

자동차 쇼

showauto는 자동으로 설치된 패키지 목록을 인쇄하는 데 사용되며 각 패키지는 새 줄에 표시됩니다. 패키지가 제공되지 않으면 자동으로 설치된 모든 패키지가 나열됩니다. 패키지가 제공되면 자동으로 설치된 패키지만 표시됩니다.

책을 보여주다

showmanual은 수동으로 설치된 패키지 목록을 인쇄한다는 점을 제외하면 showauto와 동일한 방식으로 사용됩니다.

관련 정보