Belirli bir paketin ve bağımlılıkların maliyeti ne kadardır?


19

bir paket adı verildiğinde, paket ve bağımlılıkları silinirse ne kadar alanın boşaltılacağını bulmak istiyorum.

Bağımlılıklar paketler arasında paylaşılabileceğinden, belki de bunu koymanın doğru yolu şudur: Bir pakette yalnızca bu paket tarafından kullanılan beeing olan tüm bağımlılıklar da dahil olmak üzere ne kadar yer kaplar

CLI çözümlerini tercih ederim, çünkü bunları senaryolarda kullanırdım


apt-cache show packagenamediğer şeylerin yanı sıra, bir paketin kurulu boyutunu ve bir paketin bağımlılıklarını listeler. apt-cache rdepends packageBu paketi kullanan paketleri de listeleyebilirsiniz. Oradan başlamak isteyebilirsiniz.
saiarcot895

@ saiarcot895 - Bir cevap olarak lütfen gönderin
Panther

Yanıtlar:


15

Bir program tarafından kullanılan alanı elde etmek için en basit ve hatasız yol ve tüm bağımlılıkları apt kendisini kullanmaktır. Başka bir program tarafından kullanılmayan ancak bir paketle yüklenen bağımlılıkların kaldırılmadığı için dikkate alınmaz.
basitçe

sudo apt-get --assume-no autoremove PACKAGENAME

veya

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

kullanım apt-space-used-by PACKAGENAME

Bu python betiği umut verici görünüyor (bigpkg - sisteminizde çok yer gerektiren paketleri bulun)


Arch için bu python betiği değil mi?
josinalvo

Sistemin yine de kaldırmak istediği paketler olup olmadığını görmek için önce "sudo apt-get --assume-no autoremove" komutunu çalıştırmalıyız (kaldırmayı düşündüğünüz paketten bağımsız olarak)
josinalvo

Yanıt verdiğim bu değil mi? 'Kaldır' işleminden sonra 'temizleme' işlemini yürütmeniz gerekiyor
totti

Yani, bunu PACKAGENAME olmadan çalıştırın, PACKAGENAME ile bir numara çalıştırın, başka bir tane alın. çıkarma
josinalvo

haklısın ve bu özel bir durum.
totti

5
  • Basitçe aşağıdaki komutu deneyin (disk alanını temizleme ile boşaltmak için):

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

    veya

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

    nerede yerine <package>sizin ile package-name(örneğin: gimp)

    Bu , paketi bağımlılıklarla temizlemez , sadece yardımı ile ne kadar disk alanı boşaltılacağını verirgrep !


  • dpkg --print-availVeya kullanarak apt-cache show:

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

    veya

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

    Bu, kurulu boyutunu görüntüler <package>.

    Misal:

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

  • Kurulu paketlerin listesini boyuta göre sırala

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

    Sayfa açısından daha fazlasını kullanabilirsiniz:

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

    Boyut paketlerine göre liste paketlerinin üstünde, tailüst boyutu tüketen paketleri aşağıdaki gibi listelemek için kullanabilirsiniz :

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

  • Kullanma dpigs(insandan dpigs):

    dpigs - Hangi kurulu paketlerin en fazla yer kapladığını göster

    dpigs kurulu paketleri boyuta göre sıralar ve en büyükleri çıkarır. Varsayılan olarak dpigs en büyük 10 paketi görüntüler. Değiştirebilirsin
       -n seçeneğini kullanarak bu değeri kullanın (bkz. "SEÇENEKLER"). Bilgiler grep-status ile dpkg durum dosyasından alınır (1)

    Bu kurar: run komutu örneğisudo 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
    

  • Kullanılmayan paketin boyutunu bulma: -

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

    İlk çalıştırma popularity-contestve sonra popcon-largest-unused, Bu kullanılmayan paketin boyutunu bulmanıza yardımcı olacaktır. Daha fazla bilgi için kılavuz sayfalarını ziyaret edin.


Adım adım yararlı komutlar sağlamak için elimden geleni yaptım.
Umarım bu yardımcı olur!


Dpkg / aptcache'deki "kurulu boyut" un birimleri nedir? Bayt, kilobayt gibi mi?
Hi-Angel

2

apt-cache show packagenamediğer şeylerin yanı sıra, bir paketin kurulu boyutunu ve bir paketin bağımlılıklarını listeler. apt-cache rdepends packagenameBu paketi kullanan paketleri de listeleyebilirsiniz.

İkinci komutu kullanmak ve apt-cache policy packagenamebir ters bağımlılığın kurulu olup olmadığını belirlemek isteyebilirsiniz.


Bu boyut insan tarafından okunabilir görünmüyor.
ThorSummoner

1
Installed-SizeOysa kilobayt olan Sizebayt yer almaktadır. Cevabımda bundan bahsetmeliydim.
saiarcot895

1

İşte bunu yapan bir komut dosyası . Hiçbir makine dostu çıkış olsa.

sudo apt-get install python-apt

ve gitmeye hazırsınız.

#!/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()

Örnek çıktı:

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

Teşekkür ederim. Bağımlılıkları da içeren büyüklükte en büyük paketin listesi budur. Ancak çıktı tam değil, bir gigabayttan daha azını oluşturuyor. Sistemim yaklaşık 8gig kullanıyor. Çoğu paket olmalı - eminim - neredeyse hiç verim yok.
Rolf

@Rolf, faydalı olduğuna sevindim. Gerçekten de, bir paket başkaları tarafından bağlıysa, birçok paket listelenmez. Bir grafik olarak bağımlılıkları çizim denedim, bu şekilde kullanıcı tüm paketleri ve tüm bağımlılıkları görebiliyordu. Ama tam bir karmaşaya, bir spagetti topuna dönüşüyor. Geç yanıt için üzgünüm.
user2745509
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.