Câu trả lời:
Tùy chọn vòng / phút bạn muốn là:
rpm -q --whatrequires sqlite
Đã chỉnh sửa: đã thêm - được cài đặt cho mỗi cuộc thảo luận trong các câu trả lời / nhận xét khác
Đã chỉnh sửa: đã xóa - đã cài đặt vì đây là tùy chọn không hợp lệ cho vòng / phút
--installed
là một tùy chọn cho repoquery
nhưng không hợp lệ cho rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
chỉ báo cáo phụ thuộc vào tên gói.
Ngược lại, repoquery
hoạt động như sau (từ manpages):
--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.
Hãy lấy gói libdb
.
# rpm -q --whatrequires libdb
no package requires libdb
Không có gói nào phụ thuộc vào libdb
, vì vậy chúng tôi sẽ có thể loại bỏ nó một cách trơn tru. Tuy nhiên...
# 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
Như bạn có thể thấy một số gói khác không phụ thuộc trực tiếp vào gói, mà là tệp libdb-5.3.so()(64bit)
do nó cung cấp.
Cuối cùng, đây là danh sách thực sự của các gói tùy thuộc vào 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
Đối với dnf (phiên bản mới của yum), bạn có thể thử với lệnh trình bao bọc repoquery:
dnf repoquery --whatrequires sqlite
Nếu nó không có sẵn, bạn có thể cài đặt nó bằng lệnh:
dnf -y install dnf-plugins-core
--installed --recursive
ở cuối vì vậy nó chỉ trả về những gì đang thực sự được cài đặt và không kéo từ các kho
Bạn cũng có thể thử lệnh này.
repoquery --whatrequires sqlite
Tôi đã nhận lệnh này từ ServerFault và cũng từ Diễn đàn Fedora.
Tôi nghĩ điều bạn thực sự muốn biết là "các gói yêu cầu sqlite-3.3.6 là gì, nhưng sẽ không hài lòng với sqlite-3.4.z" ... và cách tốt nhất để tìm ra điều đó, là thử nó. Như:
echo | yum upgrade sqlite
Như Wes Hardaker đã nói , một phương pháp tích hợp tốt là sử dụng rpm -q --whatrequires <package>
. Vấn đề là, rpm
hoạt động dựa trên các khả năng cho độ phân giải phụ thuộc, không chỉ đơn giản là trên các gói, ví dụ như dpkg
trong phân phối Linux của Debian / Ubuntu. Như những người khác đã lưu ý, chỉ đơn giản là rpm -q --whatrequires sqlite
không làm cho toàn bộ câu chuyện, do đó một số gợi ý sử dụng repoquery
. repoquery
tuy nhiên, không được cài đặt theo mặc định trong tối thiểu RHEL / CentOS 7 (có thể cả máy tính để bàn?), vì vậy nó có thể không có sẵn cho tất cả mọi người.
Người dùng có thể làm rpm -q --provides <pkgname>
để xem tất cả các khả năng mà gói cung cấp, sau đó sử dụng rpm -q --whatrequires <capability>
để xem các gói đã cài đặt yêu cầu khả năng đó. Thông tin này có thể được truy vấn ngắn gọn bằng cách sử dụng một lớp lót BASH (được phân tách ở đây thành hai dòng cho chiều dài):
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done
Điều này chỉ sử dụng các tùy chọn tích hợp sẵn cho rpm
chính nó và do đó, nó không yêu cầu cài đặt bất kỳ gói bổ sung nào (ví dụ: yum-utils
trong CentOS 7, là gói có chứa repoquery
).
repoquery
có thể được sử dụng để tạo một cây đẹp như cấu trúc của tất cả các gói yêu cầu một gói cụ thể, ví dụ:repoquery --pkgnarrow=installed --tree-whatrequires sqlite