给定的包及其依赖项占用多少空间?

给定的包及其依赖项占用多少空间?

给定一个包名称,我想知道如果删除该包及其依赖项将释放多少空间。

由于依赖项可能在包之间共享,因此正确的说法可能是:一个包占用多少空间,包括仅由该包使用的所有依赖项

我更喜欢 CLI 解决方案,因为我会在脚本中使用它们

答案1

获取程序及其所有依赖项所用空间的最简单且无错误的方法是使用 apt 本身。请注意,其他程序未使用但随软件包安装的依赖项不被视为依赖项,因为它们不会被删除。
只需

sudo apt-get --assume-no autoremove PACKAGENAME

或者

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

用法 apt-space-used-by PACKAGENAME

python 脚本看起来很有前途(bigpkg - 查找系统上需要大量空间的包)

答案2

  • 只需尝试以下命令(通过清除释放磁盘空间):

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

    或者

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

    <package>用您的替换package-name(例如gimp:)

    不会清除包有依赖关系,但是仅给出将释放多少磁盘空间在 的帮助下grep


  • 使用dpkg --print-availapt-cache show

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

    或者

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

    这将显示 的安装大小<package>

    例子:

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

  • 按大小对已安装软件包列表进行排序

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

    您可以在页面方面使用更多:

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

    上面按照大小顺序列出了软件包,您可以使用tail以下方法列出占用最大大小的软件包:

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

  • 使用dpigs(来自 man dpigs):

    dpigs-显示哪些已安装的软件包占用最多空间

    dpigs 按大小对已安装的软件包进行排序,并输出最大的软件包。默认情况下,dpigs 显示最大的 10 个软件包。您可以更改
       使用 -n 选项(参见“选项”)获取此值。此信息使用 grep-status(1) 从 dpkg 状态文件中获取

    可以通过以下方式安装:sudo 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
    

  • 查找未使用包装的尺寸:-

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

    首先运行popularity-contest,然后popcon-largest-unused,这将帮助您找到未使用的包的大小。请访问手册页以获取更多信息。


我尽力逐步提供有用的命令。
希望这些有帮助!

答案3

apt-cache show packagename列出软件包的安装大小和软件包的依赖项等。还可以apt-cache rdepends packagename列出使用该软件包的软件包。

您可能想要使用后一个命令并apt-cache policy packagename确定是否安装了反向依赖项。

答案4

这是一个脚本它可以完成这个任务。但是没有对机器友好的输出。

sudo apt-get install python-apt

您就可以出发了。

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

示例输出:

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

相关内容