quanto espaço um determinado pacote e dependências custam?

19

dado um nome de pacote, eu quero descobrir quanto espaço seria liberado se o pacote e suas dependências fossem deletados.

Como as dependências podem ser compartilhadas entre pacotes, talvez o jeito certo de colocar isso seja: Quanto espaço um pacote leva, incluindo todas as dependências que estão sendo usadas apenas por este pacote

Eu preferiria soluções CLI, porque eu as usaria em scripts

    
por josinalvo 02.07.2014 / 20:44

4 respostas

15

A maneira mais simples e livre de erros para obter o espaço usado por um programa e todas as suas dependências é usar o próprio apt. Observe que as dependências que não são usadas por outro programa, mas instaladas com um pacote, não são consideradas, pois não são removidas.
Simplesmente

sudo apt-get --assume-no autoremove PACKAGENAME

ou

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

uso apt-space-used-by PACKAGENAME

Este script python parece promissor (bigpkg - encontre pacotes que exijam muito espaço no seu sistema )

    
por totti 05.07.2014 / 13:17
5
  • Basta tentar o seguinte comando (para obter espaço em disco liberado pela limpeza):

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

    ou

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

    em que substitui <package> pelo seu package-name (exemplo: gimp )

    Este não expurgará o pacote com dependências, mas apenas fornecerá quanto espaço em disco será liberado com a ajuda de grep !

  • Usando dpkg --print-avail ou apt-cache show :

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

    ou

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

    Isso exibirá o tamanho instalado de <package> .

    Exemplo:

    $ apt-cache show gimp | grep "Installed-Size"
    Installed-Size: 15024
    
  • Classifique a lista de pacotes instalados por tamanho

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

    Você pode usar mais para a página:

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

    Acima de pacotes de listas de acordo com o tamanho de acesso, você pode usar tail para listar os pacotes que consomem o tamanho máximo da seguinte forma:

    dpkg-query -W -f='${Installed-Size;8}  ${Package}\n' | sort -n | tail
    
  • Usando dpigs (do homem dpigs ):

    dpigs - Show which installed packages occupy the most space

     dpigs sorts the installed packages by size and outputs the largest ones. Per default dpigs displays the largest 10 packages. You can change
       this value by using the -n option (see "OPTIONS"). The information is taken from the dpkg status file with grep-status(1) 

    Isso pode ser instalado por: sudo apt-get install debian-goodies
    Exemplo de comando de execução

    $ 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
    
  • Encontrando tamanho do pacote não utilizado: -

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

    Primeiro, execute popularity-contest e, em seguida, popcon-largest-unused . Isso ajudará você a encontrar o tamanho do pacote não utilizado. Visite man-pages para mais informações.

Eu tentei o meu melhor para fornecer comandos úteis por etapas.
Espero que isso ajude!

    
por Pandya 05.07.2014 / 13:21
2

apt-cache show packagename lista, entre outras coisas, o tamanho instalado de um pacote e as dependências de um pacote. Há também apt-cache rdepends packagename para listar os pacotes que usam esse pacote.

Você pode querer usar o último comando e apt-cache policy packagename para determinar se um depdendency reverso está instalado.

    
por saiarcot895 02.07.2014 / 20:57
1

Aqui está um script que faz isso. Nenhuma saída amiga da máquina.

sudo apt-get install python-apt

e você está pronto para ir.

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

Exemplo de saída:

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
    
por user2745509 07.12.2017 / 13:26