Puncte:1

Cum să obțineți dimensiunea (Megaocteți) a tuturor pachetelor unei actualizări?

drapel de

Deci, pentru un proiect ca parte a unei lucrări, trebuie să obțin dimensiunea unei actualizări Linux.

Am folosit comanda:

aptitude search -SF '%p' --disable-columns '~U'

Așa că primesc numele pachetelor a căror actualizare trebuie, dar am nevoie doar de dimensiunea unui script. pot folosi apt sau aptitudini pentru Ubuntu, Debian și cu mine avem același lucru yum pentru Centos, RedHat.

Am făcut câteva căutări în om comandă, dar nu găsesc ceea ce vreau. Daca ma poate ajuta cineva? Mă gândeam că va fi simplu, dar poate am omis ceva.

N0rbert avatar
drapel zw
A se vedea https://askubuntu.com/a/1340872/66509.
Puncte:4
drapel fr

Puteți realiza acest lucru făcând următorii pași:

Mai întâi, instalați apt-show-versions pachet pe mașină cu:

sudo apt-get install -y apt-show-versions

Cu următoarea comandă puteți obține o listă de pachete care pot fi actualizate:

apt-show-versions -u

Acest lucru poate fi folosit în avantajul nostru prin concatenarea acestui instrument cu apt-cache pentru a recupera dimensiunea pachetului, să vedem cum se face:

pentru pachetul din `/usr/bin/apt-show-versions -u | tr ' ' / | cut -f1,6 -d'/' | tr / =` ; do echo -n $pachet ; sudo apt-cache show $package | grep '^Dimensiune:' | cut -d: -f2 ; terminat | sortează -k2 -n

Comanda anterioară vă va oferi o listă de pachete actualizabile și dimensiunea acestora în octeți, în ordine crescătoare.

Dacă doriți să înțelegeți ce se face în fiecare pas, iată o detaliere rapidă a comenzii de mai sus:

# Vă oferă o listă de pachete actualizabile cu noile lor versiuni disponibile în format package_name=version
/usr/bin/apt-show-versions -u | tr ' ' / | cut -f1,6 -d'/' | tr / =

# Obțineți dimensiunea (în octeți) a fiecărui pachet care poate fi actualizat
sudo apt-cache show $package | grep '^Dimensiune:'

# Afișează rezultatul în ordine crescătoare
sortează -k2 -n 

Un exemplu de rezultat al comenzii anterioare ar fi:

galoget@hackem:~$ pentru pachet în `/usr/bin/apt-show-versions -u | tr ' ' / | cut -f1,6 -d'/' | tr / =` ; do echo -n $pachet ; sudo apt-cache show $package | grep '
^Dimensiune:' | cut -d: -f2 ; terminat | sortează -k2 -n

initramfs-tools:all=0.136ubuntu6.6 9248
systemd-sysv:amd64=245.4-4ubuntu3.7 10280
software-properties-common:all=0.98.9.5 10616
initramfs-tools-bin:amd64=0.136ubuntu6.6 10904
update-manager-core:all=1:20.04.10.7 11260
python-apt-common:all=2.0.0ubuntu0.20.04.5 17052
linux-base:all=4.5ubuntu3.6 17780
libasound2-data:all=1.2.2-2.1ubuntu2.4 20040
ubuntu-release-upgrader-core:all=1:20.04.33 23812
python3-software-properties:all=0.98.9.5 25124
alsa-ucm-conf:all=1.2.2-1ubuntu0.8 26484
systemd-timesyncd:amd64=245.4-4ubuntu3.7 28104
libprocps8:amd64=2:3.3.16-1ubuntu2.2 33016
libnetplan0:amd64=0.102-0ubuntu1~20.04.2 34608
libpam-runtime:all=1.3.1-5ubuntu4.2 37276
python3-update-manager:all=1:20.04.10.7 38176
libpam-modules-bin:amd64=1.3.1-5ubuntu4.2 41180
initramfs-tools-core:all=0.136ubuntu6.6 47744
libxmlb1:amd64=0.1.15-2ubuntu1~20.04.1 50520
libpam0g:amd64=1.3.1-5ubuntu4.2 55372
libudev1:amd64=245.4-4ubuntu3.7 77604
libnss-systemd:amd64=245.4-4ubuntu3.7 96096
python3-distupgrade:all=1:20.04.33 104100
netplan.io:amd64=0.102-0ubuntu1~20.04.2 117380
update-notifier-common:all=3.192.30.8 132392
python3-apt:amd64=2.0.0ubuntu0.20.04.5 154164
libpam-systemd:amd64=245.4-4ubuntu3.7 185812
apt-utils:amd64=2.0.6 216244
procps:amd64=2:3.3.16-1ubuntu2.2 232168
sosreport:amd64=4.1-1ubuntu0.20.04.2 245052
libpam-modules:amd64=1.3.1-5ubuntu4.2 260364
libsystemd0:amd64=245.4-4ubuntu3.7 270248
open-iscsi:amd64=2.0.874-7.1ubuntu6.2 283160
tmux:amd64=3.0a-2ubuntu0.3 292044
libasound2:amd64=1.2.2-2.1ubuntu2.4 334416
cloud-init:all=21.2-3-g899bfaa9-0ubuntu2~20.04.1 456404
open-vm-tools:amd64=2:11.2.5-2ubuntu1~ubuntu20.04.1 603812
openssl:amd64=1.1.1f-1ubuntu2.4 620068
libapt-pkg6.0:amd64=2.0.6 835288
ubuntu-advantage-tools:amd64=27.1~20.04.1 837368
apt:amd64=2.0.6 1295960
libssl1.1:amd64=1.1.1f-1ubuntu2.4 1319180
udev:amd64=245.4-4ubuntu3.7 1366316
systemd:amd64=245.4-4ubuntu3.7 3805892
snapd:amd64=2.49.2+20.04 30555628

În cazul în care doriți doar dimensiunea pachetelor și adăugați-le pentru a obține dimensiunea totală în octeți, puteți utiliza următoarea comandă:

galoget@ip-172-31-35-106:~$ pentru pachet în `/usr/bin/apt-show-versions -u | tr ' ' / | cut -f1,6 -d'/' | tr / =` ; do sudo apt-cache show $package | grep '^Dimensiune: ' | cut -d " " -f2 ; terminat | sortare -k2 -n | awk '{ SUM += $1} END { print SUM }'

45245756

În exemplul meu, dimensiunea totală a actualizării va fi 45245756 octeți, care este ca 45,3 Megaocteți, acest lucru poate fi verificat rulând:

galoget@hackem:~$ sudo apt upgrade

Citirea listelor de pachete... Gata
Construirea arborelui de dependență       
Citirea informațiilor despre stare... Gata
Se calculează upgrade-ul... Gata
Următoarele pachete NOI vor fi instalate:
  distro-info
Următoarele pachete vor fi actualizate:
  alsa-ucm-conf apt apt-utils cloud-init initramfs-tools initramfs-tools-bin initramfs-tools-core libapt-pkg6.0 libasound2 libasound2-data libnetplan0 libnss-systemd
  libpam-modules libpam-modules-bin libpam-runtime libpam-systemd libpam0g libprocps8 libssl1.1 libsystemd0 libudev1 libxmlb1 linux-base netplan.io open-iscsi
  open-vm-tools openssl procps python-apt-common python3-apt python3-distupgrade python3-software-properties python3-update-manager snapd software-properties-common
  sosreport systemd systemd-sysv systemd-timesyncd tmux ubuntu-advantage-tools ubuntu-release-upgrader-core udev update-manager-core update-notifier-common
45 actualizate, 1 nou instalat, 0 de eliminat și 0 neactualizat.
Trebuie să obțineți 45,3 MB de arhive.
După această operațiune, se vor folosi 11,1 MB de spațiu suplimentar pe disc.
Doriți să continuați? [D/n] Da

După cum puteți vedea, dimensiunea se potrivește, așa că comanda funcționează perfect.

bastien avatar
drapel de
Multumesc mult, o sa incerc :)
bastien avatar
drapel de
Funcționează, nu am suficiente abilități pentru asta, îmi faci ziua. :)
galoget avatar
drapel fr
Mă bucur să aud asta, bine ai venit. =)
Puncte:0
drapel de

Deci, cu un prieten, schimbăm unele lucruri. Memento: trimit un script python pentru a obține dimensiunea actualizărilor pentru apt și yum.

Acesta este codul în python:

def get_upgradable() :
    dacă os.path.isfile("/usr/bin/apt"):
        comandă = "listă de apt --upgradable 2>/dev/null | cut -d'/' -f1"
    elif os.path.isfile("/usr/bin/yum"):
        #command = "yum check-update 2>/dev/null | grep \".x86_64\" | cut -d' ' -f1"
        command="yum check-update | awk '/\S+\s+[0-9]\S+\s+\S+/ {print $1 }'"
    altceva:
        raise PkgManager ("Manager de pachete nu a fost găsit")
        return Niciunul
    proces = subproces.Popen(comandă, shell=True, stdout=subproces.PIPE, codificare='utf8')
    pachete_nume = []
    pentru out in process.stdout:
        pachete_nume.append(out[:-1])
    returnează pachete_nume

def get_yum_size(*args, return_somme=True):
    comandă = "yum info {pkg} | egrep \"(Taille|Size)\""
    factor = {"k": 1000,
              "M": 1000000,
              „G”: 1000000000}
    somme = 0
    dimensiuni = []
    pentru pachet în args:
        linii = subproces.Popen(command.format(pkg=pkg),
                                 shell=Adevărat,
                                 stdout=subprocess.PIPE,
                                 codificare='utf8',
                                ).stdout.readlines()
        infos = lines[-1][:-1].split(' ')
        dimensiune = float(infos[-2])*factor[infos[-1]]
        sizes.append(dimensiune)
        somme += dimensiune
    if return_somme : return somme
    dimensiuni de returnare


def get_apt_size(*args, return_somme=True):
    comandă = "apt-cache --no-all-versions show {pkg} | grep \"^Size\" | cut -d' ' -f2"
    dimensiuni = []
    somme = 0
    pentru pachet în args:
        dimensiune = int(subprocess.Popen(command.format(pkg=pkg),
                                    shell=Adevărat,
                                    stdout=subprocess.PIPE,
                                    codificare = 'utf8'
                                   ).stdout.read())
        sizes.append(dimensiune)
        somme += dimensiune
    if return_somme : return somme
    dimensiuni de returnare

def get_size(*args, **kwargs):
    dacă os.path.isfile("/usr/bin/apt"):
        return get_apt_size(*args, **kwargs)
    elif os.path.isfile("/usr/bin/yum"):
        returnează get_yum_size(*args, **kwargs)
    altceva:
        raise PkgManager ("Manager de pachete nu a fost găsit")

Și îl numești în codul principal cu:

get_size(*get_upgradable())

Dacă încercați, rezultatul va fi: 9780000000

Aceasta este dimensiunea totală a actualizărilor în octeți.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.