Odpowiedzi:
Wybrana opcja rpm to:
rpm -q --whatrequires sqlite
Edytowane: dodane - zainstalowane na dyskusję w innych odpowiedziach / komentarzach
Edytowane: usunięte - zainstalowane, ponieważ jest to nieprawidłowa opcja dla rpm
--installed
jest opcją, repoquery
ale jest nieważna dla rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
zgłasza tylko zależności od nazw pakietów.
Przeciwnie, repoquery
działa w następujący sposób (ze stron podręcznika):
--alldeps
When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides in addition to package names).
This is the default.
Weźmy paczkę libdb
.
# rpm -q --whatrequires libdb
no package requires libdb
Żadne opakowanie nie zależy od tego libdb
, więc powinniśmy być w stanie go płynnie usunąć. Jednak...
# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected
Jak widać niektóre inne pakiety nie były bezpośrednio w zależności od pakietu, ale w aktach libdb-5.3.so()(64bit)
przekazanych przez niego.
Wreszcie, oto prawdziwa lista pakietów w zależności od libdb
:
# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
W przypadku dnf (nowa wersja yum) możesz spróbować za pomocą polecenia otoki repoquery:
dnf repoquery --whatrequires sqlite
Jeśli nie jest dostępny, możesz zainstalować go za pomocą polecenia:
dnf -y install dnf-plugins-core
--installed --recursive
na końcu, więc zwraca tylko to, co jest faktycznie zainstalowane i nie pobiera z repozytoriów
Możesz także wypróbować to polecenie.
repoquery --whatrequires sqlite
Otrzymałem to polecenie z ServerFault, a także z forów Fedory.
Myślę, że tak naprawdę chcesz wiedzieć, „jakie są pakiety, które wymagają narzędzia sqlite-3.3.6, ale nie będą zadowolone z narzędzia sqlite-3.4.z” ... a jedynym dobrym sposobem na znalezienie tego jest: Spróbuj. Lubić:
echo | yum upgrade sqlite
Jak powiedział Wes Hardaker , dobrą wbudowaną metodą jest użycie rpm -q --whatrequires <package>
. Chodzi o to, że rpm
działa na możliwościach rozwiązywania zależności, a nie tylko na pakietach, jak np. dpkg
W rodzinie dystrybucji Linuksa Debian / Ubuntu. Jak zauważyli inni, samo robienie rpm -q --whatrequires sqlite
nie mówi całej historii, dlatego niektórzy sugerowali użycie repoquery
. repoquery
, jednak nie jest domyślnie instalowany w RHEL / CentOS 7 minimal (może też na komputerze?), więc może nie być dostępny dla wszystkich.
Użytkownik może zrobić, rpm -q --provides <pkgname>
aby zobaczyć wszystkie możliwości oferowane przez pakiet, a następnie użyć, rpm -q --whatrequires <capability>
aby zobaczyć, jakie zainstalowane pakiety wymagają takiej możliwości. Ta informacja może być zwięźle przeszukana za pomocą jedno-liniowej BASH (podzielonej tutaj na dwie linie dla długości):
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done
Używa tylko opcji wbudowanych w rpm
siebie, więc nie wymaga instalowania żadnych dodatkowych pakietów (np. yum-utils
W CentOS 7, który zawiera pakiet repoquery
).
repoquery
można go użyć do wygenerowania ładnej, drzewiastej struktury wszystkich pakietów wymagających określonego pakietu, na przykład:repoquery --pkgnarrow=installed --tree-whatrequires sqlite