it-swarm-vi.com

Làm cách nào để tìm gói cung cấp tệp?

Câu hỏi đủ đơn giản: có một số lệnh Shell (hoặc phương thức GUI) mà tôi có thể sử dụng, được đưa ra đường dẫn đến một tệp trên hệ thống của tôi, cho tôi biết gói nào đặt nó ở đó? Giả sử tập tin thực tế đến từ một gói, đó là.

Câu hỏi thưởng: nếu đó là một tệp không được cài đặt trên hệ thống của tôi thì sao? Có, giả sử, một trang web sẽ cho phép tôi tìm kiếm một tập tin và xem những gói nào, nếu có, cung cấp nó?

446
David Z

Bạn có thể sử dụng lệnh dpkg để tìm ra gói cài đặt nào sở hữu một tệp:

Từ man dpkg:

[.__.] - S, - tìm kiếm tên tệp-tìm kiếm mẫu ... [.__

Thí dụ:

$ dpkg -S /bin/ls
coreutils: /bin/ls

Bạn có thể tìm kiếm với một đường dẫn đầy đủ hoặc chỉ với tên tệp.

Nếu bạn muốn tìm kiếm các tệp chưa được cài đặt trên máy tính của mình, bạn có thể sử dụng Tìm kiếm gói Ubunt

413
Ressu

Lệnh apt-file có thể làm điều này cho bạn từ dòng lệnh. Tôi sử dụng nó thường xuyên khi xây dựng các gói từ nguồn. Đối với các tệp được cung cấp bởi các gói đã được cài đặt trên hệ thống của bạn, apt-cache là một lựa chọn khác.

Để cài đặt apt-file, hãy làm:

Sudo apt-get install apt-file

Sau đó, bạn cần cập nhật cơ sở dữ liệu của nó:

apt-file update

Và cuối cùng, tìm kiếm tệp:

$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h

Tuy nhiên, một cách thân thiện hơn là sử dụng trang web Tìm kiếm gói Ubunt . Họ có một tùy chọn để "tìm kiếm nội dung của các gói" cho một tên tệp cụ thể.

226
jbowtie

Ngoài ra còn có tệp apt để tìm kiếm các tệp trong các gói không được cài đặt. Ví dụ:

apt-file list packagename
43
ptman

Bạn có thể tìm kiếm nội dung của các gói có trong các bản phát hành Ubuntu khác nhau trên trang web Gói Ubunt . Xem dưới tiêu đề " Tìm kiếm nội dung của các gói ".

Ví dụ: đây là kết quả tìm kiếm cho libnss3.so trong lucid (10.04):

http://packages.ubfox.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&Arch=any

17
moberley

Ý bạn là, gói nào và không phải ứng dụng nào. Ứng dụng này là trình quản lý gói của bạn, ví dụ: Software Center.

Sử dụng dpkg:

dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs

Ví dụ

% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

Sử dụng apt-file:

apt-file search /usr/lib/tracker/tracker-store

hoặc cũng có thể:

apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$

Ví dụ

% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

Hoặc trực tuyến tại đây , trong phần Search the contents of packages.

enter image description here

Ví dụ

enter image description here

13
A.B.

Đây là một phần mở rộng cho câu trả lời tuyệt vời của Alexx Roche . Tôi đã cố chỉnh sửa câu trả lời đó, nhưng nó đã bị từ chối (mặc dù không phải bởi Alexx)


Tôi đã cố gắng theo dõi những gì đã cài đặt which trên hệ thống của tôi. Sau một chút công việc tôi đã tạo /usr/local/bin/apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY="$(realpath $(which [email protected]) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="[email protected]"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Mặc dù đối với hầu hết các THING đã được cài đặt, bạn chỉ có thể sử dụng:

apt-file search $(realpath $(which THING)) | grep 'THING$'

Đối với những điều chưa được cài đặt, bạn có thể sử dụng:

apt-file search THING | grep '/THING$'

Tập lệnh apt-whatprovides hoạt động cho các tệp đang và không có trên hệ thống của bạn. Ví dụ: hệ thống của tôi thiếu Dig nhưng có ping vì vậy đây là kết quả:

[email protected]:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

[email protected]:~ $ apt-whatprovides Dig
Searching for Dig
dnsutils: /usr/bin/Dig
epic4: /usr/share/epic4/script/Dig
epic4-help: /usr/share/epic4/help/8_Scripts/Dig
knot-dnsutils: /usr/bin/Dig

Lưu ý rằng Searching for là một đường dẫn hoàn chỉnh cho ping (đã cài đặt) và chỉ tên nhị phân cho Dig chưa được cài đặt. Điều này giúp tôi phát hiện ra rằng tôi cần cài đặt dnsutils mà không cần phải tìm kiếm https://packages.ub Ubuntu.com/#search_contents

3
Bruno Bronosky

Tôi đã cố gắng theo dõi những gì đã cài đặt which trên hệ thống của tôi. Sau một chút công việc tôi đã tạo apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY=$(realpath $(which [email protected]))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}

Mặc dù đối với hầu hết các điều bạn chỉ có thể sử dụng

apt-file search $(realpath $(which THING))|grep 'THING$'
3
Alexx Roche

Một lý do bạn có thể phải làm điều này là nếu bạn đang biên dịch phần mềm đã có gói ubfox, bạn có thể chạy apt-get build-dep $PACKAGENAME. Điều đó sẽ cài đặt tất cả các gói bạn cần để biên dịch $PACKAGENAME.

2
Rory