주어진 패키지와 종속성, 비용은 얼마나됩니까?


19

패키지 이름이 주어지면 패키지와 그 종속성이 삭제 된 경우 여유 공간이 얼마나되는지 알고 싶습니다.

패키지간에 종속성이 공유 될 수 있으므로 올바른 배치 방법은 다음과 같습니다.이 패키지에서만 사용되는 모든 종속성을 포함하여 패키지에 필요한 공간

스크립트에서 사용하기 때문에 CLI 솔루션을 선호합니다.


apt-cache show packagename무엇보다도 패키지의 설치된 크기와 패키지의 종속성을 나열합니다. apt-cache rdepends package해당 패키지를 사용하는 패키지를 나열 할 수도 있습니다 . 거기서 시작하고 싶을 수도 있습니다.
saiarcot895

@ saiarcot895-답변으로 게시하십시오
Panther

답변:


15

프로그램이 사용하는 공간과 모든 종속 항목을 얻는 가장 간단하고 버그가없는 방법은 적절한 자체를 사용하는 것입니다. 다른 프로그램에서 사용하지 않지만 패키지와 함께 설치되는 종속성은 제거되지 않으므로 고려되지 않습니다.
간단히

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

파이썬 스크립트는 유망 해 보입니다 (bigpkg-시스템에 많은 공간이 필요한 패키지 찾기)


이 파이썬 스크립트가 아치 용이 아닙니까?
josinalvo

우리는 먼저 "sudo apt-get --assume-no autoremove"를 실행하여 시스템이 제거하고자하는 패키지가 있는지 확인해야합니다 (제거하려는 패키지와 무관)
josinalvo

내가 대답 한 것이 아닌가요? '제거'후 '삭제'를 실행해야합니다
totti

내 말은 : PACKAGENAME없이 이것을 실행하고, PACKAGENAME으로 숫자를 달리고, 다른 것을 얻으십시오. 빼기
josinalvo

네 말이 맞아 특별한 경우 야
totti

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 옵션을 사용하여이 값을 지정하십시오 ( "OPTIONS"참조). 정보는 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사용하지 않는 패키지의 크기를 찾는 데 도움이됩니다. 자세한 내용은 맨 페이지를 방문하십시오.


유용한 명령을 단계별로 제공하기 위해 최선을 다했습니다.
도움이 되길 바랍니다.


dpkg / aptcache의 "설치된 크기"단위는 무엇입니까? 바이트, 킬로바이트…?
Hi-Angel

2

apt-cache show packagename무엇보다도 패키지의 설치된 크기와 패키지의 종속성을 나열합니다. apt-cache rdepends packagename해당 패키지를 사용하는 패키지를 나열 할 수도 있습니다 .

후자의 명령을 사용하고 apt-cache policy packagename리버스 종속성이 설치되어 있는지 판별 할 수 있습니다 .


이 크기는 사람이 읽을 수있는 것으로 보이지 않습니다.
ThorSummoner 2016 년

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

감사합니다. 이것이 내가 원하는 것, 가장 큰 패키지 목록이며 크기는 종속성을 포함합니다. 그러나 출력이 완료되지 않으면 기가 바이트 미만을 차지합니다. 내 시스템은 약 8gigs를 사용합니다. 그것의 대부분은 패키지이어야합니다-나는 확신합니다-나는 거의 데이터가 없습니다.
Rolf

@ 롤프, 유용하게 다행입니다. 실제로 많은 패키지가 나열되어 있지 않습니다. 패키지가 다른 여러 패키지에 종속 된 경우에 발생합니다. 종속성을 그래프로 플로팅하려고 시도하여 사용자가 모든 패키지와 모든 종속성을 볼 수 있습니다. 그러나 그것은 완전한 혼란, 스파게티 공으로 변합니다. 늦은 답변 죄송합니다.
user2745509
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.