Bagaimana saya mengetahui paket mana yang memiliki file?

Jawaban:

44

Ada beberapa utiliti di Debian yang melakukan tugas ini; periksa halaman ini untuk deskripsi. Saya akan menyebutkan dua dari mereka, apt-filedan dlocate.

apt-filemencari cache internal, sehingga memungkinkan Anda untuk tidak menginstal semua paket yang ingin Anda cari. Di bawah ini Anda akan menemukan panduan lebih rinci.

dlocateadalah alternatif cepat untuk dpkg -L(perintah yang mencantumkan konten paket), dan karena itu, pencarian hanya paket yang diinstal. Pencarian dilakukan oleh dlocate -S file.name.

Anda juga dapat mencari paket secara online menggunakan server packages.debian.org (bagian Cari konten paket ).


Menginstal dan menggunakan apt-file

Sebaiknya perbarui dulu:

sudo apt-get update

Lihat untuk apa apt-file:

apt-cache show apt-file

Pasang itu:

sudo apt-get install apt-file

Baca data dari repositori (ini berfungsi juga tanpa sudotetapi menciptakan cache pengguna kemudian; dengan sudocache adalah seluruh sistem):

sudo apt-file update

Lakukan pencarian. Dalam contoh ini kita ingin tahu di mana paket yang xrandrdapat dieksekusi adalah:

apt-file search xrandr

Ini daftar banyak paket dengan unxrandr, lxrandr.moatau source_lxrandr.py. Tidak terlalu berguna dalam kasus kami. Pencarian lebih pintar:

apt-file search -x /xrandr$

( $menunjukkan ujung garis). Contoh output:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Hasil pertama tidak terlihat seperti dieksekusi, yang kedua tidak. Kami dapat menyelidiki lebih lanjut. Lari:

apt-cache show x11-xserver-utils

Bingo! Ini paketnya.

Kamil Maciorowski
sumber
Tautan pertama dalam jawaban ini ( debianhelp.co.uk/findfile.htm ) tampaknya sudah tidak aktif sekarang.
rogpeppe
123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Di mana bash adalah nama paket.

Seorang Siswa di Universitas
sumber
4
Jawaban ini jauh lebih baik daripada yang diterima!
Bex
Benar. Sangat disayangkan bahwa "jawaban yang diterima" mendapat tanda centang hijau, yang merupakan tanda yang juga menyampaikan "jawaban yang benar". Dalam hal ini, jawaban yang diterima ketinggalan pada dpkg-query -SDAN mengirim Anda ke jalan yang salah menginstal paket opsional ..
Scott Prive
42

Alternatif lain:

$ dpkg -S /bin/bash
bash: /bin/bash

Setidaknya pada Ubuntu saya, keduanya sepertinya ada dalam dpkgpaket, jadi tidak ada keuntungan nyata untuk yang spesifik ...

Gert van den Berg
sumber
14

File yang dihasilkan instalasi tidak akan ditemukan oleh dpkg -S, seperti yang disebutkan di: https://askubuntu.com/a/667227/52975

Misalnya, /bin/ncmuncul ketika Anda menginstal paket netcat-openbsd.

Tetapi setelah:

dpkg -S /bin/nc

kita dapatkan dpkg-query: no path found matching pattern /bin/nc.

Ini terjadi karena /bin/ncdihasilkan oleh update-alternativespanggilan dalam skrip postinst yang dijalankan setelah instalasi.

Ini berfungsi seperti ini karena versi lain /bin/ncdisediakan oleh netcat-traditionalpaket.

Saya tidak berpikir ada cara umum untuk menemukan file yang dihasilkan tersebut. Khusus untuk symlink alternatif, kami dapat mengikuti tautan dengan readlink -f:

dpkg -S "$(readlink -f /bin/nc)"
Ciro Santilli 烏坎 事件 2016 六四 事件 法轮功
sumber
2

Tidak terbiasa dengan Debian, saya bingung ketika saya mencoba ini:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Sedikit penyelidikan dan saya menemukan paket:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
Philip Kearns
sumber