Temukan paket apa yang menjadi milik file di Ubuntu / Debian?

300

Saya sering menemukan diri saya kehilangan program, halaman manual, atau file lain ketika bekerja pada sistem Ubuntu 8.04 saya. Apakah ada cara sederhana untuk mencari paket apa yang berisi file yang diberikan (apakah sudah diinstal atau belum)? Mungkin beberapa opsi tidak jelas untuk apt atau dpkg?

Jay Conrod
sumber
Sama di Ubuntu: askubuntu.com/questions/481/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
25
dpkg -S /path/to/filejika Anda memiliki paket yang diinstal.
Zaz

Jawaban:

247
apt-file search filename

atau

apt-file search /path/to/file


Untuk menginstal apt-file, gunakan:

sudo apt-get install apt-file

Anda perlu memperbarui databasenya sebelum dapat menggunakannya:

sudo apt-file update
John T
sumber
7
FYI: apt-file tampaknya bergantung pada Contents-amd64.gz yang disediakan oleh repositori. Dan tidak semua repo pihak ke-3 menyediakan file ini.
Jokester
3
Itu tidak berhasil untuk saya. Saya memperbarui basis data tetapi tidak mengembalikan apa pun. dpkg -Sberfungsi seperti yang dijelaskan di bawah ini.
Northys
404

(Debian / Ubuntu) Temukan paket milik file apa :

dpkg -S /usr/bin/ls

'dpkg -S' hanya cocok dengan string yang Anda berikan, jadi gunakan saja 'ls' sebagai argumen cocok dengan file apa pun dari paket apa pun yang memiliki 'ls' di mana saja dalam nama file. Jadi biasanya itu ide yang baik untuk menggunakan jalur absolut. Anda dapat melihat pada contoh kedua bahwa 12 ribu file yang diketahui dpkg cocok dengan string kosong 'ls'.

percikan
sumber
33
Itu hanya jika file sudah diinstal
John T
19
Berbeda dengan apt-fileini, ini juga menemukan paket ke file jika itu diinstal secara manual via dpkg -i!
tanius
4
Jika Anda mendapatkan dpkg-query: ada jalan ditemukan pola yang cocok coba ini : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo A
1
Aneh, ini tidak berhasil untuk saya dpkg-query: no path found matching pattern /usr/bin/java/usr/bin/java
:,
@nnyby Lihat komentar Pablo A
vog
19

Packages.debian.org adalah apa yang selalu saya gunakan untuk menyelesaikan tugas ini. Ini lebih unggul daripada apt-file karena dapat menemukan bagian nama file juga. Itu juga terhubung ke daftar paket utama yang akan mencantumkan deskripsi, bug, dll. Semua dalam semua situs web yang bagus. Tidak berguna dari baris perintah, tetapi masih cukup bermanfaat.

Untuk kecepatan, saya menandai URL:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

di Firefox, dan menambahkan "debfind" sebagai kata kunci (klik "lebih" di pengelola bookmark dengan itu hilighted), jadi saya bisa mengetik "debfind" dan itu akan berfungsi. Anda dapat mengubah 'suite' itu dari tidak stabil ke stabil atau menguji jika Anda suka, untuk versi distribusi lainnya.

jamuraa
sumber
Itu tidak bekerja dengan repo kustom.
Ctrl-C
Pilihan yang buruk dalam hal otomatisasi.
Alexander Shcheblikin
11

Anda juga dapat menggunakan dlocate. Dari halaman manual;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.
Yeremia
sumber
1
dlocatejuga metode favorit saya, sangat bisa diandalkan.
Avio
2
@ Avi dlocatetidak menemukan paket yang baru diinstal kecuali Anda menjalankannya sudo update-dlocatedbterlebih dahulu. Perintah ini secara otomatis dijalankan setiap hari di /etc/cron.daily/dlocate
jarno
4

Saya menemukan Wajig ...

wajig whichpackage /path/to/file 

misalnya.

wajig whichpackage /etc/apt/sources.list

Wajig adalah alat baris perintah atau konsol praktis yang membungkus semua kebaikan apt-get, dpkg yang tidak pernah ingin Anda pelajari. .

Untuk menginstal wajig gunakan:

apt-get install wajig

Perintah 'paket mana' itu sendiri tergantung pada file-apt

Anda masih perlu memperbarui databasenya sebelum dapat menggunakannya: - Saya belum tahu apakah pembaruan wajig whixh melakukan pembaruan apt-get juga memperbarui cache file, tetapi saya perkirakan mungkin.

sudo wajig update

sudo apt-file update

(dan Super Cow, Paskah, dll?)

pete_m
sumber
2

Sama dengan jawaban jamuraa untuk Debian, Anda juga dapat mengunjungi http://packages.ubuntu.com/ untuk Ubuntu. Anda harus sedikit gulir ke bawah untuk menemukan kotak pencarian "Cari isi paket" di mana Anda dapat memasukkan jalur file.

kiri
sumber
Sekarang seandainya Raspbian juga punya satu :)
XTL
0

Paket command-not-found memberi Anda petunjuk tentang perintah potensial dan nama paket debian. Ia bekerja dengan mengetikkan perintah di bash shell dan melihat hasilnya.

Misalnya jika nama perintah diketahui:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

dan jika perintah tidak diketahui, beberapa tebakan diterapkan:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found
erwing
sumber
Namun ini tidak berfungsi untuk file sewenang-wenang, seperti OP yang diminta.
CVn
Ini adalah tip yang bermasalah jika program melakukan hal-hal berbahaya dan IS terinstal. Menambahkan -hatau --helppada akhirnya akan sedikit membantu. Jika menambahkan -hpada akhirnya akan membuat ini cukup aman saya akan merekomendasikan, tetapi meskipun demikian itu bukan cara yang baik untuk mencapai apa yang diminta OP.
Dr Beco