сколько места стоит данный пакет и зависимости?

19

учитывая имя пакета, я хочу узнать, сколько места освободилось бы, если бы пакет и его зависимости были удалены.

Так как зависимости могут быть разделены между пакетами, возможно, правильный способ это сделать: сколько места занимает пакет, включая все зависимости, которые используются только этим пакетом

Я бы предпочел решения CLI, потому что я бы использовал их в сценариях

josinalvo
источник
apt-cache show packagenameперечисляет, помимо прочего, установленный размер пакета и зависимости пакета. Там также apt-cache rdepends packageперечислить пакеты, которые используют этот пакет. Вы можете начать там.
saiarcot895
@ saiarcot895 - опубликуйте это как ответ, пожалуйста
Panther

Ответы:

15

Самый простой и свободный от ошибок способ получить место, используемое программой и всеми ее зависимостями, - это использовать сам 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 - найдите пакеты, которые требуют много места в вашей системе)

Тотти
источник
Разве это не сценарий Python для Arch?
josinalvo
сначала мы должны запустить «sudo apt-get --assume-no autoremove», чтобы увидеть, есть ли пакеты, которые система хочет удалить в любом случае (независимо от пакета, который вы
собираетесь
Разве это не то, что я ответил? Вам нужно выполнить 'purge' после 'remove'
тотем,
Я имею в виду: запустите это без PACKAGENAME, запустите номер с PACKAGENAME, получите другой. вычесть
josinalvo
Вы правы, и это особый случай.
Тотти
5
  • Просто попробуйте следующую команду (чтобы освободить место на диске при очистке):

    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(от человека dpigs):

    dpigs - показывает, какие установленные пакеты занимают больше всего места

    dpigs сортирует установленные пакеты по размеру и выводит самые большие из них. По умолчанию dpigs отображает 10 самых больших пакетов. Ты можешь измениться
       это значение с помощью опции -n (см. «ОПЦИИ»). Информация берется из файла состояния dpkg с grep-status (1)

    Это может быть установлено с помощью: Пример команды запуска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, это поможет вам найти размер неиспользованного пакета. Посетите man-страницы для получения дополнительной информации.


Я старался изо всех сил, чтобы предоставить полезные команды по шагам.
Надеюсь, это поможет!

Pandya
источник
Каковы единицы измерения "установленного размера" из dpkg / aptcache? Как, байты, килобайты ...?
Привет-ангел
2

apt-cache show packagenameперечисляет, помимо прочего, установленный размер пакета и зависимости пакета. Там также apt-cache rdepends packagenameперечислить пакеты, которые используют этот пакет.

Возможно, вы захотите использовать последнюю команду и apt-cache policy packagenameопределить, установлена ​​ли обратная зависимость.

saiarcot895
источник
Этот размер не кажется читаемым человеком.
ThorSummoner
1
В Installed-Sizeкилобайтах, а Sizeв байтах. Я должен был упомянуть это в своем ответе.
saiarcot895
1

Вот скрипт, который делает это. Нет машинно-ориентированного вывода, хотя.

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
user2745509
источник
Спасибо. Это то, что я хочу, список самого большого пакета, с размером, включая зависимости. Однако вывод не полный, он составляет менее гигабайта. Моя система использует около 8 гигабайт. Большинство из них должны быть пакетами - я уверен - у меня почти нет данных.
Рольф
@ Рольф, я рад, что это было полезно. Действительно, многие пакеты не перечислены, что происходит, если пакет зависит от нескольких других. Я попытался построить зависимости в виде графика, чтобы пользователь мог видеть все пакеты и все зависимости. Но это превращается в полный беспорядок, клубок спагетти. Извините за поздний ответ.
user2745509