Làm thế nào để liệt kê các gói phụ thuộc (phụ thuộc ngược)?


201

Để nghiên cứu nguyên nhân gây ra việc cài đặt một gói nhất định, tôi muốn có một danh sách các gói phụ thuộc vào gói đó. Tôi không thể tìm thấy bất cứ điều gì rõ ràng trong man dpkg.



5
Tất cả các câu trả lời của câu hỏi cũ đều xoay quanh aptitude, một cái gì đó chưa được cài đặt mặc định trong nhiều năm. Năm 2017, mọi người trên Ubuntu vẫn có apt-cache. Bất cứ ai theo dõi câu hỏi được liên kết sẽ bị lạc trong một cuộc thảo luận về một vài chương trình sẽ có.
Lambart

Câu trả lời:


252

apt-cache rdepends packagename nên làm những gì bạn muốn


1
Xuất sắc! apt-cache rdepends tofrodosxác nhận sự nghi ngờ rằng nó đã được cài đặt bởi một gói khác (đã lỗi thời dos2unix).
l0b0

2
Cho đến hôm nay (phiên bản apt 0.9.9.1), có tùy chọn --recurse hoạt động với các yêu cầu.
jarno

43
Nếu bạn thêm --installed, đầu ra thậm chí còn hữu ích cho các gói có thể được sử dụng bởi nhiều người khác:apt-cache rdepends --installed packagename
quazgar

2
Có một cú pháp hơi khác nhau giúp tôi phân biệt giữa Khuyến nghị, Phụ thuộc, Đề xuất, v.v. Cú pháp là sudo apt rdepends packagename(Lưu ý rằng nó không sử dụng apt-cache mà chỉ đơn giản là apt)
Vahid Pazirandeh 16/11/17

4
Đối với đầu ra, tại sao một số gói có thanh dọc (ký hiệu ống) trước chúng?
Vahid Pazirandeh

62

aptitude có một cách xử lý khá hay này:

$ aptitude why bash
i   foomatic-filters PreDepends bash (>= 2.05)

Theo mặc định, nó chỉ liệt kê lý do "được cài đặt nhiều nhất, mạnh nhất, chặt nhất, ngắn nhất", nhưng bạn có thể sử dụng aptitude -v whyđể làm cho nó xuất ra mọi thứ nó tìm thấy.


4
Có vẻ như nó chỉ xem xét các gói đã cài đặt, không phải mọi thứ có sẵn. Và đó là những gì tôi cần.
Tuukka Mustonen

3
Cho rằng bạn muốn reverse-dependstrongubuntu-dev-tools
tumbleweed

Làm thế nào về debian?
Tuukka Mustonen

1
ubuntu-dev-toolscó trong Debian
tumbleweed 26/07/13

Điều đó thật tuyệt. Tôi đã học được rằng openssh-server khuyến nghị (và do đó được cài đặt) xauthtrên một máy chủ không đầu, kéo theo hàng trăm phụ thuộc x11 và hàng tá cập nhật vô dụng mỗi tháng. Đó là vấn đề với quản lý gói tự động!
BaseZen

18
apt-cache showpkg <pkgname> 

Thí dụ:

apt-cache showpkg lightdm

cú pháp hiện tạiapt showpkg <pkgname>
l --marc l

16

Có nhiều hơn một cách, với mỗi phương thức hiển thị một đầu ra khác nhau.

Để có cái nhìn chi tiết về cây phụ thuộc ngược hoàn toàn;

aptitude install apt-rdepends
apt-rdepends -r bash

Cách khác;

apt-cache showpkg bash

Hoặc một danh sách ngắn gọn:

apt-cache rdepends bash

Chính xác những gì rdependsthể hiện trong cây đó? apt-rdepends php7.0-fpmcho thấy sed. sedkhông phụ thuộc vào PHP, chứ đừng nói đến PHP FPM.
Dan Dascalescu

Nó phụ thuộc ngược lại, nó có nghĩa là PHP phụ thuộc vào sed.
Erik Berkun-Drevnig

1
Xin chào các bạn, thực sự "apt -rdepends" là viết tắt của "sự phụ thuộc đệ quy". Nếu bạn muốn phụ thuộc đệ quy ngược, bạn phải gõ:apt-rdepends -r yourPackageNameHere
SebMa

Trang người dùng apt-cache cho biết "thông báo hiển thị danh sách của từng phụ thuộc ngược mà gói có". Trong khi apt -rdepends yêu cầu tùy chọn -r để thực hiện các phụ thuộc ngược, như @SebMa nói.
NeilG

8

Tùy chọn đơn giản nhất vẫn là:

apt rdepends package-name

mà không yêu cầu bạn phải cài đặt bất kỳ gói.


1
Điều này thêm vào câu trả lời được chấp nhận là gì?
l0b0

2
Câu trả lời được chấp nhận không có gì để làm với câu hỏi này. Đầu ra hoàn toàn khác biệt và hữu ích hơn cho tiêu dùng của con người so với apt-cache. Câu trả lời đề cập rằng apt-cache không được cài đặt theo mặc định ở mọi nơi - đó là một gợi ý khá hay tại sao câu trả lời này có mục đích của nó. cuối cùng, đây thực sự là câu trả lời mà tôi đang tìm kiếm, vì vậy bất kỳ downvote nào cũng khá ngớ ngẩn.
stefanct

Một lý do rất quan trọng tại sao điều này tốt hơn phiên bản được chấp nhận là nó bao gồm phiên bản của các phụ thuộc, không giống như apt-cacheđầu ra của s. Đó chính xác là những gì tôi cần ngay bây giờ (gỡ lỗi không tương thích glibc 2.28, vì vậy nâng cấp)
Per Lundberg

upvote cho việc sử dụng chỉ apt. tại thời điểm trả lời ban đầu, tôi không chắc giải pháp apt này sẽ có hiệu lực, nhưng nếu là bây giờ, điều đó tốt.
RobotHumans

7

Ngoài các câu trả lời hay khác, APT / APT-GET -sthực hiện loại bỏ "mô phỏng" (hoặc cài đặt).

sudo apt -s remove <pkgname>

Sử dụng -shoặc --simulatedđể loại bỏ (hoặc cài đặt) các gói, thông thường sẽ liệt kê bất kỳ phụ thuộc nào bị ảnh hưởng. Nó sẽ hiển thị các gói mồ côi khi gỡ bỏ, hoặc các phụ thuộc cần thiết khi cài đặt mà không thực sự thực thi installhoặc remove. Chỉ thông tin.


apt remove -s php7.0-fpmcho thấy The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Tại sao apache sẽ được cài đặt nếu tôi loại bỏ PHP FPM?
Dan Dascalescu

@DanDascalescu Hmm. Có thể là một tập lệnh cài đặt / loại bỏ xấu cho apt pkg hoặc có thể bạn có một số phụ thuộc khác cài đặt apache2 như dep (có nghĩa là cần một máy chủ web - và tôi tin apache2 là máy chủ web mặc định). Có thể là một vài điều. Chỉ không chắc chắn. Có mùi của một bài viết hay trên AskUbfox nếu bạn chưa tìm thấy câu trả lời.
bshea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.