Bagaimana cara menghapus paket lama yang diinstal oleh pacman di Arch Linux?

51

Saya baru saja menginstal Arch Linux dan menemukan bahwa saya menggerogoti banyak penyimpanan relatif cepat. Untuk alasan apa pun saya sudah menggunakan 17GB hanya dalam waktu sekitar 2 minggu. Saya tidak memiliki banyak perangkat lunak yang diinstal jadi saya dituntun untuk percaya bahwa semua paket lama dikelola di suatu tempat.

Untuk mendukung ini, saya perhatikan bahwa jika saya menginstal sebuah paket, menghapus paket itu, dan kemudian menginstalnya kembali bahwa pacman hanya membongkar dan menginstal ulang perangkat lunak tanpa harus mengunduhnya kembali.

Setelah saya menginstal sistem basis saya, sebelum perangkat lunak tambahan, saya menggunakan sekitar 2GB atau lebih mungkin. Sejak itu saya hanya menginstal Matlab, Skype, Wine, dan beberapa program kecil lainnya. Tentu saja saya juga telah menginstal pustaka yang hilang dan sejenisnya, tetapi tidak bernilai hampir 15GB.

Apakah saya benar-benar salah di sini atau apakah Arch tidak pernah menghapus paket lama saat mengunduh / memutakhirkan ke versi baru?

Jika demikian, bagaimana cara saya menghapus paket yang tidak digunakan ini?

Juga, ketika saya menghapus paket yang diinstal saya gunakan pacman -R ...

sherrellbc
sumber
1
Ini mungkin ide yang baik untuk mengatur paccache sebagai reguler cronatau systemdpekerjaan.
Sparhawk

Jawaban:

59

Tidak, pacman tidak menghapus paket lama dari cache Anda ( /var/cache/pacman/pkg) jadi, seiring waktu, itu dapat mengisi.

Anda dapat mengadopsi dua pendekatan untuk membersihkan cache: brute force one dengan pacman -Sc:

-c, --clean
Hapus paket yang tidak lagi diinstal dari cache serta database sinkronisasi yang tidak digunakan saat ini untuk membebaskan ruang disk. Saat pacman mengunduh paket, ia menyimpannya di direktori cache. Selain itu, basis data disimpan untuk setiap DB sinkronisasi yang Anda unduh, dan tidak dihapus bahkan jika dihapus dari file konfigurasi pacman.conf (5). Gunakan satu sakelar - bersih untuk hanya menghapus paket yang tidak lagi diinstal; gunakan dua untuk menghapus semua file dari cache. Dalam kedua kasus, Anda akan memiliki opsi ya atau tidak untuk menghapus paket dan / atau basis data unduhan yang tidak digunakan.

Atau, untuk pendekatan yang lebih bernuansa, Anda dapat menggunakan salah satu utilitas yang kapal dengan pacman-contrib, paccache:

paccache adalah utilitas pembersihan cache pacman yang fleksibel, yang memiliki banyak opsi untuk membantu mengendalikan berapa banyak, dan apa, yang dihapus dari direktori mana pun yang berisi tarbal paket pacman.

Secara default, paccacheakan menghapus semua kecuali tiga versi terakhir dari paket yang diinstal, tetapi Anda dapat mengubah nomor ini dengan -k, --keepsakelar. Ada juga -d, --dryrunsaklar untuk melihat perubahan Anda. Lihat paccache --helpsemua sakelar.

Ada sejumlah utilitas dalam paket pacman-contrib untuk membantu manajemen paket, ada baiknya mencari semuanya dan mendapatkan pemahaman tentang bagaimana mereka bekerja dan dapat membuat Arch berjalan lebih mudah. Anda dapat melihat daftar lengkapnya dengan:

pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'
jasonwryan
sumber
jasonwryan mengatakannya :) Juga sangat berhati-hati dengan --cleansaklar ganda : yang melarang dengan mudah kembali ke paket yang berfungsi, jika ada masalah yang terjadi dengan versi terbaru (misalnya paket baru bergantung pada lib yang lebih lama atau rilis Python; sama dengan perangkat keras dan terbaru inti). Saya menemukan pengaturan cache pacman di tempat lain daripada /solusi yang jauh lebih baik (cukup setel path di /etc/pacman.conf ).
tuk0z
2
Jika Anda belum memilikinya, paccacheAnda bisa mendapatkannya dengan menginstal pacman-contribpaket.
pfrenssen
+1, tetapi saya sarankan $ pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin\/./ {print $NF}'untuk menghindari garis kosong dalam hasil? ;-)
Cbhihe
Welp, rm -rf /var/cache/pacman/pkgadalah hal yang salah untuk dilakukan
Post Self
halaman yang relevan ArchWiki
wxyz
13

Cache paket Anda ada di /var/cache/pacman/pkg/.

CATATAN: pacman paket diperbarui pada 2018 dan juga memerlukan instalasi pacman-contribuntuk menggunakan skrip / alat seperti yang paccachedijelaskan di bawah ini.

Melakukan:

paccache -d

Untuk melakukan -dryrundan melihat apa yang bisa dihapus dari utilitas itu saat Anda melakukan selanjutnya:

paccache -r

Untuk menghapus paket yang di-cache. 17gbs memang terdengar curam. Pastikan Anda tidak memiliki beberapa log run-away. Melakukan:

du -h /var/log

Atau bahkan sekadar:

du -h /var

Untuk ide yang lebih umum tentang apa yang terjadi.

mikeserv
sumber
7

pacman -Sccmelakukan apa yang Anda minta, tetapi tidak disarankan. Dari Wiki

Dimungkinkan juga untuk mengosongkan folder cache sepenuhnya dengan pacman -Scc , tetapi melakukan hal itu dianggap praktik yang buruk, karena, selain hal di atas, ia juga mencegah menginstal ulang paket langsung dari folder cache jika diperlukan, sehingga memaksa untuk mengunduh ulang. Anda seharusnya tidak pernah menggunakannya kecuali ada kebutuhan yang sangat besar untuk ruang disk yang lebih besar.

Selain itu, ketika saya menghapus paket, saya lebih suka menggunakan pacman -Rnsc, karena itu juga menghapus dependensi paket serta paket yang tergantung pada yang satu ini. Seperti biasa, baca dengan cermat paket mana yang dihapus, karena Anda dapat dengan mudah meninggalkan sistem kami dalam keadaan tidak dapat digunakan.

aprad046
sumber
Itu keren - jadi itu setara dengan rm /var/cache/pacman/pkg/*itu? Atau - setidaknya sebagai default, saya kira. Saya telah memindahkan cache pkg ke /tmpsebagian besar mesin pada waktu yang lalu dan membiarkan squidmenangani satu cache pusat di router. Tidak semudah itu pacman -Scc.
mikeserv
@ mikeserv Cache paket Pacman pusat di router Anda? Bagaimana Anda mengaturnya, saya suka suaranya karena saya punya Arch desktop dan laptop.
severen
6

Saya sangat menyarankan penggunaan paccachebukan pacman -Sc. Bahkan ada bendera yang sangat efektif untuk menghapus versi selektif dari paket yang dihapus -u. Bendera yang paccachesaya sarankan adalah (sebagai bagian dari paccache v5.0.2):

  • -d, --dryrun: melakukan lari kering, hanya menemukan paket kandidat
  • -r, --remove: hapus paket kandidat
  • -u, --uninstalled: hanya menargetkan paket yang dihapus
  • -k, --keep <num>: simpan "num" dari setiap paket di cache (default: 3)

Contoh: Periksa sisa versi cache dari paket yang dihapus

paccache -dvuk0
strpeter
sumber
1
Bagaimana ini menambah jawaban yang ada, selain mencetak opsi?
jasonwryan
Jika Anda menghapus banyak paket besar yang tidak digunakan, Anda ingin menghapusnya dari cache pacman. Hal ini dimungkinkan dengan bendera -udari paccache. Contoh paket besar adalah misalnya Gnome, KDE, atau Texlive untuk memberi Anda ide.
strpeter
1
Ya, saya kenal dengan bendera itu. Maksud saya hanya menambahkan lebih banyak bendera ke jawaban tidak mengubah fakta bahwa itu hanya meniru apa yang sudah ada di sini.
jasonwryan
yang -kbendera baru bagi saya dan tidak sangat baik dijelaskan dalam dialog bantuan, sehingga penggunaannya di sini adalah berguna.
hLk