Bagaimana cara mengetahui paket Debian dari mana file berasal?
Bagaimana cara mengetahui paket Debian dari mana file berasal?
Jawaban:
Ada beberapa utiliti di Debian yang melakukan tugas ini; periksa halaman ini untuk deskripsi. Saya akan menyebutkan dua dari mereka, apt-file
dan dlocate
.
apt-file
mencari cache internal, sehingga memungkinkan Anda untuk tidak menginstal semua paket yang ingin Anda cari. Di bawah ini Anda akan menemukan panduan lebih rinci.
dlocate
adalah 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 ).
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 sudo
tetapi menciptakan cache pengguna kemudian; dengan sudo
cache adalah seluruh sistem):
sudo apt-file update
Lakukan pencarian. Dalam contoh ini kita ingin tahu di mana paket yang xrandr
dapat dieksekusi adalah:
apt-file search xrandr
Ini daftar banyak paket dengan unxrandr
, lxrandr.mo
atau 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.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Di mana bash adalah nama paket.
dpkg-query -S
DAN mengirim Anda ke jalan yang salah menginstal paket opsional ..
Alternatif lain:
$ dpkg -S /bin/bash
bash: /bin/bash
Setidaknya pada Ubuntu saya, keduanya sepertinya ada dalam dpkg
paket, jadi tidak ada keuntungan nyata untuk yang spesifik ...
File yang dihasilkan instalasi tidak akan ditemukan oleh dpkg -S
, seperti yang disebutkan di: https://askubuntu.com/a/667227/52975
Misalnya, /bin/nc
muncul 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/nc
dihasilkan oleh update-alternatives
panggilan dalam skrip postinst yang dijalankan setelah instalasi.
Ini berfungsi seperti ini karena versi lain /bin/nc
disediakan oleh netcat-traditional
paket.
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)"
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:~$