Pertanyaan Bagaimana saya menemukan paket yang menyediakan file?


Pertanyaan yang cukup sederhana: apakah ada beberapa perintah shell (atau metode GUI) yang dapat saya gunakan, mengingat path ke file di sistem saya, memberi tahu saya paket apa yang meletakkannya di sana? Dengan asumsi file itu memang berasal dari paket, itu.

Pertanyaan bonus: bagaimana jika itu adalah file yang tidak terinstal di sistem saya? Apakah ada, katakanlah, sebuah situs web yang akan membiarkan saya mencari file dan melihat paket apa, jika ada, menyediakannya?


381
2017-07-30 08:10


asal


Saya selalu bertanya-tanya ini sendiri - saya tahu dengan YUM Anda dapat melakukan yum apa yang menyediakan <filepath> / <filename> tetapi saya tidak pernah benar-benar menemukan alternatif untuk itu di Aptitude selain dari paket situs web - Marco Ceppi♦
Sama dengan SU: superuser.com/questions/10997/… - Ciro Santilli 新疆改造中心 六四事件 法轮功
Tak satu pun dari jawaban di sini benar-benar menutupi Provides: mekanisme. Secara lebih rinci, perintah seperti mailx atau sendmail tidak dimasukkan sebagai biner di apa saja paket; sebagai gantinya, berbagai paket menginstal binari mereka sendiri dan kemudian membuat beberapa dari mereka tersedia dengan nama "kanonik" melalui /etc/alternatives. Lihat juga askubuntu.com/questions/366135/… - tripleee


Jawaban:


Kamu dapat memakai dpkg perintah untuk mengetahui paket yang diinstal memiliki file:

Dari man dpkg:

-S, - pencarian filename-search-pattern ...
                  Cari nama file dari paket yang diinstal.

Contoh:

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

Anda dapat mencari dengan path lengkap atau hanya dengan nama file.

Jika Anda ingin mencari file yang belum diinstal di komputer Anda, Anda dapat menggunakan Pencarian Paket Ubuntu


359
2017-07-30 08:42



Saya sangat merekomendasikan menggunakan dlocate, yang diperbarui setiap hari untuk pencarian lebih cepat. - Daniel T Chen
Petunjuk: jika Anda tidak tahu jalur lengkap, tetapi hanya nama perintah, gunakan which untuk menemukan programnya: dpkg -S `which firefox` - Lekensteyn
Ini juga berfungsi untuk pustaka, yang sangat berguna jika Anda memiliki biner yang tidak dapat berjalan karena Anda dapat memeriksanya dengan ldd dan menggunakan jalur perpustakaan lengkap untuk menemukan paket yang hilang. - Alain O'Dea
@DanielTChen, tapi dlocate mungkin tidak melakukan pekerjaan itu, jika database dlocate sudah ketinggalan zaman. Anda harus menelepon sudo update-dlocatedb untuk memperbaruinya. - jarno
Jika dpkg jalur yang tepat tidak mengembalikan apa pun (mis. dpkg /usr/bin/java), coba hanya nama yang dapat dieksekusi (mis. dpkg java). - Dan Dascalescu


Itu apt-file perintah dapat melakukan ini untuk Anda dari baris perintah. Saya sering menggunakannya ketika membuat paket dari sumber. Untuk file yang disediakan oleh paket yang sudah terinstal di sistem Anda, apt-cache adalah pilihan lain.

Untuk memasang apt-file, lakukan:

sudo apt-get install apt-file

Kemudian, Anda perlu memperbarui databasenya:

apt-file update

Dan, akhirnya, cari file itu:

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

Namun cara yang lebih ramah adalah menggunakan Pencarian Paket Ubuntu situs web. Mereka memiliki pilihan untuk "mencari isi paket" untuk nama file tertentu.


187
2017-08-11 02:43



Menurut saya ini seharusnya menjadi jawaban yang diterima. Tetapi dalam menanggapi Pencarian Paket UbuntuSaya mungkin berpendapat bahwa program shell sederhana ini sangat ramah dan mudah diingat (begitu Anda mengetahuinya). Jika Anda menggunakan dpkg, apt-get, atau aptitude sebagai alat standar Anda, tidak ada yang ramah tentang menyalakan Chrome untuk menjelajahi internet! - user2097818
@ user2097818 Alasan mengapa ini bukan jawaban yang diterima adalah bahwa pertanyaan utama saya terbatas pada file di sistem dan paket yang diinstal. apt-file sering menemukan positif palsu, yaitu paket yang tidak diinstal. Tentu saja jawaban ini bagus untuk "pertanyaan bonus". - David Z
Bagi mereka dari sisi Redhat di dunia - apt-file search <> adalah analog terdekat dengan dnf/yum whatprovides <>. - ffledgling


Ada juga file apt untuk mencari file dalam paket yang tidak diinstal. Sebagai contoh:

apt-file list packagename

35
2017-07-30 08:49



persis apa yang saya cari. Terima kasih - NES


Anda dapat mencari isi paket yang disertakan dalam berbagai rilis Ubuntu di Paket Ubuntu situs web. Carilah di bawah judul "Cari isi paket".

Sebagai contoh, berikut adalah hasil pencarian untuk libnss3.so di jernih (10.04):

http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&arch=any


16
2017-08-11 02:42





Maksud Anda, paket mana dan bukan aplikasi mana. Aplikasi ini adalah pengelola paket Anda, mis. Software Center.

Menggunakan dpkg:

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

Contoh

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

Menggunakan apt-file:

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

atau mungkin juga:

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

Contoh

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

Atau online sini, di bagian Search the contents of packages.

enter image description here

Contoh

enter image description here


10
2017-11-29 15:57



Maksud Anda, paket mana dan bukan aplikasi mana. Aplikasi ini adalah pengelola paket Anda, mis. Pusat Perangkat Lunak. Baik. Terima kasih! :) - ReyKev
Terima kasih atas semua bantuannya! Tidak satu pun dari saran ini membantu saya menemukan paket yang menginstal aplikasi ini / ini sekalipun. Semua pencarian hanya mengarah kembali ke "Tracker". Saya menduga itu adalah 'Canopy though'. Itu mil panjang EULA mengingatkan saya pada Microsoft Windows saya linglung, dengan yang, saya sangat senang saya tidak lagi terlibat. Saya melihat bahwa Tracker telah dipasang kemarin jadi, sebagai root, saya menyingkirkannya, bersama dengan Enceptionts 'Canopy dan, semua masalah diselesaikan. Saya benar-benar berterima kasih atas semua bantuan Anda. Sungguh hebat memiliki dukungan semacam itu. Terima kasih lagi! Kevin - ReyKev


Saya mencoba melacak apa yang diinstal which pada sistem saya. Setelah sedikit bekerja, saya membuat apt-whatprovides

#!/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%:*}

Padahal untuk sebagian besar HAL yang bisa Anda gunakan saja

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

2
2018-03-17 15:25



Alexx, saya suka jawaban ini. Saya harap Anda tidak keberatan edit saya. Saya membuatnya juga berfungsi untuk file yang tidak diinstal pada sistem. Saya membuat cadangan di gist.github.com/RichardBronosky/… dan akan membuat jawaban saya sendiri jika Anda mengembalikan / menolaknya. - Bruno Bronosky
Pembaruan: Rasanya berlendir untuk menyalin pasta jawaban ini dan membuat perubahan halus untuk itu, tetapi hasil edit saya ditolak. Saya harap Anda merasa seperti saya mempertahankan integritas jawaban Anda di tangan saya. - Bruno Bronosky
Jangan ragu untuk mengedit atau meretas; apa pun yang membuatnya lebih baik untuk Anda, (itulah sebabnya saya menambahkan Lisensi MIT! Saya bahkan tidak perlu kredit.) - Alexx Roche


Ini adalah ekstensi untuk Jawaban Alexx Roche yang luar biasa. Saya mencoba untuk mengedit jawaban itu, tapi itu ditolak (meskipun tidak oleh Alexx)


Saya mencoba melacak apa yang diinstal which pada sistem saya. Setelah sedikit kerja saya buat /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}"

Meskipun untuk sebagian besar HAL yang dipasang, Anda dapat menggunakan:

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

Untuk HAL yang tidak diinstal, Anda dapat menggunakan:

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

Itu apt-whatprovides skrip berfungsi untuk file yang ada dan tidak ada di sistem Anda. Sebagai contoh, sistem saya kurang dig tapi punya ping jadi begini hasilnya:

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

Perhatikan itu Searching for adalah jalur lengkap untuk ping (terpasang) dan hanya nama biner untuk dig tidak terpasang. Ini membantu saya menemukan bahwa saya perlu menginstal dnsutilstanpa perlu mencari https://packages.ubuntu.com/#search_contents


2
2017-07-18 05:45



Ini adalah jawaban yang bagus yang harus saya hapus milik saya! - Alexx Roche


Salah satu alasan Anda mungkin harus melakukan ini adalah jika Anda menyusun perangkat lunak yang sudah ada paket ubuntu, Anda dapat menjalankannya apt-get build-dep $PACKAGENAME. Itu akan menginstal semua paket yang perlu Anda kompilasi $PACKAGENAME.


1
2017-08-11 19:31