it-swarm-id.com

Bagaimana cara menemukan paket yang menyediakan file?

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

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

446
David Z

Anda dapat menggunakan perintah dpkg untuk mengetahui paket yang diinstal memiliki file:

Dari man dpkg:

 - S, --search nama file-pola-pencarian ... 
 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 Ubunt

413
Ressu

Perintah apt-file dapat melakukan ini untuk Anda dari baris perintah. Saya sering menggunakannya ketika membangun paket dari sumber. Untuk file yang disediakan oleh paket yang sudah diinstal pada sistem Anda, apt-cache adalah pilihan lain.

Untuk menginstal apt-file, lakukan:

Sudo apt-get install apt-file

Kemudian, Anda perlu memperbarui basis datanya:

apt-file update

Dan, akhirnya, cari file:

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

Namun cara yang jauh lebih ramah adalah dengan menggunakan situs web Pencarian Paket Ubunt . Mereka memiliki opsi untuk "mencari isi paket" untuk nama file tertentu.

226
jbowtie

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

apt-file list packagename
43
ptman

Anda dapat mencari konten paket yang termasuk dalam berbagai rilis Ubuntu di situs web Paket Ubunt . Lihat di bawah judul " Cari isi paket ".

Misalnya, berikut adalah hasil pencarian untuk libnss3.so di lucid (10.04):

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

17
moberley

Maksud Anda, paket mana dan bukan aplikasi mana. Aplikasi 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 di sini , di bagian Search the contents of packages.

enter image description here

Contoh

enter image description here

13
A.B.

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


Saya mencoba melacak which yang diinstal pada sistem saya. Setelah sedikit kerja saya membuat /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 [email protected]) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="[email protected]"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Meskipun untuk sebagian besar HAL yang diinstal Anda hanya dapat menggunakan:

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

Untuk HAL yang tidak diinstal, Anda dapat menggunakan:

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

Skrip apt-whatprovides berfungsi untuk file yang ada dan tidak ada di sistem Anda. Sebagai contoh, sistem saya tidak memiliki Dig tetapi memiliki ping sehingga ini yang menyebabkan:

[email protected]:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

[email protected]:~ $ 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 bahwa Searching for adalah jalur lengkap untuk ping (diinstal) dan hanya nama biner untuk Dig yang tidak diinstal. Ini membantu saya menemukan bahwa saya perlu menginstal dnsutils tanpa harus mencari https://packages.ubuntu.com/#search_contents

3
Bruno Bronosky

Saya mencoba melacak which yang diinstal pada sistem saya. Setelah sedikit kerja saya membuat apt-what memberikan

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

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

Padahal untuk sebagian besar HAL Anda hanya bisa menggunakan

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

Salah satu alasan Anda mungkin harus melakukan ini adalah jika Anda mengkompilasi perangkat lunak yang sudah ada paket ubuntu, Anda dapat menjalankan apt-get build-dep $PACKAGENAME. Itu akan menginstal semua paket yang Anda perlukan untuk mengkompilasi $PACKAGENAME.

2
Rory