จะลบแพ็คเกจเก่าที่ติดตั้งโดย pacman ใน Arch Linux ได้อย่างไร


51

ฉันเพิ่งติดตั้ง Arch Linux และพบว่าฉันกำลังออกไปทานที่เก็บข้อมูลจำนวนมากอย่างรวดเร็ว ด้วยเหตุผลใดก็ตามที่ฉันได้ใช้ 17GB ในเวลาเพียงประมาณ 2 สัปดาห์ ฉันไม่ได้ติดตั้งซอฟต์แวร์จำนวนมากดังนั้นฉันจึงเชื่อว่าแพคเกจเก่าทั้งหมดนั้นได้รับการดูแลรักษาไว้ที่ใดที่หนึ่ง

เพื่อรองรับสิ่งนี้ฉันสังเกตเห็นว่าถ้าฉันติดตั้งแพคเกจเอาแพ็คเกจนั้นออกแล้วติดตั้งใหม่ที่ pacman เพียงปลดและติดตั้งซอฟต์แวร์ใหม่โดยไม่ต้องดาวน์โหลดอีกครั้ง

หลังจากที่ฉันติดตั้งระบบพื้นฐานของฉันก่อนซอฟต์แวร์พิเศษฉันใช้ประมาณ 2GB หรือมากกว่านั้น ฉันได้ติดตั้ง Matlab, Skype, Wine และโปรแกรมเล็ก ๆ อื่น ๆ อีกสองสามรายการเท่านั้น แน่นอนฉันได้ติดตั้งไลบรารีที่ขาดหายไปและสิ่งที่คล้ายกัน แต่ไม่คุ้มค่าเกือบ 15GB

ฉันผิดที่นี่หรือ Arch ไม่เคยลบแพ็คเกจเก่าเมื่อทำการดาวน์โหลด / อัปเกรดเป็นเวอร์ชั่นใหม่หรือไม่?

ถ้าเป็นเช่นนั้นฉันจะลบแพ็กเกจที่ไม่ได้ใช้เหล่านี้ได้อย่างไร

นอกจากนี้เมื่อฉันลบแพ็คเกจที่ติดตั้งฉันใช้ pacman -R ...


1
อาจเป็นความคิดที่ดีที่จะตั้งค่า paccache เป็นประจำcronหรือsystemdงาน
Sparhawk

คำตอบ:


59

ไม่ pacman ไม่ได้ลบแพ็กเกจเก่าออกจากแคชของคุณ ( /var/cache/pacman/pkg) ดังนั้นเมื่อเวลาผ่านไปก็สามารถเติมได้

คุณสามารถปรับใช้สองวิธีในการล้างแคช: brute force one ด้วยpacman -Sc:

-c, --clean
ลบแพ็คเกจที่ไม่ได้ติดตั้งจากแคชอีกต่อไปรวมถึงฐานข้อมูลการซิงค์ที่ไม่ได้ใช้ในปัจจุบันเพื่อเพิ่มพื้นที่ว่างในดิสก์ เมื่อ pacman ดาวน์โหลดแพ็คเกจมันจะบันทึกมันไว้ในไดเรกทอรีแคช นอกจากนี้ฐานข้อมูลจะถูกบันทึกไว้สำหรับทุกการซิงค์ฐานข้อมูลที่คุณดาวน์โหลดจากและจะไม่ถูกลบแม้ว่าพวกเขาจะถูกลบออกจากไฟล์การกำหนดค่า pacman.conf (5) ใช้สวิตช์สะอาดหนึ่งสวิตช์เพื่อลบเฉพาะแพ็คเกจที่ไม่ได้ติดตั้งอีกต่อไป ใช้สองเพื่อลบไฟล์ทั้งหมดออกจากแคช ในทั้งสองกรณีคุณจะมีตัวเลือกใช่หรือไม่ใช่เพื่อลบแพ็คเกจและ / หรือฐานข้อมูลที่ดาวน์โหลดมา

หรือสำหรับแนวทางที่เหมาะสมยิ่งขึ้นคุณสามารถใช้หนึ่งในโปรแกรมอรรถประโยชน์ที่จัดส่งด้วย pacman-contrib paccache:

paccache เป็นโปรแกรมทำความสะอาดแคช pacman ที่ยืดหยุ่นซึ่งมีตัวเลือกมากมายเพื่อช่วยควบคุมจำนวนและสิ่งที่จะถูกลบออกจากไดเรกทอรีใด ๆ ที่มี tarballs แพ็คเกจ pacman

โดยค่าเริ่มต้นpaccacheจะลบทั้งหมดยกเว้นแพ็คเกจที่ติดตั้งสามเวอร์ชันสุดท้าย แต่คุณสามารถเปลี่ยนหมายเลขนี้ได้ด้วย-k, --keepสวิตช์ นอกจากนี้ยังมี-d, --dryrunสวิตช์เพื่อดูตัวอย่างการเปลี่ยนแปลงของคุณ ดูpaccache --helpสวิตช์ทั้งหมด

มีจำนวนของสาธารณูปโภคในแพคเกจ pacman-contrib เพื่อช่วยในการจัดการแพคเกจมันมีค่าดูแม้ว่าพวกเขาทั้งหมดและได้รับความเข้าใจในการทำงานและสามารถทำให้ Arch ทำงานง่ายขึ้นมาก คุณสามารถดูรายการทั้งหมดด้วย:

pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'

jasonwryan กล่าวว่า :) ระวังด้วย--cleanสวิตช์คู่: ห้ามมิให้ย้อนกลับไปใช้แพคเกจการทำงานได้อย่างง่ายดายในกรณีที่ปัญหาใด ๆ เกิดขึ้นกับเวอร์ชั่นล่าสุด (เช่นแพ็คเกจใหม่อาศัย lib เก่าหรือ Python รุ่นเดียวกันกับฮาร์ดแวร์และล่าสุด เคอร์เนล) ฉันค้นหาการตั้งค่า pacman cache ที่อื่นนอกเหนือ/จากโซลูชันที่ดีกว่ามาก (เพียงกำหนดเส้นทางใน/etc/pacman.conf )
tuk0z

2
หากคุณไม่มีpaccacheคุณสามารถรับได้โดยการติดตั้งpacman-contribแพคเกจ
pfrenssen

+1 แต่ฉันแนะนำ$ pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin\/./ {print $NF}'ให้หลีกเลี่ยงบรรทัดว่างในผลลัพธ์ ;-)
Cbhihe

Welp rm -rf /var/cache/pacman/pkgเป็นสิ่งที่ผิดที่ต้องทำ
โพสต์ด้วยตนเอง

หน้าเว็บที่เกี่ยวข้อง ArchWiki: wiki.archlinux.org/index.php/pacman#Cleaning_the_package_cache
wxyz

13

/var/cache/pacman/pkg/แคชแพคเกจของคุณอยู่ใน

หมายเหตุ: pacmanแพ็คเกจได้รับการอัพเดตในปี 2561 และจำเป็นต้องติดตั้งเพิ่มเติมpacman-contribเพื่อใช้งานสคริปต์ / เครื่องมือpaccacheตามที่อธิบายไว้ด้านล่าง

ทำ:

paccache -d

ในการทำ-dryrunและดูว่ายูทิลิตี้นั้นอาจลบออกเมื่อคุณทำสิ่งต่อไปนี้:

paccache -r

เพื่อลบแพ็กเกจที่แคชไว้ 17gbs เสียงสูงชัน ตรวจสอบให้แน่ใจว่าคุณไม่มีบันทึกการเรียกใช้บางอย่าง ทำ:

du -h /var/log

หรือแม้แต่เพียงแค่:

du -h /var

สำหรับแนวคิดทั่วไปเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้น


7

pacman -Sccทำในสิ่งที่คุณถาม แต่ไม่แนะนำ จากวิกิ

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

นอกจากนี้เมื่อฉันถอนการติดตั้งแพคเกจฉันชอบที่จะใช้pacman -Rnscเพราะมันยังเอาการอ้างอิงแพคเกจเช่นเดียวกับแพคเกจที่ขึ้นอยู่กับสิ่งนี้ และเช่นเคยอ่านอย่างละเอียดว่าแพ็กเกจใดที่จะถูกลบออกเนื่องจากคุณสามารถออกจากระบบของเราได้อย่างง่ายดายในสถานะที่ใช้ไม่ได้


มันเจ๋ง - มันเทียบเท่ากับrm /var/cache/pacman/pkg/*ตอนนั้นเหรอ? หรือ - อย่างน้อยฉันก็คาดเดา ฉันได้ย้ายแคช pkg ของฉันไป/tmpที่เครื่องส่วนใหญ่เป็นเวลานานแล้วและให้squidจัดการกับแคชกลางเดียวที่เราเตอร์ ไม่ง่ายอย่างที่pacman -Sccคิด
mikeserv

@mikeserv แพคเกจ Pacman ส่วนกลางที่เราเตอร์ของคุณหรือไม่ คุณติดตั้งอย่างไรฉันชอบเสียงมันตั้งแต่ฉันมีทั้งเดสก์ท็อป Arch และแล็ปท็อป
รุนแรง

6

ผมขอแนะนำให้ใช้แทนpaccache แม้จะมีธงที่มีประสิทธิภาพมากในการลบการคัดเลือกรุ่นของแพคเกจยกเลิกการติดตั้งpacman -Sc -uธงของpaccacheฉันแนะนำคือ (เป็นส่วนหนึ่งของ paccache v5.0.2):

  • -d, --dryrun: ดำเนินการแบบแห้ง, ค้นหาเฉพาะแพ็คเกจผู้สมัคร
  • -r, --remove: ลบแพ็คเกจผู้สมัคร
  • -u, --uninstalled: เป้าหมายแพคเกจที่ถอนการติดตั้งเท่านั้น
  • -k, --keep <num>: เก็บ "num" ของแต่ละแพ็คเกจไว้ในแคช (ค่าเริ่มต้น: 3)

ตัวอย่าง: ตรวจสอบเวอร์ชันแคชที่เหลืออยู่ของแพ็คเกจที่ถอนการติดตั้ง

paccache -dvuk0

1
สิ่งนี้จะเพิ่มคำตอบที่มีอยู่นอกเหนือจากการพิมพ์ตัวเลือกได้อย่างไร
jasonwryan

หากคุณลบแพ็กเกจขนาดใหญ่ที่ไม่ได้ใช้ออกจำนวนมากคุณต้องการลบออกจากแคชของ pacman นี้เป็นไปได้ด้วยธงของ-u paccacheตัวอย่างของแพ็คเกจขนาดใหญ่เช่น Gnome, KDE หรือ Texlive เพื่อให้ความคิดแก่คุณ
เล่นกลลวง

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

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