2009-07-15 32 views
176

Ví dụ, tôi đang tìm một tệp mod_files.sh có lẽ sẽ đi kèm với gói php-devel. Tôi đoán rằng yum sẽ cài đặt tệp mod_files.sh với gói php-devel x86_64 5.1.6-23.2.el5_3, nhưng tệp có vẻ 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 gói rpm nào cung cấp tệp tôi đang tìm?

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

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

+6

superuser.com ___? –

+0

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

+0

Đây là câu trả lời hay hơn: http://unix.stackexchange.com/a/4706/39281 –

Trả lời

156

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

rpm -qf myfilename 

Lưu ý: lệnh này không đòi hỏi phải được chạy với quyền root (trên trái của sudo yum whatprovides myfilename)

+10

Điều này cho biết gói nào sở hữu (hoặc cung cấp) tệp đã được cài đặt. Rất may, đó là những gì tôi đang tìm kiếm! –

+9

'yum whatprovides ...' không cần gốc hoặc – drs

+3

lệnh này có vẻ hiệu quả hơn yum whatprovides - không cần phải nhận cập nhật từ kho lưu trữ có thể chậm. – 80x25

1

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 distro và các phiên bản khác nhau, nhưng rất có thể Fedora và/hoặc CentOS sẽ bật lên quá và bạn sẽ biết tên gói cài đặt với yum

+0

Trang web này đang ngoại tuyến! – Peter

+1

Trang web không xuất hiện để tìm kiếm tệp; chỉ các tên gói có cụm từ tìm kiếm. – jww

+1

@jww Tìm kiếm các tệp hoạt động tốt cho tôi ít nhất. Theo tài liệu, bạn có thể tìm kiếm tệp thi hành theo tên đường dẫn duy nhất hoặc bất kỳ tệp nào có tên đường dẫn tuyệt đối. – nos

226

Đây là một cũ câu hỏi, nhưng câu trả lời hiện tại là 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' 

Returns

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 sản lượng và tốc độ của các công cụ repoquery, có sẵn trong gói yum-utils.

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ể làm các truy vấn khác như nội dung niêm yết gói, phụ thuộc, ngược phụ thuộc vv

3

Vâng tìm gói khi bạn đang kết nối với internet (kho) rất dễ dàng tuy nhiên khi bạn chỉ có truy cập vào gói RPM bên 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) Tôi khuyên bạn nên 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ữ. (có lẽ bạn có rất nhiều gói đã được gỡ cài đặt trong một DVD). Hãy nói rằng bạn đã gắn thư mục Package trong ~/cent_os_dvd và bạn đang tìm kiếm một gói phần mềm đó cung cấp "semanage", sau đó 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 
22

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

Kể từ tìm kiếm này nói chung sẽ chỉ được thực hiện đối với 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 (repo "được cài đặt" ngầm không thể bị tắt).

yum --disablerepo=* whatprovides <file> 
+0

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

Các vấn đề liên quan