Tìm gói nào thuộc về tệp trong Ubuntu / Debian?


300

Tôi thường xuyên thấy mình thiếu một chương trình, trang người dùng hoặc tệp khác khi làm việc trên hệ thống Ubuntu 8.04. Có cách nào đơn giản để tra cứu gói nào chứa một tệp nhất định (cho dù nó đã được cài đặt hay chưa)? Có lẽ một số tùy chọn tối nghĩa cho apt hoặc dpkg?



25
dpkg -S /path/to/filenếu bạn đã cài đặt gói
Zaz

Câu trả lời:


247
apt-file search filename

hoặc là

apt-file search /path/to/file


Để cài đặt apt-file, sử dụng:

sudo apt-get install apt-file

Bạn sẽ cần cập nhật cơ sở dữ liệu của nó trước khi bạn có thể sử dụng nó:

sudo apt-file update

7
FYI: apt-file dường như phụ thuộc vào Nội dung-amd64.gz được cung cấp bởi các kho lưu trữ. Và không phải tất cả các repos bên thứ 3 cung cấp tệp này.
Jokester

3
Nó không làm việc cho tôi. Tôi đã cập nhật cơ sở dữ liệu nhưng nó không trả về bất cứ điều gì. dpkg -Shoạt động như mô tả dưới đây.
Northys

404

(Debian / Ubuntu) Khám phá xem tập tin thuộc về gói nào :

dpkg -S /usr/bin/ls

'dpkg -S' chỉ khớp với chuỗi bạn cung cấp, vì vậy chỉ cần sử dụng 'ls' làm đối số phù hợp với bất kỳ tệp nào từ bất kỳ gói nào có 'ls' ở bất kỳ đâu trong tên tệp. Vì vậy, thông thường nên sử dụng một đường dẫn tuyệt đối. Bạn có thể thấy trong ví dụ thứ hai rằng 12 nghìn tệp được biết đến với dpkg khớp với chuỗi trần 'ls'.


33
Đó chỉ là khi các tệp đã được cài đặt
John T

19
Ngược lại apt-file, điều này cũng tìm thấy gói thành một tệp nếu nó được cài đặt thủ công thông qua dpkg -i!
tanius

4
Nếu bạn nhận được truy vấn dpkg: không tìm thấy mẫu phù hợp nào, hãy thử điều này : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo A

1
Thật kỳ lạ, điều này không hiệu quả với tôi: dpkg-query: no path found matching pattern /usr/bin/javamặc dù có một tập tin vào/usr/bin/java
nnyby

@nnyby Xem bình luận của Pablo A
vog

19

gói.debian.org là những gì tôi luôn sử dụng để hoàn thành nhiệm vụ này. Nó vượt trội hơn apt-file vì nó cũng có thể tìm thấy các phần của tên tệp. Nó cũng được liên kết với danh sách các gói chính sẽ liệt kê các mô tả, lỗi, v.v ... Tất cả trong một trang web tốt. Không hữu ích từ dòng lệnh, nhưng vẫn khá hữu ích.

Đối với tốc độ, tôi đánh dấu url:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

trong Firefox và thêm "debfind" làm từ khóa (nhấp vào "thêm" trong trình quản lý dấu trang bị che khuất), vì vậy tôi chỉ cần gõ "debfind" và nó sẽ hoạt động. Bạn có thể thay đổi 'bộ' từ không ổn định sang ổn định hoặc thử nghiệm nếu bạn muốn, cho các phiên bản phân phối khác.


Nó không hoạt động với repos tùy chỉnh mặc dù.
Ctrl-C

Lựa chọn kém liên quan đến tự động hóa.
Alexander Shcheblikin

11

Bạn cũng có thể sử dụng dlocate. Từ trang người đàn ông;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocatecũng là phương pháp yêu thích của tôi, rất đáng tin cậy.
Avio

2
@Avio dlocatekhông tìm thấy gói được cài đặt gần đây trừ khi bạn chạy sudo update-dlocatedbtrước. Lệnh được tự động chạy hàng ngày trong /etc/cron.daily/dlocate
jarno

4

Tôi tìm thấy Wajig ...

wajig whichpackage /path/to/file 

ví dụ.

wajig whichpackage /etc/apt/sources.list

Wajig là một dòng lệnh hoặc công cụ điều khiển tiện dụng bao gồm tất cả các tính tốt của apt-get, dpkg mà bạn không bao giờ muốn học. .

Để cài đặt wajig sử dụng:

apt-get install wajig

Lệnh 'whichpackage' đó phụ thuộc vào tệp apt

bạn vẫn sẽ cần cập nhật cơ sở dữ liệu trước khi có thể sử dụng nó: - Tôi chưa biết nếu cập nhật wajig thì bản cập nhật apt-get cũng cập nhật bộ đệm tệp, nhưng tôi hy vọng nó có thể.

sudo wajig update

sudo apt-file update

(và Super Cow, Easter egss ?!)


2

Tương tự như câu trả lời của jamuraa cho Debian, bạn cũng có thể truy cập http://packages.ubfox.com/ cho Ubuntu. Bạn sẽ phải cuộn xuống một chút để tìm hộp tìm kiếm "Tìm kiếm nội dung của các gói" nơi bạn có thể nhập đường dẫn của tệp.


Bây giờ nếu chỉ có Raspbian cũng có một :)
XtL

0

Hãy thử tìm kiếm các tệp bằng cách sử dụng http://www.kodkast.com/appluggest/find-which-package-file-belongs-to

Đây là một ứng dụng để tìm kiếm các tệp được chứa trong các gói rpms / linux khác nhau và rất hữu ích khi bạn thậm chí không cài đặt vòng / phút trên máy của mình.


Downvote: Liên kết bị hỏng và liên kết dường như dành cho các gói RPM ở vị trí đầu tiên.
tripleee

0

Gói không tìm thấy lệnh cho bạn gợi ý về các lệnh tiềm năng và tên của gói debian. Nó hoạt động bằng cách gõ lệnh trong bash shell và nhìn vào đầu ra của nó.

Ví dụ: nếu tên lệnh được biết:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

và nếu lệnh không được biết, một số dự đoán được áp dụng:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found

Điều này không hoạt động đối với các tệp tùy ý, tuy nhiên, như OP yêu cầu.
một CVn

Đây là một mẹo có vấn đề nếu chương trình thực hiện những việc có hại và được cài đặt IS. Thêm -hhoặc --helpvào cuối sẽ giúp một chút. Nếu thêm -hvào cuối sẽ làm cho điều này đủ an toàn, tôi muốn giới thiệu, nhưng ngay cả như vậy nó không phải là một cách tốt để đạt được những gì OP yêu cầu.
Bác sĩ Beco
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.