ฉันจะลบแพ็คเกจเด็กกำพร้าใน Fedora ได้อย่างไร


42

ฉันเพิ่งเปลี่ยนจาก Ubuntu เป็น Fedora14 ใน Ubuntu เรามีapt-get autoremoveสิ่งที่จะลบแพ็กเกจเด็กกำพร้า / ไม่ได้ใช้ สิ่งที่เป็นคู่ใน Fedora?

คำตอบ:


36

package-cleanup --quiet --leavesจากแพ็คเกจyum-utilsจะแสดงรายการแพ็คเกจห้องสมุดที่ไม่ได้พึ่งพาโดยแพ็คเกจอื่น น่าเสียดายที่มันมีแนวโน้มที่จะ overeager เล็กน้อย ตัวอย่างเช่นในระบบของฉันมันแนะนำให้ลบ libvirt การเพิ่ม--exclude-binอาร์กิวเมนต์ช่วย หากคุณพอใจกับข้อเสนอแนะจากนั้นให้ทำความสะอาดแพ็คเกจโดยทำดังนี้

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
ทดสอบหลังจากการติดตั้งและลบnetbeans-platformและการล้างแพคเกจแสดงรายการบางอย่าง แต่จริงๆแล้วไม่มีการnetbeans-platformอ้างอิงที่ติดตั้งไว้ก่อนหน้านี้(ใช้ Fedora 17)
maxschlepzig

2
ไม่ทำงานตามที่ @maxschlepzig
c0da

30

DNF ซึ่งเป็นการแทนที่ yum ตั้งแต่ Fedora 22 ยังจัดเตรียมคำautoremoveสั่งย่อยซึ่งทำโมเดลหลังจาก apt-get / yum autoremove

ตัวอย่าง:

# dnf autoremove

ซึ่งพยายามที่จะลบติดตั้งโดยอัตโนมัติและไม่ได้ใช้อย่างอื่นแพคเกจการพึ่งพาทั้งหมด - apt-get autoremoveควรจะเทียบเท่าสวยมาก

# dnf autoremove examplepackage

ซึ่งจะลบตัวอย่างของแพ็คเกจและการอ้างอิงทั้งหมดที่ติดตั้งโดยอัตโนมัติ (และไม่ได้ใช้เป็นอย่างอื่น)

ยำ

Yum มีคำสั่ง autoremove ตั้งแต่ Fedora 19 และมีการบันทึกไว้ตั้งแต่ Fedora 20 / RHEL 7

การใช้งานคล้ายคลึงกับการนำไปใช้ของ dnf เช่น:

# yum autoremove

หรือ

# yum autoremove examplepackage

เปลี่ยนพฤติกรรมของยำลบ

Yum สนับสนุนตัวเลือกการกำหนดค่าเพื่อเปลี่ยนพฤติกรรมเริ่มต้นของคำremoveสั่งย่อย (เช่นผ่าน /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

เมื่อตั้งค่าไว้สิ่งต่อไปyum removeจะพยายามลบการพึ่งพาที่ติดตั้งโดยอัตโนมัติหากไม่จำเป็นต้องใช้ในแพ็คเกจอื่น ๆ

นอกจากนี้คุณยังสามารถทดสอบตัวเลือกนี้ชั่วคราวผ่านทางสิ่งต่อไปนี้:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

วิธีแก้ปัญหาสำหรับ Fedora เวอร์ชั่นเก่า

(สำหรับเวอร์ชัน Fedora ที่คำสั่งย่อย yum autoremove ไม่พร้อมใช้งานและ / หรือclean_requirements_on_removeไม่ทำงาน)

แม้ว่าในระหว่างการติดตั้งแพคเกจการพึ่งพาการติดตั้งมีการทำเครื่องหมายเช่นนี้ (ดูเหมือนจะค่อนข้างคุณลักษณะใหม่ของ rpm / yum)

คุณสามารถค้นหาการพึ่งพาที่ไม่จำเป็นผ่านทาง:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

บรรทัดคำสั่งนี้เป็นแรงบันดาลใจสคริปต์ fenris02 ของ

หลังจากการตรวจสอบtmp(และบางทีอาจจะเป็น curation) คุณสามารถลบพวกเขาผ่านบางสิ่งเช่นนี้:

# xargs yum remove < tmp

มันให้ข้อผิดพลาด "yumdb เคียวรีแท็ก 'เหตุผล' ไม่ถูกต้องสำหรับ pkg ที่ติดตั้ง: adobe-release-x86_64-1.0-1.noarch" ตอนนี้คืออะไร
c0da

@ c0da ฉันเดาว่าคุณสมบัติที่ yum บันทึกในฐานข้อมูลว่า 'เหตุผล' ของการติดตั้ง (เช่น'dep 'หรือ' user ') สำหรับแต่ละแพ็คเกจนั้นค่อนข้างใหม่ บางทีอินสแตนซ์ของ Fedora ของคุณมีการแนะนำคุณสมบัติดังกล่าวไว้ก่อนหน้านี้ซึ่งคุณยังคงมีแพ็คเกจ (เก่า) ติดตั้งอยู่โดยไม่มีชุดแท็กนั้น
maxschlepzig

ฉันติดตั้ง Fedora 18 ไปสองสามวัน ดังนั้นฉันคิดว่าควรมีแท็กที่ต้องการ
c0da

1
@ c0da อาจจะไม่ได้บันทึก 'เหตุผล' เนื่องจากคุณติดตั้งแพคเกจadobe-releaseผ่านทางyum localinstall
maxschlepzig

16

คุณต้องติดตั้งปลั๊กอิน yum "remove-with-leaves":

# yum install yum-plugin-remove-with-leaves.noarch

ติดตั้งครั้งเดียว:

# yum remove --remove-leaves package

โชคดี!


3
และวิธีการเรียกใช้สำหรับแอพที่ติดตั้งทั้งหมดหรือไม่
cnd

ดูเหมือนจะไม่น่าเชื่อถือมากเช่นกัน: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig

1
RHEL / CentOS / Oracle Linux 6 ต้องการyum-plugin-remove-with-leaves.noarchแพ็คเกจที่ติดตั้งให้ใช้package-cleanup
Terry Wang

8
# package-cleanup --orphans >/tmp/junk

แก้ไข/tmp/junkไฟล์และลบบรรทัดแรกซึ่งเป็นข้อมูลจากบรรทัดคำสั่งป้อนข้อมูลต่อไปนี้:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
package-cleanup (1) กล่าวว่า: '--orphans รายการแพคเกจที่ติดตั้งซึ่งไม่พร้อมใช้งานจากที่เก็บที่กำหนดค่าปัจจุบัน' นี่ไม่เท่ากับสิ่งที่apt-get autoremoveทำ apt-get (8) พูดว่า: 'autoremove ใช้เพื่อลบแพ็คเกจที่ติดตั้งโดยอัตโนมัติเพื่อตอบสนองการขึ้นต่อกันของบางแพ็คเกจและไม่จำเป็นต้องใช้อีกต่อไป'
maxschlepzig

1
ใช้งานไม่ได้! ฉันต้องถูกเข้าใจผิดก่อนหน้านี้ ขอบคุณ @maxschlepzig
c0da

สิ่งนี้ใช้งานได้สำหรับฉัน แต่ใน CentOS 6.6 จริง ๆ แล้วมันแสดงรายการแพ็คเกจที่ติดตั้งทั้งหมดไม่ใช่แค่เด็กกำพร้า
Gaia

4

หมายเหตุ:คำตอบนี้ถูกต้อง แต่ใช้ได้กับ RHEL 7+ และ Fedora 20+ เท่านั้น (ที่มีการเพิ่มระบบตอบรับอัตโนมัติเป็นคุณลักษณะใหม่)

# yum autoremove

เพียงยืนยันที่จะลบแพ็คเกจที่เลือก



0

ใน Fedora แพคเกจเด็กกำพร้าหมายถึงไม่มี repos ของผู้สมัครเพื่ออัปเดต!

  1. หากแพ็คเกจเด็กกำพร้าถูกสร้างขึ้นโดยคุณปิดการใช้งาน yum.repos.d / some.conf

    yum distro-sync
    
  2. แพคเกจเด็กกำพร้าอื่น ๆ คำสั่งอาจเป็นอันตราย

    yum remove $(package-cleanup --orphans)
    

    หรือเพียงแค่ใช้คำสั่งความปลอดภัย

    yum remove name-of-page
    

0

อีกวิธีหนึ่งที่ไม่ทำให้เกิดปัญหาเหล่านี้คือการใช้ธุรกรรม

หลังจากตั้งค่าระบบพื้นฐานเมื่อคุณติดตั้งโดยใช้ yum ระบบจะสร้างธุรกรรม เมื่อคุณต้องการลบสิ่งต่าง ๆ ให้ย้อนกลับไปทำธุรกรรม

https://docs.fedoraproject.org/en-US/Fedora/24/html/System_Administrators_Guide/sec-DNF-Transaction_History.html

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