Làm thế nào để tôi tìm ra gói nào sở hữu một tập tin?


Câu trả lời:


44

Có một số ứng dụng trong Debian thực hiện nhiệm vụ này; kiểm tra trang này để biết mô tả Tôi sẽ đề cập đến hai trong số họ, apt-filedlocate.

apt-filetìm kiếm bộ đệm trong của nó, do đó cho phép bạn không cài đặt tất cả các gói bạn muốn tìm kiếm. Dưới đây bạn sẽ tìm thấy hướng dẫn chi tiết hơn.

dlocatelà một thay thế nhanh chóng cho dpkg -L(lệnh liệt kê nội dung gói) và do đó, nó chỉ tìm kiếm các gói đã cài đặt. Tìm kiếm được thực hiện bởi dlocate -S file.name.

Ngoài ra, bạn có thể tìm kiếm các gói trực tuyến sử dụng packages.debian.org máy chủ (các tìm kiếm nội dung của gói phần).


Cài đặt và sử dụng apt-file

Đó là một ý tưởng tốt để cập nhật đầu tiên:

sudo apt-get update

Xem những gì apt-filedành cho:

apt-cache show apt-file

Cài đặt nó:

sudo apt-get install apt-file

Đọc dữ liệu từ kho lưu trữ (điều này cũng hoạt động mà không cần sudotạo bộ đệm của người dùng; với sudobộ đệm là toàn hệ thống):

sudo apt-file update

Thực hiện tìm kiếm. Trong ví dụ này, chúng tôi muốn biết gói xrandrthực thi nào là:

apt-file search xrandr

Nó liệt kê nhiều gói với unxrandr, lxrandr.mohoặc source_lxrandr.py. Không hữu ích trong trường hợp của chúng tôi. Tìm kiếm thông minh hơn:

apt-file search -x /xrandr$

( $biểu thị cuối dòng). Ví dụ đầu ra:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Kết quả đầu tiên trông không giống như thực thi, kết quả thứ hai thì không. Chúng tôi có thể điều tra thêm. Chạy:

apt-cache show x11-xserver-utils

Chơi lô tô! Đây là gói.


Liên kết đầu tiên trong câu trả lời này ( debianhelp.co.uk/findfile.htm ) dường như không còn tồn tại.
rogpeppe

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Trong đó bash là tên gói.


4
Câu trả lời này tốt hơn nhiều so với câu trả lời được chấp nhận!
Bex

Chính xác. Thật không may là "câu trả lời được chấp nhận" có dấu kiểm màu xanh lục, đó là một dấu hiệu cũng truyền tải "câu trả lời đúng". Trong trường hợp này, câu trả lời được chấp nhận bỏ lỡ dpkg-query -SVÀ nó sẽ đưa bạn xuống con đường cài đặt các gói tùy chọn sai ..
Scott Prive

42

Một cách khác:

$ dpkg -S /bin/bash
bash: /bin/bash

Trên Ubuntu của tôi ít nhất, cả hai dường như đều nằm trong dpkggói, vì vậy không có lợi thế thực sự cho bất kỳ ứng dụng cụ thể nào ...


14

Các tệp được tạo cài đặt sẽ không được tìm thấy bởi dpkg -S, như đã đề cập tại: https://askubfox.com/a/667227/52975

Ví dụ, /bin/ncxuất hiện khi bạn cài đặt gói netcat-openbsd.

Nhưng khi:

dpkg -S /bin/nc

chúng tôi nhận được dpkg-query: no path found matching pattern /bin/nc.

Điều này xảy ra bởi vì /bin/ncđược tạo bởi update-alternativescuộc gọi trong tập lệnh postinst được chạy sau khi cài đặt.

Nó hoạt động như thế này vì một phiên bản khác /bin/ncđược cung cấp bởi netcat-traditionalgói.

Tôi không nghĩ có một cách chung để tìm các tệp được tạo như vậy. Trong trường hợp cụ thể của các liên kết tượng trưng thay thế, chúng ta chỉ cần theo liên kết với readlink -f:

dpkg -S "$(readlink -f /bin/nc)"

2

Không quen thuộc với Debian, tôi đã gặp khó khăn khi thử điều này:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Một chút điều tra và tôi tìm thấy gói:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
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.