berapa banyak ruang yang diberikan paket, dan ketergantungan, biaya?

19

diberi nama paket, saya ingin mencari berapa banyak ruang yang akan dibebaskan jika paket, dan dependensinya, dihapus.

Karena dependensi mungkin dibagi di antara paket, mungkin cara yang tepat untuk menjelaskannya adalah: Berapa banyak ruang yang digunakan paket, termasuk semua dependensi yang hanya digunakan oleh paket ini

Saya lebih suka solusi CLI, karena saya akan menggunakannya dalam skrip

josinalvo
sumber
apt-cache show packagenamedaftar, antara lain, ukuran paket yang diinstal dan dependensi suatu paket. Ada juga apt-cache rdepends packagedaftar paket yang menggunakan paket itu. Anda mungkin ingin memulai dari sana.
saiarcot895
@ saiarcot895 - posting itu sebagai jawaban tolong
Panther

Jawaban:

15

Cara termudah dan bebas bug untuk mendapatkan ruang yang digunakan oleh suatu program dan semua dependensinya adalah menggunakan apt itu sendiri. Catatan dependensi yang tidak digunakan oleh program lain, tetapi diinstal dengan paket, tidak dianggap karena tidak dihapus.
Secara sederhana

sudo apt-get --assume-no autoremove PACKAGENAME

atau

apt-space-used-by() { sudo apt-get --assume-no autoremove $@ | grep freed | cut -d' ' -f4-5 ;}

pemakaian apt-space-used-by PACKAGENAME

Skrip python ini terlihat menjanjikan (bigpkg - temukan paket yang membutuhkan banyak ruang di sistem Anda)

totti
sumber
bukankah ini skrip python untuk Arch?
josinalvo
pertama-tama kita harus menjalankan "sudo apt-get --assume-no autoremove" untuk melihat apakah ada paket yang ingin dihapus oleh sistem (terlepas dari paket yang ingin Anda hapus)
josinalvo
Bukankah itu yang saya jawab? Anda perlu menjalankan 'pembersihan' setelah 'hapus'
totti
Maksud saya: jalankan ini tanpa PACKAGENAME, jalankan nomor dengan PACKAGENAME, dapatkan yang lain. kurangi
josinalvo
Anda benar, dan itu kasus khusus.
totti
5
  • Cukup coba perintah berikut (untuk mendapatkan ruang disk yang dibebaskan oleh pembersihan):

    echo -n | sudo apt-get purge <package> | grep "disk space will be freed"
    

    atau

    echo -n | sudo apt-get purge --auto-remove <package> | grep "disk space will be freed"
    

    tempat ganti <package>dengan Anda package-name(contoh gimp:)

    Ini tidak akan membersihkan paket dengan dependensi tetapi hanya memberikan berapa banyak ruang disk yang akan dibebaskan dengan bantuan grep!


  • Menggunakan dpkg --print-availatau apt-cache show:

    apt-cache show <package> | grep "Installed-Size"
    

    atau

    dpkg --print-avail <package> | grep "Installed-Size"
    

    Ini akan menampilkan ukuran terpasang <package>.

    Contoh:

    $ apt-cache show gimp | grep "Installed-Size"
    Installed-Size: 15024
    

  • Urutkan daftar paket yang diinstal berdasarkan ukuran

    dpkg-query -W -f='${Installed-Size;8}  ${Package}\n' | sort -n
    

    Anda dapat menggunakan lebih banyak untuk halaman-bijaksana:

    dpkg-query -W -f='${Installed-Size;8}  ${Package}\n' | sort -n | more
    

    Paket daftar di atas sesuai dengan ukuran aksesi, Anda dapat menggunakan taildaftar paket yang menggunakan ukuran teratas sebagai berikut:

    dpkg-query -W -f='${Installed-Size;8}  ${Package}\n' | sort -n | tail
    

  • Menggunakan dpigs(dari pria dpigs):

    dpigs - Menampilkan paket yang diinstal menempati ruang paling banyak

    dpigs mengurutkan paket yang diinstal berdasarkan ukuran dan menampilkan yang terbesar. Per default dpigs menampilkan 10 paket terbesar. Anda bisa berubah
       nilai ini dengan menggunakan opsi -n (lihat "PILIHAN"). Informasi ini diambil dari file status dpkg dengan grep-status (1)

    Ini dapat diinstal dengan: Contoh menjalankan perintahsudo apt-get install debian-goodies

    $ dpigs
    115449 wine1.6-i386
    110356 linux-image-extra-3.13.0-24-generic
    103828 libreoffice-core
    86240 fonts-horai-umefont
    74016 libreoffice-common
    72709 liboxideqtcore0
    61736 linux-headers-3.13.0-24
    60821 libpyzy-1.0-0
    59477 firefox
    59443 thunderbird
    

  • Ukuran paket yang tidak digunakan: -

    popularity-contest (8) - list the most popular Debian packages
    popcon-largest-unused (8) - List size of unused packages
    

    Jalankan pertama popularity-contestdan kemudian popcon-largest-unused, Ini akan membantu Anda menemukan ukuran paket yang tidak digunakan. Kunjungi halaman manual untuk informasi lebih lanjut.


Saya mencoba yang terbaik untuk memberikan perintah yang berguna dengan langkah-langkah.
Semoga ini bisa membantu!

Pandya
sumber
Apa unit "ukuran terpasang" dari dpkg / aptcache? Seperti, byte, kilobyte ...?
Hi-Angel
2

apt-cache show packagenamedaftar, antara lain, ukuran paket yang diinstal dan dependensi suatu paket. Ada juga apt-cache rdepends packagenamedaftar paket yang menggunakan paket itu.

Anda mungkin ingin menggunakan perintah yang terakhir dan apt-cache policy packagenameuntuk menentukan apakah ketergantungan terbalik diinstal.

saiarcot895
sumber
Ukuran ini tampaknya tidak dapat dibaca manusia.
ThorSummoner
1
Itu Installed-Sizedalam kilobyte, sedangkan Sizedalam byte. Saya seharusnya menyebutkan hal itu dalam jawaban saya.
saiarcot895
1

Berikut adalah skrip yang melakukan itu. Tidak ada output yang ramah mesin.

sudo apt-get install python-apt

dan kamu siap untuk pergi.

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
import apt
from apt.cache import Filter, FilteredCache

MB = 1024*1024

class InstalledFilter(Filter):
    def apply(self, pkg):
        return pkg.is_installed

def iter_base_deps(cache, package):
    deps = []
    version = package.installed
    for dep_type in ('Depends', 'PreDepends', 'Recommends'):
        deps.extend(version.get_dependencies(dep_type))
    for dep in deps:
        for base_dep in dep:
            if base_dep.name in cache:
                yield base_dep

def main():
    package_ref_count = {}
    results = []

    cache = FilteredCache(apt.Cache())
    cache.set_filter(InstalledFilter())
    for package in cache:
        for base_dep in iter_base_deps(cache, package):
            if base_dep.name in package_ref_count:
                package_ref_count[base_dep.name] += 1
            else:
                package_ref_count[base_dep.name] = 1

    for package in cache:
        base_deps_size = 0
        base_deps = []
        for base_dep in iter_base_deps(cache, package):
            if package_ref_count[base_dep.name] == 1:
                base_deps.append(base_dep)
                base_deps_size += cache[base_dep.name].installed.installed_size
        total_size = package.installed.installed_size + base_deps_size
        results.append((total_size, package, base_deps_size, base_deps))

    for total_size, package, base_deps_size, base_deps in sorted(results, reverse=True):
        if package.name in package_ref_count:
            continue
        if total_size < MB:
            break
        self_size = package.installed.installed_size
        base_dep_count = len(base_deps)
        print('{:.1f} MB  {}'.format(total_size/MB, package.name) + \
              (' with {} deps'.format(base_dep_count) if base_dep_count else ''))
        if base_dep_count:
            print('    {:.1f} MB  self'.format(self_size/MB))
            for base_dep in base_deps:
                size = cache[base_dep.name].installed.installed_size
                print('    {:.1f} MB  {}'.format(size/MB, base_dep.name))


if __name__ == '__main__':
    main()

Contoh output:

72.6 MB  gthumb with 4 deps
    3.0 MB  self
    61.0 MB  libwebkit2gtk-3.0-25
    8.0 MB  gthumb-data
    0.1 MB  gstreamer0.10-gnomevfs
    0.5 MB  flex
pengguna2745509
sumber
Terima kasih. Inilah yang saya inginkan, daftar paket terbesar, dengan ukuran termasuk dependensi. Namun output tidak lengkap, itu menyumbang kurang dari satu gigabyte. Sistem saya menggunakan sekitar 8gigs. Sebagian besar harus paket - saya yakin - saya hampir tidak punya data.
Rolf
@Rolf, saya senang itu berguna. Memang, banyak paket tidak terdaftar, itu terjadi jika suatu paket tergantung oleh beberapa orang lain. Saya sudah mencoba merencanakan dependensi sebagai grafik, dengan cara itu pengguna dapat melihat semua paket dan semua dependensi. Tapi ternyata berantakan total, bola spageti. Maaf karena terlambat membalas.
user2745509