Wie viel Speicherplatz kostet ein bestimmtes Paket und Abhängigkeiten?


19

Unter Angabe eines Paketnamens möchte ich herausfinden, wie viel Speicherplatz freigegeben würde, wenn das Paket und seine Abhängigkeiten gelöscht würden.

Da Abhängigkeiten möglicherweise von Paketen gemeinsam genutzt werden, ist dies möglicherweise der richtige Weg: Wie viel Speicherplatz benötigt ein Paket, einschließlich aller Abhängigkeiten, die nur von diesem Paket verwendet werden

Ich würde CLI-Lösungen bevorzugen, weil ich sie in Skripten verwenden würde


apt-cache show packagenamelistet unter anderem die installierte Größe eines Pakets und die Abhängigkeiten eines Pakets auf. Es gibt auch apt-cache rdepends packagedie Pakete aufzulisten, die dieses Paket verwenden. Vielleicht möchten Sie dort anfangen.
Saiarcot895

@ saiarcot895 - poste das bitte als Antwort
Panther

Antworten:


15

Die einfachste und fehlerfreieste Möglichkeit, den von einem Programm belegten Speicherplatz und all seine Abhängigkeiten abzurufen, besteht darin, apt selbst zu verwenden. Beachten Sie, dass Abhängigkeiten, die nicht von einem anderen Programm verwendet, aber mit einem Paket installiert werden, nicht berücksichtigt werden, da sie nicht entfernt werden.
Einfach

sudo apt-get --assume-no autoremove PACKAGENAME

oder

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

Verwendung apt-space-used-by PACKAGENAME

Dieses Python-Skript sieht vielversprechend aus (bigpkg - finde Pakete, die viel Platz auf deinem System benötigen)


Ist das nicht ein Python-Skript für Arch?
Josinalvo

wir sollten zuerst "sudo apt-get --assume-no autoremove" ausführen, um zu sehen, ob es Pakete gibt, die das System trotzdem entfernen möchte (unabhängig von dem Paket, das Sie entfernen
möchten

Ist das nicht das, was ich geantwortet habe? Sie müssen 'purge' nach 'remove' ausführen
totti

Ich meine: Lass das ohne PACKAGENAME laufen, lass eine Nummer mit PACKAGENAME laufen, hol eine andere. subtrahieren
Josinalvo

Sie haben recht, und das ist ein Sonderfall.
Totti

5
  • Versuchen Sie einfach den folgenden Befehl (um Speicherplatz durch Löschen freizugeben):

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

    oder

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

    wo durch <package>dein ersetzen package-name(Beispiel:gimp )

    Dies löscht nicht das Paket mit Abhängigkeiten, sondern gibt nur an, wie viel Speicherplatz mit Hilfe von freigegeben wirdgrep !


  • Verwenden von dpkg --print-availoder apt-cache show:

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

    oder

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

    Dies zeigt die installierte Größe von an <package> .

    Beispiel:

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

  • Liste der installierten Pakete nach Größe sortieren

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

    Sie können mehr für die Seite verwenden:

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

    Über der Liste der Pakete nach Größe können Sie die tailPakete mit der folgenden Spitzengröße auflisten:

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

  • Verwenden dpigs(von Mann dpigs):

    dpigs - Zeigt an, welche installierten Pakete den meisten Platz einnehmen

    dpigs sortiert die installierten Pakete nach Größe und gibt die größten aus. Standardmäßig zeigt dpigs die 10 größten Pakete an. Du kannst ändern
       diesen Wert mit der Option -n (siehe "OPTIONEN"). Die Informationen werden mit grep-status (1) aus der dpkg-Statusdatei übernommen

    Dies kann folgendermaßen installiert werden: Beispiel für einen Ausführungsbefehlsudo 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
    

  • Feststellung der Größe des nicht verwendeten Pakets: -

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

    Führen Sie zuerst popularity-contestund dann popcon-largest-unusedFolgendes aus, um die Größe des nicht verwendeten Pakets zu ermitteln. Weitere Informationen finden Sie auf den Manpages.


Ich habe mein Bestes getan, um nützliche Befehle schrittweise bereitzustellen.
Hoffe das hilft!


Was sind die Einheiten der "installierten Größe" von dpkg / aptcache? Wie Bytes, Kilobytes ...?
Hi-Angel

2

apt-cache show packagenamelistet unter anderem die installierte Größe eines Pakets und die Abhängigkeiten eines Pakets auf. Es gibt auchapt-cache rdepends packagename die Pakete aufzulisten, die dieses Paket verwenden.

Sie können den letzteren Befehl verwenden und apt-cache policy packagenamefeststellen, ob eine umgekehrte Abhängigkeit installiert ist.


Diese Größe scheint für den Menschen nicht lesbar zu sein.
ThorSummoner

1
Das Installed-Sizeist in Kilobyte, wohingegen Sizees in Bytes ist. Ich hätte das in meiner Antwort erwähnen sollen.
Saiarcot895

1

Hier ist ein Skript, das das macht. Keine maschinenfreundliche Ausgabe.

sudo apt-get install python-apt

und du bist bereit zu gehen.

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

Beispielausgabe:

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

Vielen Dank. Dies ist, was ich möchte, eine Liste der größten Pakete mit der Größe einschließlich Abhängigkeiten. Die Ausgabe ist jedoch nicht vollständig, sie macht weniger als ein Gigabyte aus. Mein System verwendet ungefähr 8gigs. Das meiste müssen Pakete sein - da bin ich mir sicher - ich habe kaum Daten.
Rolf

@Rolf, ich bin froh, dass es nützlich war. In der Tat werden viele Pakete nicht aufgelistet, was passiert, wenn ein Paket von mehreren anderen abhängig ist. Ich habe versucht, Abhängigkeiten als Diagramm zu zeichnen, so dass der Benutzer alle Pakete und alle Abhängigkeiten sehen kann. Aber es wird ein komplettes Durcheinander, eine Kugel Spaghetti. Entschuldige die späte Antwort.
user2745509
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.