ฉันจะทราบได้อย่างไรว่าแพ็คเกจใดเป็นเจ้าของไฟล์


คำตอบ:


44

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

apt-fileค้นหาแคชภายในของมันซึ่งจะช่วยให้คุณไม่ติดตั้งแพ็คเกจทั้งหมดที่คุณต้องการค้นหา ด้านล่างคุณจะพบคำแนะนำเพิ่มเติมโดยละเอียด

dlocateเป็นทางเลือกที่รวดเร็วในการdpkg -L(คำสั่งที่แสดงรายการเนื้อหาแพ็คเกจ) และดังนั้นจึงค้นหาเฉพาะแพ็คเกจที่ติดตั้ง dlocate -S file.nameการค้นหาจะดำเนินการโดย

นอกจากนี้คุณสามารถค้นหาแพคเกจออนไลน์โดยใช้เซิร์ฟเวอร์packages.debian.org (ส่วนค้นหาเนื้อหาของแพ็คเกจ )


การติดตั้งและใช้งาน apt-file

เป็นความคิดที่ดีที่จะอัปเดตก่อน:

sudo apt-get update

ดูว่าอะไรapt-fileคือ:

apt-cache show apt-file

ติดตั้ง:

sudo apt-get install apt-file

อ่านข้อมูลจากที่เก็บข้อมูล (สามารถใช้งานได้โดยไม่ต้องsudoสร้างแคชของผู้ใช้ แต่ด้วยsudoแคชคือทั้งระบบ):

sudo apt-file update

ทำการค้นหา ในตัวอย่างนี้เราต้องการทราบว่าxrandrไฟล์ที่เรียกใช้งานได้คืออะไร:

apt-file search xrandr

จะแสดงแพคเกจจำนวนมากที่มีunxrandr, หรือlxrandr.mo source_lxrandr.pyไม่ค่อยมีประโยชน์ในกรณีของเรา การค้นหาที่ฉลาดกว่า:

apt-file search -x /xrandr$

( $หมายถึงจุดสิ้นสุดของบรรทัด) ตัวอย่างผลลัพธ์:

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

ผลลัพธ์แรกดูเหมือนจะไม่สามารถเรียกใช้งานได้ แต่อย่างที่สองคือ เราสามารถตรวจสอบเพิ่มเติม วิ่ง:

apt-cache show x11-xserver-utils

บิงโก! นี่คือแพ็คเกจ


ลิงค์แรกในคำตอบนี้ ( debianhelp.co.uk/findfile.htm ) ดูเหมือนจะหมดอายุแล้ว
rogpeppe

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

โดยที่ bash คือชื่อแพ็กเกจ


4
คำตอบนี้ดีกว่าคำตอบที่ยอมรับ!
Bex

แก้ไข. เป็นเรื่องน่าเสียดายที่ "คำตอบที่ยอมรับ" ได้รับเครื่องหมายถูกสีเขียวซึ่งเป็นเครื่องหมายที่สื่อถึง "คำตอบที่ถูกต้อง" ในกรณีนี้คำตอบที่ได้รับการยอมรับจะหายไปdpkg-query -Sและมันจะพาคุณไปสู่เส้นทางที่ไม่ถูกต้องในการติดตั้งแพ็คเกจเสริม ..
Scott Prive

42

ทางเลือกอื่น:

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

อย่างน้อย Ubuntu ของฉันทั้งคู่ดูเหมือนจะอยู่ในdpkgแพ็คเกจดังนั้นจึงไม่มีข้อได้เปรียบใด ๆ กับ ...


14

ไฟล์ที่ติดตั้งจะไม่พบตามdpkg -Sที่กล่าวถึงที่: https://askubuntu.com/a/667227/52975

ยกตัวอย่างเช่นจะปรากฏขึ้นเมื่อคุณติดตั้งแพคเกจ/bin/ncnetcat-openbsd

แต่เมื่อ:

dpkg -S /bin/nc

dpkg-query: no path found matching pattern /bin/ncที่เราได้รับ

สิ่งนี้เกิดขึ้นเพราะ/bin/ncถูกสร้างขึ้นโดยการupdate-alternativesโทรในสคริปต์ postinstที่เรียกใช้หลังจากการติดตั้ง

ใช้งานได้เช่นนี้เนื่องจาก/bin/ncมีnetcat-traditionalแพ็คเกจอื่นให้บริการ

ฉันไม่คิดว่าจะมีวิธีทั่วไปในการค้นหาไฟล์ที่สร้างขึ้นดังกล่าว ในกรณีที่เฉพาะเจาะจงของการเชื่อมโยงทางเลือกเราสามารถไปตามลิงก์ด้วยreadlink -f:

dpkg -S "$(readlink -f /bin/nc)"

2

ไม่คุ้นเคยกับ Debian ฉันรู้สึกงุนงงเมื่อลอง:

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

การตรวจสอบเล็กน้อยและฉันพบแพ็คเกจ:

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:~$ 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.