Dosya sağlayan paketi nasıl bulabilirim?


467

Yeterince basit bir soru: bazı kabuk komutları var mı (ya da GUI yöntemi), sistemimdeki bir dosyanın yolunu göz önüne alarak, hangi paketin oraya koyduğunu söylüyor? Dosyanın aslında bir paketten geldiğini farz ediyorum.

Bonus soru: Peki ya sistemime yüklenmemiş bir dosyaysa? Bir dosyayı aramamı ve varsa hangi paketleri sağladığını görmemi sağlayacak bir web sitesi var mı?


6
Bunu hep kendim merak etmişimdir - YUM ile <filepath> / <filename> 'e neyin sağladığını yum yapabilirsin biliyorum ama Paketler web sitesinden başka bir yetenek için daha önce hiçbir alternatif bulamadım
Marco Ceppi


Buradaki cevapların hiçbiri aslında Provides:mekanizmayı kapsamıyor . Biraz daha detaylı olarak, böyle bir komut mailxveya sendmailbir ikili olarak dahil değildir herhangi paketin; bunun yerine, çeşitli paketler kendi ikili dosyalarını yükler ve ardından bazılarını "kurallı" bir adla erişilebilir hale getirir /etc/alternatives. Ayrıca bkz askubuntu.com/questions/366135/...
tripleee

Yanıtlar:


438

dpkgHangi paketin bir dosyaya sahip olduğunu bulmak için komutu kullanabilirsiniz :

Kimden man dpkg:

-S, --Arama dosya-arama-deseni ...
                  Kurulu paketlerden bir dosya adı arayın.

Örnek:

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

Tam yolla veya yalnızca dosya adıyla arama yapabilirsiniz.

Bilgisayarınıza henüz yüklenmemiş dosyaları aramak istiyorsanız, Ubuntu Paketleri Aramasını kullanabilirsiniz.


5
Daha hızlı aramalar için günlük olarak güncellenen dlocate'i kullanmanızı şiddetle tavsiye ederim.
Daniel T Chen,

20
İpucu: Eğer tam yolu bilmiyorsanız, sadece komut adını biliyorsanız, whicho programı bulmak için kullanın :dpkg -S `which firefox`
Lekensteyn

1
@DanielTChen, ancak dlocatedlocate'ın veritabanı güncel değilse işi yapamayabilir. sudo update-dlocatedbGüncellemek için aramanız gerekir.
jarno

2
Eğer dpkgkesin yolu şey (örneğin dönmez dpkg /usr/bin/java), sadece çalıştırılabilir programın adını (örn deneyin dpkg java).
Dan Dascalescu,

2
Ayrıca kullanabilirsiniz realpathböyle, sembolik çözmek için: dpkg -S $(realpath $(which <command>)).
Lars Nyström

236

apt-fileKomut komut satırından sizin için bunu yapabilirsiniz. Paketleri kaynaktan oluştururken sık kullanıyorum. Sisteminizde kurulu olan paketler tarafından sağlanan dosyalar apt-cacheiçin başka bir seçimdir.

Yüklemek apt-fileiçin şunları yapın:

sudo apt-get install apt-file

Ardından veritabanını güncellemeniz gerekir:

apt-file update

Ve son olarak dosyayı arayın:

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

Ancak Ubuntu Paketleri Arama web sitesini kullanmak için daha dostane bir yoldur . Belirli bir dosya adı için "paketlerin içeriğini arama" seçeneğine sahiptirler.


21
Bence bu kabul edilen cevap olmalı. Ancak, Ubuntu Paketleri Aramasına yanıt olarak , bu basit bir kabuk programının son derece kolay ve hatırlanması kolay olduğunu (bildiğiniz bir kez) olduğunu iddia edebilirim. Standart araçlarınız olarak dpkg, apt-get veya yetenek kullanırsanız, internette gezinmek için Chrome'u ateşlemenin kolay bir yolu yoktur!
user2097818

3
@ user2097818 Kabul edilen cevabın bu olmama nedeni, asıl sorumun sistemdeki dosyalar ve kurulu paketlerle sınırlı olmasıdır. apt-filegenellikle yanlış pozitifler, yani kurulmamış paketler bulur. Elbette bu cevap "bonus soru" için harika.
David Z,

3
Dünyanın Redhat bölgesinden olanlar için - apt-file search <>buna en yakın analogdur dnf/yum whatprovides <>.
ffledgling

Uzun zaman önce takma ad apt-file findkullandım apt-findve gerçekten kullanışlı! BTW, son sürümleri için kök gerektirir apt-file update.
val

43

Yüklenmemiş paketlerdeki dosyaları aramak için apt-file da vardır. Örneğin:

apt-file list packagename


13

Hangi paketi, hangi uygulamayı değil demek istiyorsun. Uygulama, paket yöneticinizdir, örneğin Software Center.

Kullanarak dpkg:

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

Örnek

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

Kullanarak apt-file:

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

veya ayrıca mümkün:

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

Örnek

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

Veya burada çevrimiçi , bölümde Search the contents of packages.

görüntü tanımını buraya girin

Örnek

görüntü tanımını buraya girin


Hangi paketi, hangi uygulamayı değil demek istiyorsun. Uygulama, paket yöneticinizdir, örneğin Yazılım Merkezi. Tamam. Teşekkür ederim! :)
ReyKev

Tüm yardımlarınız için teşekkürler! Bu önerilerden hiçbiri bu uygulamaları bu pakette yüklü bulmama yardımcı olmadı. Tüm aramalar sadece "İzleyici" ye geri dönüyor. Yine de Enthoughts 'Canopy'den şüphelendim. O mil uzunluğundaki EULA bana eski Microsoft Windows şaşkınlığımı hatırlattı ve bununla artık ilgilenmediğim için çok mutluyum. Tracker’ın dün kurulduğunu gördüm, böylece kök olarak, Enthoughts 'Canopy ile birlikte ondan kurtuldum ve tüm problemler çözüldü. Yardımlarınız için çok teşekkür ederim. Böyle bir desteğe sahip olmak harika bir şey. Tekrar teşekkürler! Kevin
ReyKev

4

Bu Alexx Roche'un mükemmel cevabının bir uzantısı . Bu cevabı değiştirmeye çalıştım, ancak reddedildi (Alexx tarafından olmasa da)


whichSistemime neyin kurulduğunu bulmaya çalışıyordum . Biraz çalıştıktan sonra yarattım/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 $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Yüklenen çoğu ŞEY için, sadece kullanabilirsiniz:

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

Yüklenmemiş ŞEYLER için şunları kullanabilirsiniz:

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

apt-whatprovidesSenaryo ve sisteminizde olmayan dosyaları için çalışır. Örneğin, sistemim eksikti, digancak pingsonuçta böyle oldu:

pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

pi@raspberrypi:~ $ 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

Bunun (yüklü) Searching foriçin tam bir yol ve pingyüklenmemiş için yalnızca ikili ad olduğuna dikkat edin dig. Bu, dnsutilsaramaya gitmeye gerek kalmadan yüklemem gerektiğini keşfetmeme yardımcı oldu https://packages.ubuntu.com/#search_contents


Bu, benimkini silmem için iyi bir cevap!
Alexx Roche

3

whichSistemime neyin kurulduğunu bulmaya çalışıyordum . Biraz çalıştıktan sonra apt-whatprovides oluşturdum

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

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

Çoğu şey için sadece kullanabilirsiniz

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

1
Alexx, bu cevabı seviyorum. Umarım düzenlememe aldırmazsın. Ayrıca sistemde yüklü olmayan dosyalar için de çalışmasını sağladım. Gist.github.com/RichardBronosky/… adresinde bir yedekleme yaptım ve geri alır / reddederseniz kendi cevabımı oluşturacağım.
Bruno Bronosky

Güncelleme: Makarna bu cevabı kopyalamak ve üzerinde ince değişiklikler yapmak için sümüklü hissettiriyor, ancak düzenlemem reddedildi. Umarım cevabınızın bütünlüğünü benimkinde tutmuş gibi hissediyorum .
Bruno Bronosky

Düzenlemek veya kesmek için çekinmeyin; sizin için daha iyi hale getiren herhangi bir şey, (bu yüzden MIT Lisansını ekledim! Krediye bile ihtiyacım yok.)
Alexx Roche

2

Bunu yapmak zorunda olmanızın bir nedeni, zaten bir ubuntu paketi olan yazılımı derliyorsanız, çalıştırabilirsiniz apt-get build-dep $PACKAGENAME. Derlemeniz gereken tüm paketleri kuracaktır $PACKAGENAME.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.