install_weak_deps=False
이를 설정하면 /etc/dnf/dnf.conf
나중에 dnf 설치 프로그램을 사용할 때 약한 종속 패키지를 설치하는 것을 방지할 수 있다는 것을 알고 있습니다 .
하지만 이 옵션을 설정하기 전에 설치된 모든 패키지를 어떻게 나열할 수 있습니까?
시스템 전체에서 약한 종속성으로 설치된 모든 패키지를 제거하고 싶습니다.
답변1
패키지 A가 종속성 B 없이 작동하는 경우 패키지 A의 사양 파일에서는 약한 종속성만 사용할 수 있습니다. 즉, 패키지 A는 패키지 B를 설치하는 데에만 "권장"됩니다.
패키지 B의 존재 여부를 확실하게 판단할 수 있는 방법은 없습니다.예전에는약한 의존성(그래서 A가 끌어들임)뒤쪽에B가 설치되었습니다. 전체 yum/dnf 로그 파일에 액세스할 수 있고 주의 깊게 연구하려는 의지가 없다면 말이죠!
이는 B가 수동으로 설치되었거나 패키지 C의 약한 종속성 또는 패키지 D의 하드 종속성("require")으로 설치되었을 수 있기 때문입니다.
답변2
당신은 얻을 수 없습니다정밀한목록.
그러나 상대적으로 간단한 스크립트를 사용하여 제거하면 합리적인 근사치를 얻을 수 있습니다.
dnf repoquery --userinstalled
DNF 관점에서 수동으로 설치된 모든 패키지를 나열합니다(이는실제로수동으로 설치해야 하는 이유는 다양하지만 우리의 목적과 특별히 관련이 없습니다.
dnf repoquery --installed
설치된 모든 패키지를 나열합니다.
dnf repoquery --requires pkg
하드 종속성을 나열했습니다 pkg
.
dnf repoquery --whatprovides pkg
위 명령의 출력은 --requires
특정 패키지로 변환될 수 있습니다.
이 네 가지 명령을 사용하면 다음 셸 스크립트를 사용하여 수동으로 설치되지 않았고 명시적으로 종속되지 않은 모든 패키지의 대략적인 목록을 생성할 수 있습니다.
#!/bin/bash
# Get the list of all installed packages
installed="$(dnf repoquery --installed)"
# Generate a list of all hard dependencies by iterating over each dependency of each installed package.
required=""
for pkg in ${installed}; do
for dep in $(dnf repoquery --requires "${pkg}"); do
required="${required}\n$(dnf repoquery --whatprovides "${dep}")"
done
# Remove any duplicates from the list of hard dependencies (done each time we finish a package’s dependencies to minimize memory usage).
required="$(echo "${required}" | sort -u)"
done
# Iterate over each manually installed and explicitly required package, removing them from the list of all installed packages
notrequired="${installed}"
for pkg in $(dnf repoquery --userinstalled) ${required}; do
notrequired="$(echo "${notrequired}" | grep -v "${pkg}")"
done
# Print the final list of packages that are not required.
echo "${notrequired}"
안타깝게도 이 작업은 시간이 좀 걸립니다긴런타임(새로 설치하는 경우에도 몇 분이 소요될 수 있음) 및 상당한 양의 메모리를 사용할 수 있습니다. 최종적으로 인쇄되는 패키지 목록은 DNF가 사용자가 직접 설치하지 않았다고 생각하는 모든 것이며 설치된 패키지에 대한 엄격한 종속성도 아닙니다. 이것은 아니다정확히다음과 같은 이유로 소프트 종속성으로 설치된 패키지 목록과 동일합니다.
- 일부는 원래 소프트 종속성으로 도입되었지만 나중에 수동으로 설치되었거나 나중에 설치된 패키지의 하드 종속성일 수 있습니다.
- 실제로 DNF가 특정 패키지를 수동으로 설치할지 자동으로 설치할지 여부를 변경할 수 있습니다.
- 이것가능한그룹을 설치하여 가져온 패키지도 나열됩니다(그룹을 사용하지 않기 때문에 확실하지 않습니다).