ฉันจะตรวจสอบรายการอ้างอิงสำหรับแพ็คเกจ deb ได้อย่างไร


93

ฉันจะตรวจสอบรายการอ้างอิงสำหรับแพ็คเกจ deb ได้อย่างไร ฉันกำลังใช้ Ubuntu 11.10 และฉันได้รับการสนับสนุนขึ้นทุกแพคเกจ deb var/cache/apt/archivesจาก ฉันต้องการฟอร์แมตพีซีและติดตั้งแอปพลิเคชั่นที่เลือกใหม่เท่านั้น ฉันจะดูรายการแพคเกจที่ติดตั้งและการอ้างอิงได้อย่างไร


สำหรับคำถามที่สองของคุณโปรดดูaskubuntu.com/questions/17823/…
htorque

สำหรับรายการแพคเกจที่ติดตั้งทั้งหมดให้ใช้dpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

คำตอบ:


72

นอกเหนือจากdpkgวิธีนี้คุณสามารถตรวจสอบการขึ้นต่อกันของแพ็กเกจในที่เก็บ:

apt-cache depends package-name

แก้ไขแก้ไขด้วยคำแนะนำของ @ Tino ความคิดเห็นของ @ Tigran ไม่สามารถใช้งานได้อีกต่อไป


3
หมายเหตุ: ใช้งานได้เฉพาะเมื่อติดตั้งแพคเกจไว้แล้ว
Tigran Saluev

@TigranSaluev โปรดทราบว่าdpkg -I packageใช้งานได้กับแพ็คเกจที่ติดตั้งเท่านั้น การทำงานสำหรับทุกแพคเกจซึ่งเป็นที่รู้จักหลังจากที่คุณได้ทำapt-cache apt-get update
Tino

1
apt-cache depends packageเป็นวิธีที่ดีกว่าในกรณีเช่นที่showpkgไม่ได้บอกว่าการพึ่งพาเป็นคำแนะนำความขัดแย้ง ฯลฯ ดังนั้นมันจึงทำให้งงเล็กน้อย สำหรับสคริปต์ซึ่งไม่dependsรวมกับการshowpkgเห็นunix.stackexchange.com/a/362866/23450
โน่

100

นี่จะแสดงข้อมูลทั้งหมดเกี่ยวกับแพ็คเกจ:

dpkg -I package.deb

นั่นใช้ไม่ได้กับ Ubuntu 14.04 อีกต่อไป:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson

@ CraigS.Anderson ทำงาน 14.04 ที่นี่และมันทำงานได้อย่างสมบูรณ์แบบในกรณีของฉัน ควรเป็นคำตอบที่ได้รับการยอมรับจาก IMHO
magic_al

อย่าลืมที่จะใส่ก่อนชื่อแพคเกจและการใช้แท็บเสร็จสิ้นเพื่อหาสิ่งที่ชื่อแพคเกจเต็มรูปแบบกับรุ่นเช่น/var/cache/apt/archives/ dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb
Jason R. Coombs

1
ฉันไม่เห็นข้อมูลการพึ่งพาใด ๆ
Nick

คุณสามารถเพิ่มว่าแพคเกจสามารถรับได้โดยไม่ต้อง (อีกครั้ง) การติดตั้งนั้น (ซึ่งอาจจะเป็นกรณีที่ใช้นิยม) sudo apt-get install --reinstall --download-only [package name]ด้วย
Karl Richter

2

apt-cache depends [Package-Name]จะทำงานเช่นกัน แม้ว่าถ้าคุณมา.debแพคเกจจากนอกรายการแหล่งที่มาของคุณสิ่งต่าง ๆ เช่น apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]อาจแสดงข้อมูลที่ล้าสมัยหรืออาจไม่ซิงค์กับแพคเกจที่ติดตั้งจริงดังนั้น dpkg -I [Package-Name]จะทำงานได้ดีที่สุดในกรณีนั้น


2

สำหรับ 14.04 และใหม่กว่า:

dpkgไม่มี-Iอีกแล้วและคุณต้องใช้dpkg-debเพื่อแสดงข้อมูลแพคเกจรวมถึงการอ้างอิง:

dpkg-deb -I package.deb

1
สวัสดี Fabby dpkg ไม่มีตัวเลือก -I ในขณะนี้ ทดสอบบน Ubuntu 12.04 และ 16.04 คุณต้องใช้ dpkg-deb แทน
Rup Narayan

ความคิดเห็นหดกลับ คำตอบชี้แจงและ upvoted
Fabby

0

นี่คือบางส่วนที่เลอะเทอะและอาจไม่ครอบคลุมการประมวลผลหลังคุณสามารถdpkg -Iส่งออกเพื่อรับรายการการพึ่งพาเป็นรายการ:

ย่อสำหรับคอมพิวเตอร์

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

ขยายสำหรับมนุษย์:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

สิ่งนี้จะสะท้อนแพ็กเกจที่ขึ้นอยู่กับ 'foo.deb' และยังไม่ได้ติดตั้ง: dpkg -I foo.deb | สำหรับ i ใน $ (awk -F ',' '/ ขึ้นอยู่กับ: / {gsub (/: /, ","); สำหรับ (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); ทำ dpkg -s $ i &> / dev / null || echo $ i; เสร็จสิ้น tr '\ n' ''
Gregory Burd

@GregoryBurd, รู้สึกอิสระที่จะแก้ไขคำตอบของฉัน / psot ทั้งหมดที่คุณต้องการฉันโพสต์มันเป็นชุมชน wiki ด้วยเหตุนี้ ^ u ^
ThorSummoner

เมื่อฉันเรียกใช้คำสั่งนี้กับ elasticsearch มันจะปล่อยออกlibc6\nadduser\n Installed-Size\nมา นั่นคือดูเหมือนว่าจะจับคู่มากกว่าแค่บรรทัดขึ้นอยู่กับ
Jason R. Coombs

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