Làm cách nào để tìm gói vòng / phút nào cung cấp tệp tôi đang tìm?


207

Ví dụ, tôi đang tìm kiếm một mod_files.shtập tin có lẽ sẽ đi kèm với php-develgói. Tôi đoán rằng yumsẽ cài đặt mod_files.shtệp với php-devel x86_64 5.1.6-23.2.el5_3gói, nhưng tệp dường như không được cài đặt trên hệ thống tệp của tôi.

Làm cách nào để tìm ra gói nào cài đặt một tệp cụ thể? Tôi đang tìm nơi mà tôi không nhất thiết phải tải xuống gói địa phương có thể bao gồm tệp mà tôi đang tìm kiếm.

Tôi đang sử dụng CentOS 5.


7
siêu người dùng.com ___?
Grzegorz Oledzki

@Grzegorz Điểm hay, tôi đã bỏ phiếu để di chuyển.
rjh

đây là một câu trả lời tốt hơn: unix.stackexchange.com/a/4706/39281
Sam Watkins

1
@SamWatkins câu trả lời đó sẽ chỉ hoạt động nếu gói cung cấp tệp bạn đang tìm kiếm đã được cài đặt trên hệ thống. Nếu gói không được cài đặt (như OP nói) thì bạn không thể sử dụng rpm, bạn cần sử dụng yum.
rjh

Câu trả lời:


266

Đây là một câu hỏi cũ, nhưng câu trả lời hiện tại không chính xác :)

Sử dụng yum whatprovides , với đường dẫn tuyệt đối đến tệp bạn muốn (có thể được ký tự đại diện). Ví dụ:

yum whatprovides '*bin/grep'

Trả về

grep-2.5.1-55.el5.x86_64 : The GNU versions of grep pattern matching utilities.
Repo        : base
Matched from:
Filename    : /bin/grep

Bạn có thể thích đầu ra và tốc độ của repoquerycông cụ, có sẵn trong yum-utilsgói.

sudo yum install yum-utils
repoquery --whatprovides '*bin/grep'
grep-0:2.5.1-55.el5.x86_64
grep-0:2.5.1-55.el5.x86_64

repoquery có thể thực hiện các truy vấn khác như liệt kê nội dung gói, phụ thuộc, phụ thuộc ngược, v.v.


199

Để biết gói sở hữu (hoặc cung cấp) một tệp đã được cài đặt:

rpm -qf myfilename

4
lệnh này có vẻ hiệu quả hơn so với những gì bạn cung cấp - không cần phải cập nhật từ các kho lưu trữ chậm.
80x25

Phiên bản này cũng hoạt động trên các bản phân phối không dựa trên redhat mà vẫn sử dụng vòng / phút như openSUSE
simotek

5
Đối với tôi, dường như rpm -qf <filename>phù hợp nhất để xác định gói nào cung cấp ứng dụng đã cài đặt (vì nó có thể khác với gói trong bộ đệm của kho lưu trữ yum hiện tại) và yum whatprovides <filename>phù hợp nhất để xác định gói nào cung cấp gói chưa cài đặt ứng dụng. Mỗi người có mục đích riêng.
StockB

Hơn nữa, yum whatprovides ...chỉ yêu cầu root nếu ứng dụng là gói gốc (tức là nó nằm trong /sbin). Tuy nhiên, rpm -qf ...cũng yêu cầu root để đọc rpms từ /sbin. Do đó, tôi đề xuất rằng các yêu cầu gốc là tương đương về chức năng cho cả hai phương pháp.
StockB

1
Bất cứ ai sử dụng lệnh này, xin lưu ý rằng bạn phải sử dụng đường dẫn tệp đầy đủ + tên tệp chứ không chỉ tên tệp.
Ashish

31

Câu trả lời phổ biến nhất là không đầy đủ:

Vì tìm kiếm này thường sẽ chỉ được thực hiện cho các tệp từ các gói đã cài đặt, yum whatprovides được thực hiện nhanh chóng bằng cách vô hiệu hóa tất cả các repos bên ngoài (không thể tắt repo "cài đặt" ẩn).

yum --disablerepo=* whatprovides <file>

4
Tuy nhiên, trong trường hợp này, OP đặc biệt tìm kiếm một tệp bị thiếu chưa được cài đặt trên hệ thống, ngay cả sau khi cài đặt gói mà anh ta nghĩ sẽ có nó, vì vậy anh ta không thể sử dụng--disablerepo=*
Randall

4

Bạn truy cập http://www.rpmfind.net và tìm kiếm tệp.

Bạn sẽ nhận được kết quả cho rất nhiều phiên bản và phiên bản khác nhau, nhưng rất có thể Fedora và / hoặc CentOS cũng sẽ bật lên và bạn sẽ biết tên gói để cài đặt với yum


Trang web này đang offline!
Peter

1
Trang web không xuất hiện để tìm kiếm các tập tin; chỉ tên gói với thuật ngữ tìm kiếm.
jww

1
@jww Tìm kiếm các tập tin hoạt động tốt với tôi ít nhất. Như các tài liệu nói, bạn có thể tìm kiếm các tệp thực thi theo tên đường dẫn duy nhất của chúng hoặc bất kỳ tệp nào có tên đường dẫn tuyệt đối.
số

4

Việc tìm kiếm gói tốt khi bạn kết nối với internet (kho lưu trữ) rất dễ dàng tuy nhiên khi bạn chỉ có quyền truy cập vào các gói RPM trong Redhat hoặc Centos DVD (điều này xảy ra thường xuyên với tôi khi tôi phải khôi phục máy chủ và tôi cần một ứng dụng) sử dụng các lệnh dưới đây hoàn toàn độc lập với internet và kho lưu trữ. (giả sử bạn có rất nhiều gói được gỡ cài đặt trong DVD). Giả sử bạn đã gắn thư mục Gói trong ~ / cent_os_dvd và bạn đang tìm kiếm gói cung cấp "semanage" thì bạn có thể chạy:

for file in `find ~/cent_os_dvd/ -iname '*.rpm'`;  do rpm -qlp $file |grep '.*bin/semanage';  if [ $? -eq 0 ]; then echo "is in";echo $file  ; fi;  done


0

Bạn có thể làm điều này tương tự ở đây nhưng với gói của bạn. Trong trường hợp của tôi, nó làlsb_release

Chạy: yum whatprovides lsb_release

Phản ứng:

redhat-lsb-core-4.1-24.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-24.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release`

Chạy để cài đặt: yum install redhat-lsb-core

Tên gói NÊN không có số lượng và loại hệ thống để yum packager có thể chọn cái gì là tốt nhất cho anh ta.

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.