เป็นไปได้หรือไม่ที่จะยกเลิกคำสั่ง apt-get install?


67

ฉันติดตั้ง Carpadio บน Xubuntu ของฉันติดตั้ง (Live USB) ซึ่งจากนั้นดึงแพคเกจกว่า 50 แพคเกจฉันคิดว่าด้าน Ubuntu ของที่เก็บ ตอนนี้ฉันต้องการยกเลิกสิ่งนี้ อย่างไรก็ตามสำหรับการล่าสัตว์ของฉันฉันไม่สามารถหาอะไรที่มีประโยชน์มากขึ้นกว่าที่ฉันจะกลับ sudo- ฉลาดได้รับการติดตั้งคำสั่งapt-get purgeที่เพิ่งแสดงให้เห็น สิ่งนี้ไม่ได้มีประโยชน์เนื่องจากจะลบ 2 แพ็คเกจ (carpadio และ carpadio-gnomepanel)

/var/log/apt/history.logมีรายการแพ็กเกจทั้งหมดที่ติดตั้งพร้อมกับคำสั่งนั้น ดังนั้นฉันสงสัยว่ามีวิธีง่าย ๆ ในการกำจัดพวกเขาทั้งหมดหรือไม่? อื่นฉันเพิ่งติดตั้งนี่คือการติดตั้งใหม่อยู่แล้ว แต่ฉันอยากรู้

ตัวอย่างบันทึกประวัติขนาดเล็ก (1 / 5-1 / 10 ของรายการทั้งหมด)

Commandline: apt-get install cardapio-gnomepanel
ติดตั้ง: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, อัตโนมัติ), python-packagekit: amd64 (0.7.2-4ubuntu3, อัตโนมัติ), ถ้วย -pk-helper: amd64 (0.2.1.2-1ubuntu0.1, อัตโนมัติ) , geoclue: amd64 (0.12.0-1ubuntu12, อัตโนมัติ), unity: amd64 (5.18.0-0ubuntu1, อัตโนมัติ), ตัวบ่งชี้เครื่องพิมพ์: amd64 (0.1.6-0ubuntu1, อัตโนมัติ), libevolution: amd64 (3.2.3- 0ubuntu6, อัตโนมัติ), libqt4-declarative: amd64 (4.8.1-0ubuntu4.3, อัตโนมัติ), libmtp9: amd64 (1.1.3-1ubuntu0.1, อัตโนมัติ), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 อัตโนมัติ), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2 อัตโนมัติ), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, อัตโนมัติ), gnome-media: amd64 (3.4.0- 0ubuntu3.1, อัตโนมัติ), metacity: amd64 (2.34.1-1ubuntu11, อัตโนมัติ), nautilus: amd64 (3.4.2-0ubuntu6, อัตโนมัติ), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, อัตโนมัติ), compiz- ปลั๊กอินเริ่มต้น:amd64 (0.9.7.12-0ubuntu1, อัตโนมัติ), libunistring0: amd64 (0.9.3-5, อัตโนมัติ), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, อัตโนมัติ), ubuntu-docs: amd64 (12.04.6 อัตโนมัติ), python-mako: amd64 (0.5.0-1 อัตโนมัติ)

สำหรับทุกคนที่ได้แนะนำautoremove: ฉันไม่แน่ใจว่าทำไม แต่ฉันได้รับเพียงหนึ่งแพคเกจที่เกี่ยวข้องกับหลามอื่น ๆ (python-keybinder หรืออะไรบางอย่าง) เป็น "ไม่จำเป็น" และนั่นคือทั้งหมดที่ autoremove สามารถลบได้

xubuntu-restricted-extrasระหว่างการติดตั้งและถอนการติดตั้งเพียงการเปลี่ยนแปลงที่สำคัญได้รับการติดตั้ง


4
มันสายไปหน่อยที่จะได้รับความช่วยเหลือในกรณีนี้ แต่ครั้งต่อไปที่คุณต้องการติดตั้งบางสิ่งให้ลองทำการจำลองก่อน รันsudo apt-get install -s packageที่-sการจำลองหมายถึงและpackageจะถูกแทนที่ด้วยชื่อของซอฟต์แวร์ที่เหมาะสม

@ vasa1 ใช่ฉันกำลังตีตัวเองเกี่ยวกับเรื่องนี้ apt-get ถาม [Y / N] เป็นอย่างดีที่ควรได้รับการออกของฉัน ..
คาร์ทิคที

ฉันได้รับเพียง 1 แพ็คเกจที่เกี่ยวข้องกับหลาม (python-keybinder หรือ summat) เป็น "ไม่จำเป็น"คุณจริง ๆ ลบcardapio-gnomepanelแพคเกจ?
gertvdijk

@ gertvdijk ใช่แล้วapt-get remove carpadioนำสิ่งนั้นมาด้วย
Karthik T

1
@KarthikT ถ้าอย่างนั้นฉันก็หลงไปเลยว่าทำไมคุณถึงautoremoveไม่ได้ผล ไม่ว่าคุณจะทำเครื่องหมายแพ็คเกจทั้งหมดว่าติดตั้งด้วยตนเองตอนนี้หรือมีความเข้าใจผิดธรรมดา ง่ายมากapt-get autoremoveเพียงลบแพ็คเกจที่ทำเครื่องหมายไว้โดยอัตโนมัติโดยไม่มีเหตุผลว่าจะต้องใช้ตอนนี้ ถ้ามันไม่ได้ผลสำหรับคุณฉันคิดว่าคุณมีการเปลี่ยนแปลงบางอย่างในระบบของคุณที่คุณไม่ได้บอกในคำถามของคุณ
gertvdijk

คำตอบ:


79

โดยทั่วไปคุณจะต้องทั้งสองapt-get remove(หรือ apt-get ล้าง) แพคเกจและการทำงานหลังจากนั้นจะมีมันย้อนกลับไปติดตั้งapt-get autoremovepackage-one

ลองดูกระบวนการทั้งหมด:

  • sudo apt-get install package-one ติดตั้งการอ้างอิง 50 รายการโดยระบุว่า "อัตโนมัติ" ซึ่งสามารถดูได้จากข้อความที่ตัดตอนมาในคำถามของคุณ

  • sudo apt-get purge package-one ลบออก (ล้างข้อมูล) เพียงอันเดียว แต่ทำสิ่งนี้!

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

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    รายการนี้เป็นเพียงรายการแพ็คเกจทั้งหมดที่ทำเครื่องหมายเป็น "อัตโนมัติ" โดยไม่มีการพึ่งพาย้อนกลับ กล่าวอีกนัยหนึ่งก็คือไม่มีเหตุผลที่จะต้องติดตั้งโปรแกรมเหล่านี้เท่าที่เกี่ยวข้องกับการจัดการบรรจุภัณฑ์

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

  • sudo apt-get autoremove --purge ลบ (ล้างข้อมูล) สิ่งเหล่านี้

ข้อมูลมากกว่านี้


2
ใน OP นี้ได้ดึง Unity และเพื่อนทั้งหมดของมัน ฉันสงสัยว่าการล้าง cardapio จะลบ Unity ฯลฯ แม้หลังจาก autoremove

@ vasa1 ทำไม แพคเกจที่มีการทำเครื่องหมายเป็น 'ติดตั้งโดยอัตโนมัติ' (ที่สามารถเห็นได้ในคำถาม) autoremoveและหากไม่มีเหตุผลที่สามารถพบได้สำหรับผู้ที่จะได้รับการติดตั้งในระบบที่พวกเขาจะได้รับการแนะนำสำหรับการกำจัดโดยใช้
gertvdijk

ใช่ฉันสงสัยเกี่ยวกับ "อัตโนมัติ" หากทำหน้าที่เพื่อระบุ autoremoval ที่ดี OP ควรไม่มีปัญหาแล้ว

@gertvdijk การจับที่ดีโดย @ vasa1 โปรดดูการแก้ไขของฉัน autoremoveไม่ได้ช่วย
Karthik T

@gertvdijk สำหรับ "การติดตั้งที่ตามมา" จะsudo apt-get updateเพียงพอหรือไม่

19

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

sudo apt-get purge package
sudo apt-get --purge autoremove

แต่เพื่อเลิกทำการaptกระทำคุณสามารถใช้apt-undoสคริปต์ มันเป็นสคริปต์ง่ายๆที่สามารถยกเลิกการaptกระทำที่ทำใน Ubuntu มีการบันทึกว่าสคริปต์นี้สามารถทำงานได้เฉพาะถ้าคุณใช้มันแทนapt-getการติดตั้ง / อัพเกรด / ลบ / กำจัด / ลดระดับแพ็คเกจของคุณ

ในการติดตั้งapt-undoใน Ubuntu ให้รันคำสั่งต่อไปนี้ในเทอร์มินัล:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

ใช้:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

หากต้องการเลิกทำการaptitudeกระทำข้างต้นให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล:

apt-undo undo

1
ขอบคุณฉันเจอสิ่งนี้และฟังดูเหมือนว่าหมอสั่งจนกว่าฉันจะเห็นข้อแม้ที่ฉันต้องใช้เพื่อติดตั้งเพื่อให้สามารถยกเลิกได้ ..
Karthik T

1
รับได้สวย. แม้ว่าไวยากรณ์ที่สับสนมาก และฉันไม่ชอบใช้ทางเลือกกับแอปพลิเคชัน core APT ที่ผ่านการทดสอบเป็นอย่างดี ยัง +1!
gertvdijk

7

ใช้พลังของ Unix ใช้บรรทัดไฟล์บันทึกที่คุณมีและสร้างคำสั่งที่จะเลิกทำสิ่งที่ฉลาดทำ ตัวอย่างเช่น:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

ดังนั้นคุณสามารถใช้แพคเกจทั้งหมดนี้ที่คุณติดตั้งโดยไม่ได้ตั้งใจกำหนดบรรทัดที่เหมาะสมจากไฟล์บันทึกของคุณ:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(ฉันใช้perlแทนsedเพราะsedใช้ประเภทของนิพจน์ทั่วไปที่ไม่สนับสนุนการจับคู่ที่ไม่ใช่โลภซึ่งเป็นวิธีที่ง่ายที่สุดในการสร้างสิ่งที่ฉันต้องการ)


1
สคริปต์ที่ดี แต่ควรเป็นเพียงลำดับของคำสั่งที่ผู้ใช้สามารถจำได้เพื่อให้บรรลุ
gertvdijk

ขอบคุณสคริปต์ที่น่ากลัว แต่ฉันกลัวว่ามันจะลงมาที่นี่
Karthik T

1
ฉันใช้รหัสที่คล้ายกันมากในการแก้ปัญหาของฉันปัญหาที่คล้ายกันมาก ฉันทำมันในหลายขั้นตอนเพื่อให้แน่ใจมากขึ้นเกี่ยวกับสิ่งที่เกิดขึ้น ก่อนอื่นฉันคัดลอกบล็อคข้อความที่เกี่ยวข้องจากaptบันทึกไปยังไฟล์ใหม่จากนั้นนำสิ่งนี้ไปใช้กับมัน: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log จากนั้นทั้งหมดที่ฉันทำคือเติมเอาท์พุทนั้นด้วยsudo apt-get removeและฉันก็ไปได้เลย!
Insperatus

1

หลังจากคุณลบแพ็กเกจหนึ่งและคุณสามารถลบออกได้อย่างละเอียดโดยเพิ่ม --purge สำหรับapt-get remove --purge <package>ควรให้ข้อความว่าแพ็คเกจแพ็กเกจที่ดึงเข้ามานั้นถูกติดตั้งโดยอัตโนมัติและไม่จำเป็นอีกต่อapt-get autoremoveไป ลบออก


ขอบคุณ แต่ระบบตอบรับอัตโนมัติพิสูจน์แล้วว่าไม่เพียงพอในกรณีนี้ โปรดดูการแก้ไขของฉัน
Karthik T

1

ตามsudo apt-get purge packagenameด้วย

sudo apt-get autoremove. 

เว้นแต่ว่าจะเป็น metapackage สิ่งนี้ควรดูแลมัน

ดู faq ที่ฉันจะลบไฟล์ Cardapio ทั้งหมดด้วยตนเองได้อย่างไร .


ขอบคุณ แต่ระบบตอบรับอัตโนมัติพิสูจน์แล้วว่าไม่เพียงพอในกรณีนี้ โปรดดูการแก้ไขของฉัน ขอบคุณสำหรับลิงค์คำถามที่พบบ่อยมีประโยชน์มาก!
Karthik T

1
แพ็คเกจอื่น ๆ เหล่านั้นอาจต้องการโดยสิ่งอื่นและไม่ได้ระบุว่าสามารถตอบรับอัตโนมัติได้ คุณดูคำแนะนำที่ลิงค์หรือไม่ เป็นอย่างไรบ้าง
chaskes

คำแนะนำในการเชื่อมโยงค่อนข้างตั้งฉากกับปัญหาหลักและเป็นเพราะฉันกำลังติดตั้งระบบของฉันอีกครั้ง ขอบคุณอยู่ดี
Karthik T

1
  1. วางรายการแพคเกจที่ไม่ต้องการจำนวนมากจากบันทึก apt ลงใน a new_file.txt
  2. ปฏิบัติ perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. คัดลอกผลลัพธ์ของคำสั่งที่ผ่านมาไปยังคลิปบอร์ดหรือท่อมันมีในสถานที่แรก
  4. ดำเนินการsudo apt-get remove[วางเนื้อหาของคลิปบอร์ดที่นี่]

เสร็จสิ้น

โดยทั่วไปเราจำเป็นต้องจัดรูปแบบรายการแพคเกจจากบันทึก apt เป็นสิ่งที่ฉลาดได้เข้าใจ วงเล็บคำพูดระหว่างกันและเครื่องหมายจุลภาคจำเป็นต้องดำเนินการเพื่อให้นั่นคือสิ่งที่ perl เข้ามาเล่น ใช่มีวิธีที่ดีกว่า (มีประสิทธิภาพมากขึ้น) - แต่ฉันทำไปแล้วเข้าใจง่ายและใช้งานได้


+1 สำหรับประสบการณ์ส่วนตัวและคำอธิบาย แต่อย่างที่ฉันได้กล่าวไปแล้วก่อนหน้านี้ฉันได้รีเซ็ต Live USB แล้ว
Karthik T

1

หากต้องการยกเลิกการติดตั้ง apt ครั้งสุดท้ายคุณอาจใช้สิ่งนี้:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

สิ่งนี้จะตรวจจับการติดตั้ง apt ล่าสุดจากประวัติและกำจัดแพคเกจที่ติดตั้งที่นี่ทั้งหมด

คุณสามารถสร้างฟังก์ชั่นที่เรียกว่า aptpurgelastinstall เพื่อให้มันอยู่ในมือเสมอ (จะเพิ่มรหัสไปที่ ~ / .bashrc):

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

ตอนนี้คุณเพียงแค่ต้องพิมพ์ aptpurgelastinstall ในเชลล์เพื่อทำซ้ำการติดตั้งครั้งล่าสุด


ทำปฏิกิริยากับการแก้ไขปัญหาของความคิดเห็น: “ ปรับปรุงการโพสต์ของตัวเอง (ก่อนที่ผมจะได้รับการจดทะเบียน)”คุณสามารถขอการรวมบัญชีของคุณให้ดูaskubuntu.com/help/merging-accounts
Melebius

0

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

1) ลบ ppa จาก /etc/apt/sources.list จำเวลาที่คุณเพิ่ม ppa หากคุณโชคดีคุณไม่จำเป็นต้องแม่นยำ

2) ทำรายการสิ่งที่ต้องติดตั้งใหม่จากช่วงเวลาที่คุณติดตั้ง PPA: cat /var/log/dpkg.log | grep 'อัพเกรด'

3) ทำรายการสิ่งที่จะลบจากช่วงเวลาที่คุณติดตั้ง PPA: cat /var/log/dpkg.log | grep 'ติดตั้ง'

4) ลบแพ็คเกจทั้งหมดออกจากขั้นตอนที่ 3: sudo apt-get remove {รายการแพ็คเกจจากขั้นตอนที่ 3}

5) ติดตั้งแพ็กเกจทั้งหมดใหม่จากขั้นตอนที่ 2: ติดตั้ง sudo apt-get install --reinstall {รายการแพ็คเกจจากขั้นตอนที่ 2}

6) หากสิ่งผิดปกติและคุณไม่สามารถคิดวิธีแก้ปัญหาให้นำ PPA กลับมาและติดตั้งแพคเกจทั้งหมดใหม่จากรายการทั้งสอง


0

ฉันรู้ว่ามันเป็นคำถามที่ค่อนข้างเก่า แต่ฉันมาที่นี่เพื่อขอความช่วยเหลือและบางทีฉันสามารถช่วยใครซักคนได้ ฉันมีสถานการณ์คล้ายกับคาร์ทิค @-T unity8-desktop-session-mirหลังจากการติดตั้ง ฉันรู้ว่ามันเป็นเรื่องใหญ่ มันดึง 233 แพ็กเก็ตไปกับเขา

ใช้autoremoveฉันถูกลบเพียง 34 ของพวกเขา ประเด็นก็คือว่าในระหว่างunity8-desktop-session-mirการติดตั้งจะลบสองแพ็คเกจ ( python3-aptdaemon.pkcompatและevolution-data-server-online-accounts) มันระบุไว้/var/log/apt/history.logหลังจากInstallส่วน

หากต้องการยกเลิกการติดตั้ง Unity 8 โดยสมบูรณ์ฉันได้ออกสิ่งต่อไปนี้:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (ลบ 8 แพคเกจที่เกี่ยวข้องกับ Unity 8)
  4. sudo apt-get --purge autoremove

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

PS: บางทีautoremoveขั้นตอนที่สองก็ไม่จำเป็นเพราะฉันออกอีกครั้งในขั้นตอนที่สี่


0

ในทางเทคนิคการดำเนินการ "ลบ" หรือ "การลบอัตโนมัติ" ไม่ใช่การ "เลิกทำ" ถึงแม้ว่าพวกเขาสามารถทำให้งานดีพอเกือบทุกครั้ง

โดยค่าเริ่มต้น apt-get จะทิ้งแพ็คเกจไว้เว้นแต่คุณจะระบุ -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

มันน่าเชื่อถือมากขึ้นเพื่อดู apt history.logและถอนการติดตั้งแพคเกจที่ติดตั้งทั้งหมด ฉันสร้างสคริปต์ขนาดเล็กที่ใช้โหนดเพื่อให้กระบวนการง่ายขึ้น:

https://github.com/rolfen/apt-history

นอกจากนี้ยังเป็นอีกแนวทางหนึ่งที่ทำด้วยมือเพื่อการเปลี่ยนแปลง "ย้อนกลับ":

https://unix.stackexchange.com/a/236711

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