ความแตกต่างระหว่าง apt-cache และ dpkg -l


9

ฉันใช้ apt-cache pkgname เพื่อดึงแพ็คเกจเป็น

me@host:~$ apt-cache pkgnames | wc -l
62803

รับ 62803 ผลลัพธ์

แต่

me@host:~$ dpkg -l | wc -l
2336

อะไรคือสาเหตุที่ทำให้เกิดความแตกต่างอย่างมาก ฉันคิดว่า dpkg นั้นดีกว่าฉลาด


2
ซ้ำซ้อนที่เป็นไปได้ของdpkg-query เทียบกับ apt-cache
Olorin

@Olin ฉันโหวตให้เปิดคำถามนี้ไว้ พวกเขาซ้ำกันไม่เป็นไร แต่ฉันต้องการทิศทางของการทำซ้ำที่จะย้อนกลับและdpkg-query เทียบกับ apt-cacheจะถูกปิดเป็นคำถามที่ซ้ำกันของคำถามนี้แทน
karel

คำตอบ:


16

aptใช้สำหรับจัดการที่เก็บข้อมูลระยะไกลdpkg- สำหรับแพ็คเกจที่ติดตั้งในเครื่อง พวกมันเกี่ยวข้องกัน เป็นจุดสิ้นสุดด้านหน้าapt dpkgเมื่อคุณเรียกใช้apt-get install packageจะได้รับไฟล์และติดตั้งผ่านทาง.deb dpkgดังนั้นตัวเลขจึงแตกต่างกันเนื่องจากมีแพ็คเกจจำนวนมาก แต่มีเพียงเศษส่วนเท่านั้นที่ติดตั้งไว้ในระบบของคุณ

apt-cacheสามารถแสดงทั้งแพคเกจที่ติดตั้งและไม่ได้ติดตั้งเพราะมันจะสอบถามaptแคช - รายการของสิ่งที่มีอยู่ในที่เก็บระยะไกล (แคชนั้นคือสิ่งที่คุณได้รับเมื่อคุณทำapt-get update) ตัวอย่างเช่น

$ apt-cache policy terminator
terminator:
  Installed: (none)
  Candidate: 1.91-1


$ dpkg -l terminator
dpkg-query: no packages found matching terminator

ทราบว่ามีเครื่องมืออื่นซึ่งสามารถสอบถามรายชื่อของการติดตั้ง / dpkg-queryแพคเกจท้องถิ่นออกและว่า ตัวอย่างเช่น

$ dpkg-query -l 'libc6'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

$ dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

ตามคู่มือ dpkg

dpkg สามารถใช้เป็น front-end ถึง dpkg-deb (1) และ dpkg-query (1) รายการของการกระทำที่ได้รับการสนับสนุนสามารถพบได้ในภายหลังในส่วนการกระทำ หากพบการกระทำใด ๆ dpkg เพียงแค่เรียกใช้ dpkg-deb หรือ dpkg-query ด้วยพารามิเตอร์ที่กำหนด แต่ปัจจุบันยังไม่มีตัวเลือกที่เฉพาะเจาะจงถูกส่งไปยังพวกเขาเพื่อใช้ตัวเลือกใด ๆ เช่น back-end จำเป็นต้องถูกเรียกโดยตรง

เท่าที่dpkg-queryจะไปมันควรจะสังเกตว่าเครื่องมือนี้จะมุ่งเน้นไปที่การสืบค้นฐานข้อมูลของแพคเกจที่ติดตั้งและสามารถส่งออกข้อมูลในรูปแบบเฉพาะ ( -fตัวเลือกบวก-Wการกระทำ) ตัวอย่างเช่น

$ dpkg-query -W -f='PACK:${Package}\nARCH:${Architecture}\nSTAT:${Status}\n---\n' libc6
PACK:libc6
ARCH:amd64
STAT:install ok installed
---
PACK:libc6
ARCH:i386
STAT:install ok installed
---

ที่น่าสนใจพอฐานข้อมูล dpkg รักษารายชื่อของแพคเกจที่เลือกสำหรับการกำจัดหรือถูกถอดออกในบางจุด dpkg-queryยังสามารถใช้รูปแบบ glob เป็นอาร์กิวเมนต์และขึ้นอยู่กับการขาดงานของมันแสดงเฉพาะแพคเกจติดตั้ง / กำหนดค่าหรือแพคเกจทั้งหมด


2

dpkg -l แสดงเวอร์ชันแพ็คเกจที่ติดตั้งของคุณ (เริ่มต้นด้วย ii), เวอร์ชันที่ถูกลบ (rc), และอื่น ๆ (เช่นติดตั้ง แต่ไม่ได้กำหนดค่า, ดู manpage)

apt-cache pkgnames แสดงชื่อแพ็กเกจที่มีอยู่ทั้งหมด (แต่ไม่ใช่เวอร์ชันของแพ็กเกจเดียวกัน) ในที่เก็บที่เพิ่ม

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