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.


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.


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 ...


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)"

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:~$ 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.