รายการพึ่งพา (ซ้ำ) ของแพ็กเกจที่ติดตั้งใน APT


17

สำหรับแต่ละแพ็คเกจฉันได้ติดตั้งฉันต้องการทราบว่าจะติดตั้งแพ็คเกจใดหากฉันถอนการติดตั้ง ตัวอย่างของผลลัพธ์ที่ฉันต้องการคือ ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

ผนวก

ถ้าฉันตรวจสอบสิ่งที่จะถูกลบจริงๆถ้าฉันลบแพคเกจpppโดยใช้apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

ฉันเห็นว่ามันแตกต่างจากสิ่งที่apt-cacheแสดงให้ฉัน (ซึ่งฉันไม่คิดว่ารวมถึงการพึ่งพาแบบเรียกซ้ำ):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

ผนวก 2

เป็นdpkg --get-selections | cut -f1วิธีที่เชื่อถือได้รับรายชื่อของแพคเกจติดตั้งเพื่อย้ำกว่า?


1
การแยกวิเคราะห์apt-get --dry-run removeมีลักษณะที่ถูกต้องโดยทั่วไป อาจพลาดแพ็คเกจที่ติดตั้งโดยอัตโนมัติบางตัวที่จำเป็นสำหรับแพ็คเกจที่ติดตั้งโดยอัตโนมัติซึ่งจำเป็นสำหรับแพ็คเกจที่คุณลบเท่านั้น นั่นเป็นเหตุผลที่คุณไม่คิดว่ามันเป็นคำตอบที่เหมาะสมหรือไม่?
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


11

คุณถามคำถามที่แตกต่างกันสองสามข้อที่นี่ฉันหวังว่าอย่างน้อยฉันจะสามารถช่วยได้ในหนึ่งหรือสอง

ในการแสดงรายการแพ็กเกจที่ติดตั้งทั้งหมดใช้dpkgเพื่อแสดงผลในรายการที่คั่นด้วยฟิลด์

dpkg -l 

หากต้องการรับรายการแพ็กเกจโดยไม่มีฟิลด์พิเศษดังนั้นคุณสามารถไปป์ที่อื่นได้

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

ตัวอย่างเช่นถ้าฉันต้องการลบเคอร์เนลเก่า

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

debfosterวิธีที่ง่ายที่สุดที่จะไปผ่านการอ้างอิงที่ไม่จำเป็นทั้งหมดอยู่กับ มันทำงานแบบโต้ตอบและผ่านสิ่งที่คุณต้องการการอ้างอิงของพวกเขาและสามารถลบหรือแสดงรายการสิ่งที่ไม่ใช่การพึ่งพาแบบเรียกซ้ำ

ในการแสดงรายการการอ้างอิงซ้ำทั้งหมดของแพ็คเกจเฉพาะ

debfoster -d $PACKAGE ## PACKAGE is the specific package.

หลังจากที่คุณดำเนินการแล้วdebfosterคุณสามารถตรวจสอบผู้ที่อยู่ในแพคเกจได้เช่นกัน

debfoster -e $PACKAGE ## PACKAGE is the specific package.

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

ฉันยังต้องการทำความสะอาดแพ็คเกจ 'กำพร้า' หลังจากติดตั้งใหม่ หลังจากฉันลบแพ็คเกจเฉพาะคุณสามารถพลาดอะไรก็ได้apt-get autoremove --purgeกับ

apt-get purge `deborphan`

ในที่สุดบางครั้งคุณไม่--purgeและท้ายที่สุดด้วยแพ็คเกจ 'ของเหลือ' รุ่นที่ใหม่กว่าapt-getสามารถลบออกได้โดยอัตโนมัติ ในการลบ 'ของเหลือ' ออกจากแพ็คเกจที่ถอนการติดตั้งให้รัน

apt-get autoclean

หากคุณไม่มีเวอร์ชันใหม่apt-getคุณสามารถลบออกได้ด้วยคำสั่งเหล่านี้ พวกเขาเกิดข้อผิดพลาดหากไม่มีไฟล์ 'เหลือ' ดูเหมือนว่า autoclean สามารถพลาดบางครั้งโดยไม่คำนึงถึง

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge

debfoster ยังคงมีอยู่ แต่ถือว่าถูกแทนที่โดยคุณสมบัติในความถนัด
Joshua Clayton

4
apt-cache show pkgname1 pkgname2...

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


ขออภัยฉันตั้งคำถามของฉันไม่ถูกต้อง ฉันสนใจที่จะทราบว่าจะถอนการติดตั้งแพคเกจใดสำหรับแต่ละแพ็คเกจที่ฉันติดตั้ง และฉันต้องแสดงรายการแพ็คเกจทั้งหมดที่ฉันติดตั้งด้วย
ลบ

2
@ ลบ: ขออภัยฉันไม่เห็นความคิดเห็นนี้จนถึงตอนนี้ ในการตอบสนอง "ซึ่งแพคเกจจะได้รับการถอนการติดตั้งสำหรับแต่ละแพคเกจผมได้ติดตั้ง" (ผมถือว่าคุณต้องการตอบคำถามนี้บนพื้นฐานต่อแพคเกจ) apt-get remove -s packagenameลอง dpkg -lรายการแพคเกจทั้งหมดที่คุณได้ติดตั้งเป็นเพียง
Faheem Mitha

@FaheemMitha: โพสต์เก่า แต่ยังคงเป็นเคล็ดลับที่ดีapt-get remove -s packagename!
twan163

@ twan163 ความสุขมันมีประโยชน์สำหรับคุณ
Faheem Mitha

1

ฉันคิดว่าคุณต้องดำเนินการต่อและสร้างลูปสำหรับสิ่งเดียวกัน:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

แน่นอนลบส่วนหัว


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