किसी दिए गए पैकेज और निर्भरता, लागत में कितना स्थान है?


19

पैकेज का नाम दिया गया है, मैं यह खोजना चाहता हूं कि यदि पैकेज, और इसकी निर्भरता को हटा दिया गया तो कितना स्थान खाली हो जाएगा।

जैसा कि निर्भरता पैकेज के बीच साझा की जा सकती है, शायद इसे लगाने का सही तरीका है: एक पैकेज में कितना स्थान है, इसमें सभी निर्भरताएं शामिल हैं जो केवल इस पैकेज द्वारा उपयोग किए जाने वाले मधुमक्खी हैं

मैं सीएलआई समाधान पसंद करूंगा, क्योंकि मैं उन्हें स्क्रिप्ट में उपयोग करूंगा


apt-cache show packagenameसूची, अन्य चीजों के बीच, पैकेज का स्थापित आकार और पैकेज की निर्भरता। apt-cache rdepends packageउन पैकेजों को सूचीबद्ध करने के लिए भी है जो उस पैकेज का उपयोग करते हैं। तुम वहाँ शुरू करना चाहते हो सकता है।
सियारकोट 895

@ saiarcot895 - एक उत्तर के रूप में पोस्ट करें
पैंथर

जवाबों:


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

हमें पहले "सुडो एप्ट-गेट-assume-no autoremove" चलाना चाहिए, यह देखने के लिए कि क्या पैकेज हैं वैसे भी सिस्टम को हटाना चाहता है (पैकेज से स्वतंत्र जिसे आप हटाने की सोच रहे हैं)
josinalvo

क्या मैंने ऐसा जवाब नहीं दिया है? 'हटाने' के बाद आपको '
पर्स

मेरा मतलब है: इसे बिना 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 विकल्प का उपयोग करके यह मान ("विकल्प" देखें)। जानकारी gpp-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 से "स्थापित आकार" की इकाइयाँ क्या हैं? जैसे, बाइट्स, किलोबाइट्स…?
हाय-एंजेल

2

apt-cache show packagenameसूची, अन्य चीजों के बीच, पैकेज का स्थापित आकार और पैकेज की निर्भरता। apt-cache rdepends packagenameउन पैकेजों को सूचीबद्ध करने के लिए भी है जो उस पैकेज का उपयोग करते हैं।

आप बाद के आदेश का उपयोग करना चाहते हैं और apt-cache policy packagenameयह निर्धारित करने के लिए कि क्या रिवर्स-डिपेंडेंसी स्थापित है।


यह आकार मानव पठनीय प्रतीत नहीं होता है।
ThorSummoner

1
Installed-Size, किलोबाइट में है, जबकि Sizeबाइट्स में है। मुझे अपने उत्तर में इसका उल्लेख करना चाहिए था।
सियारकोट

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 का उपयोग करता है। ज्यादातर इसे पैकेज होना चाहिए - मुझे यकीन है - मेरे पास शायद ही कोई डेटा हो।
रॉल्फ

@ रॉल्फ, मुझे खुशी है कि यह उपयोगी था। वास्तव में, बहुत सारे पैकेज सूचीबद्ध नहीं हैं, ऐसा तब होता है जब पैकेज को कई अन्य लोगों द्वारा निर्भर किया जाता है। मैंने एक ग्राफ के रूप में निर्भरता की साजिश रचने की कोशिश की है, इस तरह उपयोगकर्ता सभी पैकेज और सभी निर्भरता देख सकता है। लेकिन यह पूरी तरह से गड़बड़ हो जाता है, स्पेगेटी की एक गेंद। देर से उत्तर के लिए क्षमा करें।
user2745509
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.