Score:1

วิธีรับขนาด (เมกะไบต์) ของแพ็คเกจทั้งหมดของการอัปเดต

ธง de

ดังนั้นสำหรับโปรเจ็กต์ซึ่งเป็นส่วนหนึ่งของงาน ฉันต้องได้รับขนาดของการอัปเดต Linux

ฉันใช้คำสั่ง:

การค้นหาความถนัด -SF '%p' --disable-columns '~U'

ดังนั้นฉันจึงได้ชื่อแพ็กเก็ตที่ต้องอัปเดต แต่ฉันต้องการเพียงขนาดของสคริปต์ ฉันสามารถใช้ ฉลาด หรือ ความถนัด สำหรับ Ubuntu, Debian และฉันมีสิ่งเดียวกันที่เกี่ยวข้อง ยำ สำหรับ Centos, RedHat

ฉันทำการค้นหาบางอย่างใน ผู้ชาย คำสั่ง แต่ฉันไม่พบสิ่งที่ต้องการ ถ้ามีใครสามารถช่วยฉัน? ฉันคิดว่ามันจะง่าย แต่บางทีฉันอาจพลาดบางอย่างไป

N0rbert avatar
zw flag
ดู https://askubuntu.com/a/1340872/66509
Score:4
ธง fr

คุณสามารถทำได้โดยทำตามขั้นตอนต่อไปนี้:

ก่อนอื่นให้ติดตั้ง apt-แสดงรุ่น แพ็คเกจบนเครื่องประกอบด้วย:

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

ด้วยคำสั่งต่อไปนี้ คุณจะได้รับรายการแพ็คเกจที่สามารถอัพเกรดได้:

apt-แสดงรุ่น -u

สิ่งนี้สามารถใช้เพื่อประโยชน์ของเราโดยเชื่อมเครื่องมือนี้กับ ฉลาดแคช เพื่อกู้คืนขนาดของแพ็คเกจ มาดูกันว่าทำอย่างไร:

สำหรับแพ็คเกจใน `/usr/bin/apt-show-versions -u | tr ' ' / | ตัด -f1,6 -d'/' | tr / =` ; ทำ echo -n $package ; sudo apt-cache แสดง $package | grep '^ขนาด:' | ตัด -d: -f2 ; เสร็จแล้ว | เรียง -k2 -n

คำสั่งก่อนหน้าจะให้รายการแพ็คเกจที่สามารถอัพเกรดได้และขนาดเป็นไบต์จากน้อยไปหามาก

หากคุณต้องการเข้าใจสิ่งที่ทำในแต่ละขั้นตอน ต่อไปนี้เป็นรายละเอียดโดยย่อของคำสั่งด้านบน:

# ให้รายการแพ็คเกจที่สามารถอัพเกรดได้พร้อมเวอร์ชั่นใหม่ที่มีอยู่ในรูปแบบ package_name=version
/usr/bin/apt-show-versions -u | tr ' ' / | ตัด -f1,6 -d'/' | tr / =

# รับขนาด (เป็นไบต์) ของแต่ละแพ็คเกจที่สามารถอัพเกรดได้
sudo apt-cache แสดง $package | grep '^ขนาด:'

# แสดงผลตามลำดับจากน้อยไปหามาก
เรียง -k2 -n 

ตัวอย่างของผลลัพธ์ของคำสั่งก่อนหน้านี้จะเป็น:

galoget@hackem:~$ สำหรับแพ็คเกจใน `/usr/bin/apt-show-versions -u | tr ' ' / | ตัด -f1,6 -d'/' | tr / =` ; ทำ echo -n $package ; sudo apt-cache แสดง $package | เกรป '
^ขนาด:' | ตัด -d: -f2 ; เสร็จแล้ว | เรียง -k2 -n

initramfs-tools:all=0.136ubuntu6.6 9248
systemd-sysv:amd64=245.4-4ubuntu3.7 10280
ซอฟต์แวร์คุณสมบัติทั่วไป:ทั้งหมด=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-disupgrade: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: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
เมฆเริ่มต้น: ทั้งหมด = 21.2-3-g899bfaa9-0ubuntu2 ~ 20.04.1 456404
open-vm-tools:amd64=2:11.2.5-2ubuntu1~ubuntu20.04.1 603812
opensl: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
ฉลาด: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

ในกรณีที่คุณต้องการแค่ขนาดของแพ็คเกจและเพิ่มให้ได้ขนาดรวมเป็นไบต์ คุณสามารถใช้คำสั่งต่อไปนี้:

galoget@ip-172-31-35-106:~$ สำหรับแพ็คเกจใน `/usr/bin/apt-show-versions -u | tr ' ' / | ตัด -f1,6 -d'/' | tr / =` ; ทำ sudo apt-cache แสดง $package | grep '^ขนาด: ' | ตัด -d " " -f2 ; เสร็จแล้ว | เรียง -k2 -n | awk '{ SUM ++= $1} END { พิมพ์ SUM }'

45245756

ในตัวอย่างของฉัน ขนาดรวมของการอัปเดตจะเป็น 45245756 ไบต์ซึ่งมีขนาดเท่ากับ 45.3 เมกะไบต์ สามารถตรวจสอบได้โดยการเรียกใช้:

galoget@hackem:~$ sudo apt อัพเกรด

กำลังอ่านรายการแพ็กเกจ...เสร็จแล้ว
สร้างต้นไม้พึ่งพา       
กำลังอ่านข้อมูลสถานะ...
กำลังคำนวณการอัปเกรด... เสร็จสิ้น
แพ็คเกจใหม่ต่อไปนี้จะถูกติดตั้ง:
  distro-ข้อมูล
แพ็คเกจต่อไปนี้จะได้รับการอัพเกรด:
  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-disupgrade 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 รายการ ติดตั้งใหม่ 1 รายการ ลบออก 0 รายการ และไม่ได้อัปเกรด 0 รายการ
ต้องการไฟล์เก็บถาวร 45.3 MB
หลังจากการดำเนินการนี้ พื้นที่ดิสก์เพิ่มเติม 11.1 MB จะถูกนำมาใช้
คุณต้องการดำเนินการต่อหรือไม่ [ใช่/ไม่ใช่] ย

อย่างที่คุณเห็น ขนาดตรงกัน ดังนั้นคำสั่งจึงทำงานได้อย่างสมบูรณ์

bastien avatar
de flag
ขอบคุณมาก ฉันจะพยายาม :)
bastien avatar
de flag
มันได้ผล ฉันไม่มีทักษะเพียงพอสำหรับสิ่งนั้น คุณทำให้วันของฉัน :)
galoget avatar
fr flag
ดีใจที่ได้ยินเช่นนั้น ยินดีต้อนรับ =)
Score:0
ธง de

ดังนั้นเราจึงเปลี่ยนบางสิ่งกับเพื่อน คำเตือน : ฉันส่ง python scritp เพื่อรับขนาดของการอัปเดตสำหรับ apt และ yum

พวกเขาคือรหัสในหลาม:

def get_upgradable() :
    ถ้า os.path.isfile("/usr/bin/apt"):
        คำสั่ง = "apt list --upgradable 2>/dev/null | cut -d'/' -f1"
    elif os.path.isfile("/usr/bin/yum"):
        #command = "yum ตรวจสอบการอัปเดต 2>/dev/null | grep \".x86_64\" | ตัด -d' ' -f1"
        command="yum check-update | awk '/\S+\s+[0-9]\S+\s+\S+/ {พิมพ์ $1 }'"
    อื่น :
        เพิ่ม PkgManager("ไม่พบตัวจัดการแพ็คเกจ")
        กลับไม่มี
    กระบวนการ = subprocess.Popen (คำสั่ง, เชลล์ = True, stdout = subprocess.PIPE, การเข้ารหัส = 'utf8')
    package_name = []
    สำหรับ out in process.stdout :
        package_name.append(ออก[:-1])
    ส่งคืน package_name

def get_yum_size(*args, return_somme=True) :
    command = "yum ข้อมูล {pkg} | egrep \"(Taille|Size)\""
    ตัวประกอบ = {"k" : 1,000,
              "ม" : 1000000,
              "จี" : 10,00000000}
    ซอมม์ = 0
    ขนาด = []
    สำหรับ pkg ใน args :
        บรรทัด = subprocess.Popen (command.format (pkg=pkg),
                                 เชลล์=จริง,
                                 stdout=subprocess.PIPE,
                                 การเข้ารหัส='utf8',
                                ).stdout.readlines()
        infos = เส้น[-1][:-1].split(' ')
        size = float(infos[-2])*factor[infos[-1]]
        size.append(ขนาด)
        ส้ม += ขนาด
    ถ้า return_somme : กลับ somme
    ขนาดผลตอบแทน


def get_apt_size(*args, return_somme=True) :
    command = "apt-cache --no-all-versions แสดง {pkg} | grep \"^Size\" | cut -d' ' -f2"
    ขนาด = []
    ซอมม์ = 0
    สำหรับ pkg ใน args :
        size = int(subprocess.Popen(command.format(pkg=pkg),
                                    เชลล์=จริง,
                                    stdout=subprocess.PIPE,
                                    การเข้ารหัส='utf8'
                                   ).stdout.read())
        size.append(ขนาด)
        ส้ม += ขนาด
    ถ้า return_somme : กลับ somme
    ขนาดผลตอบแทน

def get_size(*args, **kwargs) :
    ถ้า os.path.isfile("/usr/bin/apt"):
        ส่งคืน get_apt_size(*args, **kwargs)
    elif os.path.isfile("/usr/bin/yum"):
        ส่งคืน get_yum_size(*args, **kwargs)
    อื่น :
        เพิ่ม PkgManager("ไม่พบตัวจัดการแพ็คเกจ")

และคุณเรียกมันในรหัสหลักด้วย:

get_size(*get_upgradable())

หากคุณลองผลลัพธ์จะเป็น: 9780000000

นั่นคือขนาดทั้งหมดของการอัปเดตเป็นไบต์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา