给定一个包名称,我想知道如果删除该包及其依赖项将释放多少空间。
由于依赖项可能在包之间共享,因此正确的说法可能是:一个包占用多少空间,包括仅由该包使用的所有依赖项
我更喜欢 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-avail
或apt-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
(来自 mandpigs
):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