ค้นหาไฟล์ที่เป็นของแพ็คเกจใน Ubuntu / Debian?


300

ฉันมักจะพบว่าตัวเองขาดโปรแกรมหน้าคนหรือไฟล์อื่น ๆ เมื่อทำงานกับระบบ Ubuntu 8.04 ของฉัน มีวิธีง่าย ๆ ในการค้นหาแพคเกจประกอบด้วยไฟล์ที่กำหนด (ไม่ว่าจะติดตั้งแล้วหรือไม่)? บางทีตัวเลือกที่คลุมเครือสำหรับ apt หรือ dpkg?



25
dpkg -S /path/to/fileหากคุณมีแพ็คเกจที่ติดตั้ง
Zaz

คำตอบ:


247
apt-file search filename

หรือ

apt-file search /path/to/file


ในการติดตั้งapt-fileให้ใช้:

sudo apt-get install apt-file

คุณจะต้องอัปเดตฐานข้อมูลก่อนจึงจะสามารถใช้งานได้:

sudo apt-file update

7
FYI: ไฟล์ apt ดูเหมือนว่าขึ้นอยู่กับ Contents-amd64.gz ที่จัดทำโดยที่เก็บ และไม่ใช่ repos ของบุคคลที่สามทั้งหมดที่ให้ไฟล์นี้
Jokester

3
มันไม่ได้ผลสำหรับฉัน ฉันอัปเดตฐานข้อมูลแล้ว แต่ไม่ส่งคืนสิ่งใด dpkg -Sทำงานตามที่อธิบายไว้ด้านล่าง
Northys

404

(Debian / Ubuntu) ค้นหาแพคเกจไฟล์ที่เป็นของ :

dpkg -S /usr/bin/ls

'dpkg -S' เพียงแค่จับคู่สตริงที่คุณระบุดังนั้นให้ใช้ 'ls' เป็นอาร์กิวเมนต์ตรงกับไฟล์ใด ๆ จากแพ็คเกจใด ๆ ที่มี 'ls' ที่ใดก็ได้ในชื่อไฟล์ ดังนั้นโดยปกติควรใช้เส้นทางที่สมบูรณ์ คุณสามารถดูได้ในตัวอย่างที่สองว่าไฟล์ 12,000 ไฟล์ที่ dpkg รู้จักตรงกับสตริงเปลือย 'ls'


33
นั่นคือเฉพาะเมื่อไฟล์ที่ติดตั้งแล้ว
John T

19
ในทางกลับapt-fileกันสิ่งนี้จะค้นหาแพ็คเกจไปยังไฟล์หากติดตั้งด้วยตนเองผ่านdpkg -i!
tanius

4
ถ้าคุณได้รับdpkg แบบสอบถาม: เส้นทางไม่พบรูปแบบการจับคู่ ลองนี้dpkg -S "$(readlink -fn "$(which rename)")" :
Pablo

1
แปลกนี่ใช้ไม่ได้กับฉัน: dpkg-query: no path found matching pattern /usr/bin/javaแม้ว่าจะมีไฟล์อยู่ที่/usr/bin/java
nnyby

@nnyby ดูความคิดเห็นของ Pablo A
vog

19

packages.debian.orgเป็นสิ่งที่ฉันมักจะใช้เพื่อให้งานนี้สำเร็จ มันเหนือชั้นกว่า apt-file เพราะมันสามารถหาส่วนของชื่อไฟล์ได้เช่นกัน นอกจากนี้ยังเชื่อมโยงกับรายการแพคเกจหลักซึ่งจะแสดงรายการคำอธิบายข้อบกพร่องและอื่น ๆ ทั้งหมดในเว็บไซต์ที่ดี ไม่เป็นประโยชน์จากบรรทัดคำสั่ง แต่ก็ยังค่อนข้างมีประโยชน์

สำหรับความเร็วฉันบุ๊คมาร์ค URL:

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

ใน Firefox และเพิ่ม "debfind" เป็นคำหลัก (คลิก "เพิ่มเติม" ในเครื่องมือจัดการบุ๊คมาร์คที่มันเปล่งประกาย) ดังนั้นฉันสามารถพิมพ์ "debfind" และมันจะทำงาน คุณสามารถเปลี่ยน 'ชุด' มันจากไม่เสถียรเป็นเสถียรหรือทดสอบถ้าคุณต้องการสำหรับรุ่นอื่น ๆ ของการกระจาย


มันไม่ทำงานกับ repos ที่กำหนดเองแม้ว่า
Ctrl-C

ทางเลือกที่ไม่ดีเกี่ยวกับระบบอัตโนมัติ
อเล็กซานเด Shcheblikin

11

คุณยังสามารถใช้ dlocate จากหน้าคน;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocateเป็นวิธีโปรดของฉันเชื่อถือได้มาก
Avio

2
@Avio dlocateไม่พบแพ็คเกจที่เพิ่งติดตั้งเว้นแต่ว่าคุณจะเรียกใช้sudo update-dlocatedbก่อน คำสั่งจะทำงานอัตโนมัติทุกวันใน /etc/cron.daily/dlocate
jarno

4

ฉันพบวาจิก ...

wajig whichpackage /path/to/file 

เช่น.

wajig whichpackage /etc/apt/sources.list

Wajig เป็นเครื่องมือบรรทัดคำสั่งหรือเครื่องมือแบบพกพาที่ครอบคลุมความดีที่ได้รับ apt-get, dpkg ที่คุณไม่เคยต้องการที่จะเรียนรู้ .

ในการติดตั้ง wajig ให้ใช้:

apt-get install wajig

คำสั่งนั้น'package 'นั้นขึ้นอยู่กับไฟล์ apt

คุณยังจะต้องอัปเดตฐานข้อมูลก่อนที่จะใช้: - ฉันยังไม่รู้ถ้า wajig update ซึ่ง aix-apt-get update ยังอัพเดตแคชไฟล์อยู่ แต่ฉันคาดว่ามันอาจจะ

sudo wajig update

sudo apt-file update

(และ Super Cow, อีสเตอร์ egss?!)


2

Simmilar to jamuraa ตอบสำหรับ Debian คุณสามารถไปที่http://packages.ubuntu.com/สำหรับ Ubuntu คุณจะต้องเลื่อนลงเล็กน้อยเพื่อค้นหาช่องค้นหา "ค้นหาเนื้อหาของแพ็คเกจ"ที่คุณสามารถป้อนเส้นทางของไฟล์


ตอนนี้ถ้ามี Raspbian เพียงคนเดียวก็มี :)
XTL

0

ลองค้นหาไฟล์โดยใช้http://www.kodkast.com/applications/find-which-package-file-belongs-to

นี่เป็นแอปพลิเคชั่นสำหรับค้นหาไฟล์ที่มีอยู่ในแพ็คเกจ rpms / linux ที่แตกต่างกันและมีประโยชน์มากเมื่อคุณไม่ต้องติดตั้ง rpm ในเครื่องของคุณ


Downvote: ลิงก์เสียหายและดูเหมือนว่าลิงก์นั้นมีไว้สำหรับแพ็คเกจ RPM ตั้งแต่แรก
tripleee

0

แพ็คเกจที่ไม่พบคำสั่งจะให้คำแนะนำคุณเกี่ยวกับคำสั่งที่เป็นไปได้และชื่อของแพ็คเกจ debian มันทำงานได้โดยการพิมพ์คำสั่งใน bash shell และดูที่เอาต์พุต

ตัวอย่างเช่นหากทราบชื่อคำสั่ง:

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

และหากไม่ทราบคำสั่งก็จะใช้การเดาบางอย่าง

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

วิธีนี้ใช้ไม่ได้กับไฟล์ใด ๆ อย่างไรก็ตามเช่น OP ที่ร้องขอ
CVn

นี่เป็นเคล็ดลับที่มีปัญหาหากโปรแกรมทำสิ่งที่เป็นอันตรายและติดตั้ง IS การเพิ่ม-hหรือ--helpท้ายจะช่วยเล็กน้อย หากการเพิ่ม-hในตอนท้ายจะทำให้ปลอดภัยพอที่ฉันจะแนะนำ แต่ถึงอย่างนั้นมันก็ไม่ใช่วิธีที่ดีในการบรรลุสิ่งที่ OP ขอ
ดร. เบโก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.