จะลบแพ็คเกจที่ถูกถอนการติดตั้งและแนะนำได้อย่างไร


16

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

apt-get autoremove

แต่จะไม่ลบการพึ่งพาที่แนะนำ / แนะนำโดยแพ็คเกจอื่น ๆ

นั่นคือถ้าฉันติดตั้งแพ็คเกจ X ที่แนะนำ Y แต่ฉันไม่ได้ติดตั้ง Y และจากนั้นฉันจะติดตั้งแพ็คเกจ Z ที่ขึ้นอยู่กับ Y. และใหม่กว่าที่ฉันทำ

apt-get remove --auto-remove Z

ดังนั้น Y จะไม่ถูกลบโดยอัตโนมัติแม้ว่าจะไม่มีอะไรขึ้นอยู่กับมัน (X "เลือก" Y ถึงแม้ว่ามันจะไม่ได้ขึ้นอยู่กับมัน)


1
คุณช่วยบอกว่าแพ็คเกจนี้ทำอะไรได้บ้าง
Braiam

มีหลายตัวอย่างดังนั้นฉันพยายามแยกแก่นแท้ของปัญหาในคำอธิบายข้างต้น คุณมีสิทธิ์ที่ฉันควรจะมีตัวอย่างที่เป็นรูปธรรม: พิจารณาการติดตั้ง texlive-full มันติดตั้งแพคเกจแบบอักษรจำนวนมากซึ่งแนะนำ (แต่ไม่จำเป็น) โดยแพ็คเกจที่มีอยู่ก่อน (ฉันจำไม่ได้อย่างแม่นยำว่าใคร แต่ฉันคิดว่า libreoffice หรือ matplotlib หรืออ็อกเทฟแนะนำไว้) ดังนั้นปัญหาคือ "apt-get install texlive-full" ตามด้วย "apt-get remove --purge --auto-remove texlive-full" ไม่ออกจากระบบในสถานะเดิม
user2809402

คำตอบ:


14

หากคุณต้องการลบแพ็กเกจที่แนะนำออกจากระบบของคุณแม้ว่าจะยังมีแพ็กเกจที่แนะนำบางตัวที่ติดตั้ง (หรือแนะนำ) ให้ใส่สิ่งต่อไปนี้ในไฟล์/etc/apt/apt.conf.d/99_norecommends(สร้างมัน):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

เอกสารประกอบสำหรับตัวเลือกเหล่านี้อยู่ที่นี่

จากนั้นการรัน apt ครั้งถัดไปควรลบทั้งหมด ถ้ามันไม่ได้เปิดตัวaptitudeและชนิดgและgอีกครั้ง

apt-getการกำหนดค่านี้ยังปิดการใช้งานติดตั้งโดยอัตโนมัติของแพคเกจแนะนำเมื่อใช้ สำหรับการaptitudeก็สามารถทำได้จากคอนโซล GUI, เมนูตัวเลือก> การตั้งค่า> "ติดตั้งแพคเกจแนะนำโดยอัตโนมัติ" (ยกเลิกการเลือก)


ฉันจะไม่แนะนำไม่ได้ติดตั้งคำแนะนำที่พวกเขาใช้เวลาส่วนใหญ่ที่มีประโยชน์
Braiam

1
@Braiam นี่ไม่ใช่สิ่งที่ OP ถาม ความคิดเห็นของคุณสำหรับเขาไม่ใช่สำหรับฉัน
Totor

ฉันแค่บอกว่านั่นอาจจะเกินกำลัง
Braiam

@Braiam นั่นคือมุมมองของคุณ ฉันมีชีวิตอยู่ได้ดีกับInstallRecommendsผู้พิการ สำหรับบันทึกนั้นจะถูกปิดใช้งานโดยค่าเริ่มต้นจนกระทั่ง Debian Squeeze เปิดตัวนั่นคือตั้งแต่เดือนกุมภาพันธ์ 2011 (ไม่ทราบเกี่ยวกับ Ubuntu) นอกจากนี้คุณอาจไม่ต้องการการกำหนดค่าเดียวกันบนเซิร์ฟเวอร์หรือการตั้งค่าเดสก์ท็อป
Totor

2
InstallRecommends: เพราะเหตุใดจึงต้องติดตั้งสิ่งที่คุณต้องการ 5MB เมื่อคุณสามารถติดตั้งสิ่งที่คุณไม่ต้องการได้ 1GB
Mark K Cowan

7

เอาชนะตัวเลือก APT

ซึ่งแตกต่างจากการอ้างอิง, ติดตั้งโดยอัตโนมัติ "แนะนำ" หรือ "แนะ" apt-get autoremoveแพคเกจอาจจะละเลยโดย

ตามที่อธิบายไว้ที่อื่นลักษณะการทำงานของ APT นี้สามารถเปลี่ยนแปลงได้ในการกำหนดค่า

ในทำนองเดียวกันการกำหนดค่าของapt-getคำสั่งสามารถเปลี่ยนแปลงได้ชั่วคราวผ่าน-oตัวเลือกบรรทัดคำสั่ง

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

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

ข้อควรระวัง!

ฟังก์ชันการทำงานบางอย่างอาจสูญหาย เตรียมที่จะตรวจสอบและติดตั้งสิ่งต่าง ๆ มันอาจจะง่ายกว่าที่จะออกจากแพ็คเกจเหล่านี้โดยลำพัง

ตัวเลือกอื่น

หากต้องการถอนการติดตั้งแพคเกจ 'ที่แนะนำ' และ 'ที่แนะนำ' สำหรับแพ็คเกจที่เฉพาะเจาะจงเท่านั้นให้ดูที่บันทึกประวัติ apt


1
เพียงแค่วิเคราะห์แพคเกจดังกล่าวดำเนินการแห้งกับapt-getของ-sตัวเลือกและท่อgrep ^Remv- เพื่อให้เป็นคำสั่ง:apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
myrdd

1

จริงๆแล้วคำสั่งคือ:

sudo apt-get autoremove <Z>

แต่นี่มีเคล็ดลับ! หากการอ้างอิงใด ๆ มีแพ็กเกจที่ติดตั้งก่อนหน้านี้ที่แนะนำ / แนะนำพวกเขาดังนั้น apt จะไม่ลบมันออก

คุณไม่ได้ระบุแพ็คเกจใด แต่ตัวอย่างเช่นถ้าฉันจะติดตั้งปลั๊กอิน IcedTea มันจะติดตั้ง Java / OpenJRE ตามการพึ่งพา หากฉันถอนการติดตั้งพวกเขาโดยใช้sudo apt-get autoremove icedtea-7-pluginคุณจะสังเกตเห็นว่ามันจะไม่ลบ Java / OpenJRE เนื่องจาก LibreOffice ยังแนะนำแพ็คเกจ

ดังนั้นในการลบคุณต้องเจาะจงมากเกินไปเกี่ยวกับแพ็คเกจที่คุณต้องการถอนการติดตั้งแบบปกตินั่นautoremoveจะไม่:

sudo apt-get autoremove <Z> <dependency of Z>

ด้วยวิธีนี้คุณสามารถมั่นใจได้ว่าแพ็กเกจของคุณจะถูกลบ

นอกจากนี้คุณยังสามารถใช้ deborphan เพื่อลบการอ้างอิงบางอย่าง


1
โดยความเข้าใจของฉันจาก manpage ฉลาดคือ autoremove ไม่คาดหวังชื่อแพคเกจและจะทำความสะอาดทั้งหมดพึ่งพาแพคเกจที่ไม่ต้องการในระบบ ดังนั้นคุณจะต้องทำ 2 ขั้นตอน: "apt-get remove Z" ตามด้วย "apt-get autoremove" 2 ขั้นตอนเหล่านี้สามารถทำได้พร้อมกันด้วย "apt-get remove - auto-remove Z" ดังที่ได้กล่าวไว้ในคำถามเดิมของฉัน แต่อย่างที่ฉันบอกว่าปัญหาคือมีแพ็กเกจที่เหลืออยู่ซึ่งไม่ได้ลบออกหากพวกเขาถูกแนะนำโดยอย่างอื่น
user2809402

1
ใช่คุณอธิบายปัญหาของฉันได้อย่างสมบูรณ์แบบ ขอขอบคุณ. แต่น่าเสียดายที่คุณยังไม่ได้แก้ไขเพราะฉันไม่ต้องการไปที่ /var/log/apt/history.log และค้นหาแพ็คเกจ Y ทั้งหมดที่ติดตั้งสองสามเดือนที่ผ่านมากับ Z (ในตัวอย่างของคุณ Y = java / jre, Z = ปลั๊กอิน icedtea) จากนั้นเพิ่มด้วยตนเองทั้งหมดลงในบรรทัดคำสั่ง apt ฉันต้องการระบุเฉพาะ Z และส่วนที่เหลือของการขึ้นต่อกันที่จะหยิบขึ้นมาโดยอัตโนมัติแม้ว่าพวกเขาจะได้รับการแนะนำโดยแพ็คเกจ X ที่มีอยู่อื่น (X = libreoffice ในตัวอย่างของคุณ)
user2809402

1
น่าเสียดายที่นี่เป็นวิธีการทำงานของระบบ apt มันชอบเก็บแพคเกจที่ติดตั้งไว้มากกว่าที่จะลบมันออกแม้ว่ามันจะไม่จำเป็นอีกต่อไปก็ตาม วิธีเดียวในการลบออกด้วยตนเองหรือด้วยdeborphanแต่ deborphan อาจพลาดบางแพคเกจยังคง คุณสามารถใช้Debug::ตัวเลือกและการตรวจสอบของฉันคำตอบอื่น ๆ เกี่ยวกับเรื่องนี้ นอกจากนี้คุณยังสามารถใช้--no-install-recommendsแต่ไม่ได้ติดตั้งแพ็คเกจที่แนะนำโดยค่าเริ่มต้น
Braiam

@ user2809402 คุณควรตรวจสอบaskubuntu.com/q/244470/169736
Braiam

Braiam- ขอบคุณสำหรับตัวชี้ Deborphan ฉันจะตรวจสอบมันออกมา.
user2809402

-1

ขวาถ้าคุณต้องการลบแพ็คเกจ<Z>ด้วยการพึ่งพาเพียงพิมพ์:

sudo apt-get autoremove --purge <Z>

3
ขอบคุณ แต่น่าเสียดายที่การเพิ่ม "--purge" เพียงแค่ลบการกำหนดค่าของแพคเกจที่ถูกลบด้วย "autoremove" แต่เท่าที่ผมสามารถดูจะไม่เปลี่ยนแปลงการตัดสินใจเกี่ยวกับการที่แพคเกจที่จะลบ นั่นคือการขึ้นต่อกันของ Z ซึ่งแนะนำโดยแพ็กเกจ X ที่มีอยู่แล้วบางส่วนยังไม่ถูกลบออกไม่ว่าฉันจะระบุ "--purge" หรือไม่ก็ตาม
user2809402

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