แพคเกจและพื้นที่ที่ขึ้นต่อกันมีราคาเท่าใด


19

ด้วยชื่อแพ็กเกจฉันต้องการค้นหาว่าจะเพิ่มพื้นที่ว่างหากแพ็กเกจและการอ้างอิงถูกลบทิ้ง

เนื่องจากการอ้างอิงอาจใช้ร่วมกันระหว่างแพคเกจอาจเป็นวิธีที่เหมาะสมในการกล่าวคือ: แพคเกจใช้พื้นที่เท่าใด

ฉันต้องการโซลูชันของ CLI เพราะฉันจะใช้ในสคริปต์


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 - ค้นหาแพ็คเกจที่ต้องการพื้นที่บนระบบของคุณมาก)


ไม่ได้เป็นสคริปต์หลามนี้สำหรับ Arch?
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
    

    ด้านบนรายการแพคเกจตามขนาด acceding คุณสามารถใช้tailเพื่อแสดงรายการแพคเกจที่ใช้ขนาดสูงสุดดังนี้:

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

  • ใช้dpigs(จากคนdpigs):

    dpigs - แสดงแพ็คเกจที่ติดตั้งซึ่งใช้พื้นที่มากที่สุด

    dpigs จัดเรียงแพ็กเกจที่ติดตั้งตามขนาดและเอาท์พุตที่ใหญ่ที่สุด ต่อ dpigs เริ่มต้นจะแสดงแพ็คเกจที่ใหญ่ที่สุด 10 รายการ คุณสามารถเปลี่ยน
       ค่านี้โดยใช้ตัวเลือก -n (ดู "OPTIONS") ข้อมูลถูกนำมาจากไฟล์สถานะ dpkg พร้อมสถานะ grep-1 (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สิ่งนี้จะช่วยให้คุณค้นหาขนาดของแพ็คเกจที่ไม่ได้ใช้ เยี่ยมชมหน้าคนสำหรับข้อมูลเพิ่มเติม


ฉันพยายามอย่างดีที่สุดเพื่อให้คำสั่งที่เป็นประโยชน์ตามขั้นตอน
หวังว่าสิ่งเหล่านี้ช่วย!


หน่วยของ "ขนาดที่ติดตั้ง" จาก dpkg / aptcache คืออะไร ชอบ, ไบต์, กิโลไบต์…?
Hi-Angel

2

apt-cache show packagenameรายการขนาดอื่น ๆ ของแพคเกจที่ติดตั้งและการอ้างอิงของแพคเกจ นอกจากนี้ยังมีapt-cache rdepends packagenameรายการแพ็คเกจที่ใช้แพ็คเกจนั้น

คุณอาจต้องการใช้คำสั่งหลังและapt-cache policy packagenameเพื่อตรวจสอบว่ามีการติดตั้ง reverse-depdendency หรือไม่


ขนาดนี้ดูเหมือนว่ามนุษย์ไม่สามารถอ่านได้
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

ขอขอบคุณ. นี่คือสิ่งที่ฉันต้องการรายการแพคเกจที่ใหญ่ที่สุดที่มีขนาดรวมถึงการอ้างอิง อย่างไรก็ตามการส่งออกไม่สมบูรณ์มันบัญชีน้อยกว่ากิกะไบต์ ระบบของฉันใช้งานประมาณ 8gigs ส่วนใหญ่จะต้องเป็นแพคเกจ - ฉันแน่ใจ - ฉันแทบไม่มีข้อมูลใด ๆ
Rolf

@Rolf ฉันดีใจที่มันมีประโยชน์ แท้จริงแล้วมีแพ็คเกจจำนวนมากที่ไม่ได้ระบุไว้ซึ่งจะเกิดขึ้นหากแพ็คเกจอื่นขึ้นอยู่กับหลาย ๆ แพ็คเกจ ฉันได้ลองพล็อตการพึ่งพาเป็นกราฟวิธีที่ผู้ใช้สามารถดูแพคเกจทั้งหมดและการอ้างอิงทั้งหมด แต่มันกลับกลายเป็นระเบียบอย่างสมบูรณ์ลูกปาเก็ตตี้ ขออภัยสำหรับการตอบกลับล่าช้า.
user2745509
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.