Bao nhiêu không gian cho một gói nhất định, và phụ thuộc, chi phí?


19

được đặt tên gói, tôi muốn tìm xem sẽ giải phóng được bao nhiêu dung lượng nếu gói và phần phụ thuộc của nó bị xóa.

Vì các phụ thuộc có thể được chia sẻ giữa các gói, có thể cách đặt đúng là: gói đó chiếm bao nhiêu dung lượng, bao gồm tất cả các phụ thuộc chỉ được sử dụng bởi gói này

Tôi thích các giải pháp CLI hơn, vì tôi sẽ sử dụng chúng trong các tập lệnh


apt-cache show packagenamedanh sách, trong số những thứ khác, kích thước được cài đặt của một gói và các phụ thuộc của một gói. Ngoài ra còn có apt-cache rdepends packagedanh sách các gói sử dụng gói đó. Bạn có thể muốn bắt đầu từ đó.
saiarcot895

@ saiarcot895 - vui lòng gửi câu trả lời
Panther

Câu trả lời:


15

Cách đơn giản nhất và không có lỗi để có được không gian được sử dụng bởi một chương trình và tất cả các phụ thuộc của nó là sử dụng chính apt. Lưu ý các phụ thuộc không được sử dụng bởi một chương trình khác, nhưng được cài đặt với một gói, không được xem xét vì chúng không bị xóa.
Đơn giản

sudo apt-get --assume-no autoremove PACKAGENAME

hoặc là

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

sử dụng apt-space-used-by PACKAGENAME

Kịch bản python này có vẻ đầy hứa hẹn (bigpkg - tìm các gói yêu cầu nhiều dung lượng trên hệ thống của bạn)


Đây không phải là kịch bản python cho Arch?
josinalvo

trước tiên chúng ta nên chạy "sudo apt-get --assume-no autoremove" để xem liệu có gói nào mà hệ thống muốn loại bỏ hay không (độc lập với gói bạn đang nghĩ đến việc gỡ bỏ)
josinalvo

Đó không phải là những gì tôi đã trả lời? Bạn cần thực hiện 'thanh trừng' sau khi 'xóa'
totti

Ý tôi là: chạy cái này mà không có PACKAGENAME, lấy số chạy với PACKAGENAME, lấy cái khác. trừ
josinalvo

bạn đúng, và đó là trường hợp đặc biệt.
totti

5
  • Đơn giản chỉ cần thử làm theo lệnh (để giải phóng không gian đĩa bằng cách thanh lọc):

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

    hoặc là

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

    nơi thay thế <package>bằng package-name(ví dụ gimp:)

    Điều này sẽ không thanh lọc gói với các phụ thuộc mà chỉ cung cấp bao nhiêu dung lượng đĩa sẽ được giải phóng với sự trợ giúp của grep!


  • Sử dụng dpkg --print-availhoặc apt-cache show:

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

    hoặc là

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

    Điều này sẽ hiển thị kích thước cài đặt của <package>.

    Thí dụ:

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

  • Sắp xếp danh sách các gói được cài đặt theo kích thước

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

    Bạn có thể sử dụng nhiều hơn cho trang khôn ngoan:

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

    Danh sách các gói trên theo kích thước, bạn có thể sử dụng tailđể liệt kê các gói tiêu thụ kích thước hàng đầu như sau:

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

  • Sử dụng dpigs(từ người đàn ông dpigs):

    dpigs - Hiển thị các gói đã cài đặt chiếm nhiều dung lượng nhất

    dpigs sắp xếp các gói được cài đặt theo kích thước và xuất ra những gói lớn nhất. Mỗi dpigs mặc định hiển thị 10 gói lớn nhất. Bạn có thể thay đổi
       giá trị này bằng cách sử dụng tùy chọn -n (xem "TÙY CHỌN"). Thông tin được lấy từ tệp trạng thái dpkg với trạng thái grep (1)

    Điều này có thể được cài đặt bởi: Ví dụ về lệnh chạysudo 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
    

  • Tìm kích thước của gói chưa sử dụng: -

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

    Đầu tiên chạy popularity-contestvà sau đó popcon-largest-unused, Điều này sẽ giúp bạn tìm kích thước của gói không sử dụng. Truy cập trang con người để biết thêm thông tin.


Tôi đã cố gắng hết sức để cung cấp các lệnh hữu ích theo các bước.
Hy vọng những điều này sẽ giúp!


Các đơn vị của "kích thước cài đặt" từ dpkg / aptcache là gì? Giống như, byte, kilobytes?
Hi-Angel

2

apt-cache show packagenamedanh sách, trong số những thứ khác, kích thước được cài đặt của một gói và các phụ thuộc của một gói. Ngoài ra còn có apt-cache rdepends packagenamedanh sách các gói sử dụng gói đó.

Bạn có thể muốn sử dụng lệnh sau và apt-cache policy packagenameđể xác định xem có phụ thuộc ngược được cài đặt hay không.


Kích thước này dường như không thể đọc được.
ThorSummoner

1
Số Installed-Sizenày tính bằng kilobyte, trong khi tính Sizebằng byte. Tôi nên đã đề cập rằng trong câu trả lời của tôi.
saiarcot895

1

Đây là một kịch bản mà làm điều đó. Không có đầu ra thân thiện với máy mặc dù.

sudo apt-get install python-apt

và bạn đã sẵn sàng để đi.

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

Ví dụ đầu ra:

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

Cảm ơn bạn. Đây là những gì tôi muốn, một danh sách các gói lớn nhất, với kích thước bao gồm cả phụ thuộc. Tuy nhiên, đầu ra không hoàn thành, nó chiếm ít hơn một gigabyte. Hệ thống của tôi sử dụng khoảng 8gigs. Hầu hết trong số đó phải là các gói - tôi chắc chắn - tôi hầu như không có bất kỳ dữ liệu nào.
Rolf

@Rolf, tôi rất vui vì nó hữu ích. Thật vậy, rất nhiều gói không được liệt kê, điều đó xảy ra nếu một gói được phụ thuộc bởi một số người khác. Tôi đã thử vẽ các phụ thuộc dưới dạng biểu đồ, theo cách đó người dùng có thể thấy tất cả các gói và tất cả các phụ thuộc. Nhưng nó biến thành một mớ hỗn độn, một quả bóng spaghetti. Xin lỗi vì trả lời muộn.
dùng2745509
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.