Điểm:1

Làm cách nào để lấy kích thước (Megabyte) của tất cả các gói của một bản cập nhật?

lá cờ de

Vì vậy, đối với một dự án là một phần của công việc, tôi cần lấy kích thước của bản cập nhật Linux.

Tôi đã sử dụng lệnh:

tìm kiếm năng khiếu -SF '%p' --disable-columns '~U'

Vì vậy, tôi nhận được tên của các gói cần được cập nhật, nhưng tôi chỉ cần kích thước cho một tập lệnh. tôi có thể sử dụng đúng cách hoặc năng khiếu cho Ubuntu, Debian và tôi có cùng một việc phải làm với ngon cho Centos, RedHat.

Tôi đã thực hiện một số tìm kiếm trong Đàn ông lệnh, nhưng tôi không thể tìm thấy những gì tôi muốn. Nếu ai đó có thể giúp tôi? Tôi đã nghĩ nó sẽ đơn giản, nhưng có lẽ tôi đã bỏ lỡ điều gì đó.

N0rbert avatar
lá cờ zw
Xem https://askubuntu.com/a/1340872/66509 .
Điểm:4
lá cờ fr

Bạn có thể đạt được điều đó bằng cách thực hiện các bước sau:

Đầu tiên, cài đặt phiên bản apt-show gói trên máy với:

Sudo apt-get install -y apt-show-versions

Với lệnh sau, bạn có thể nhận danh sách các gói có thể nâng cấp:

apt-show-phiên bản -u

Điều này có thể được sử dụng để tạo lợi thế cho chúng tôi bằng cách kết hợp công cụ này với apt-cache để khôi phục kích thước của gói, hãy xem cách thực hiện:

cho gói trong `/usr/bin/apt-show-versions -u | tr '' / | cắt -f1,6 -d'/' | tr / =` ; làm echo -n gói $; Sudo apt-cache show gói $ | grep '^Size:' | cắt -d: -f2 ; xong | sắp xếp -k2 -n

Lệnh trước đó sẽ cung cấp cho bạn danh sách các gói có thể nâng cấp và kích thước của chúng theo byte theo thứ tự tăng dần.

Nếu bạn muốn hiểu những gì được thực hiện trong mỗi bước, đây là phần tóm tắt nhanh lệnh trên:

# Cung cấp cho bạn danh sách các gói có thể nâng cấp với các phiên bản mới có sẵn của chúng ở định dạng package_name=version
/usr/bin/apt-show-versions -u | tr '' / | cắt -f1,6 -d'/' | tr / =

# Nhận kích thước (tính bằng byte) của từng gói có thể nâng cấp
Sudo apt-cache show gói $ | grep '^Kích thước:'

# Hiển thị đầu ra theo thứ tự tăng dần
sắp xếp -k2 -n 

Một ví dụ về đầu ra của lệnh trước đó sẽ là:

galoget@hackem:~$ cho gói trong `/usr/bin/apt-show-versions -u | tr '' / | cắt -f1,6 -d'/' | tr / =` ; làm echo -n gói $; Sudo apt-cache show gói $ | kêu '
^Kích thước:' | cắt -d: -f2 ; xong | sắp xếp -k2 -n

initramfs-tools:all=0.136ubuntu6.6 9248
systemd-sysv:AMD64=245.4-4ubuntu3.7 10280
phần mềm-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
mô-đun 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
đám mây-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

Trong trường hợp bạn chỉ muốn kích thước của các gói và thêm chúng để có tổng kích thước tính bằng byte, bạn có thể sử dụng lệnh sau:

galoget@ip-172-31-35-106:~$ cho gói trong `/usr/bin/apt-show-versions -u | tr '' / | cắt -f1,6 -d'/' | tr / =` ; làm Sudo apt-cache show gói $ | grep '^Size: ' | cắt -d " " -f2 ; xong | sắp xếp -k2 -n | awk '{ SUM += $1} END { print SUM }'

45245756

Trong ví dụ của tôi, tổng kích thước của bản cập nhật sẽ là 45245756 byte, tương đương 45,3 Megabyte, điều này có thể được xác minh bằng cách chạy:

galoget@hackem:~$ nâng cấp sudo apt

Đang đọc danh sách gói... Xong
Xây dựng cây phụ thuộc       
Đang đọc thông tin trạng thái... Xong
Đang tính nâng cấp... Xong
Các gói MỚI sau đây sẽ được cài đặt:
  thông tin distro
Các gói sau sẽ được nâng cấp:
  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-mô-đun libpam-mô-đun-bin libpam-thời gian chạy 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-procps 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 đã nâng cấp, 1 mới cài đặt, 0 cần xóa và 0 chưa nâng cấp.
Cần lấy 45,3 MB dung lượng lưu trữ.
Sau thao tác này, 11,1 MB dung lượng đĩa bổ sung sẽ được sử dụng.
Bạn có muốn tiếp tục? [Y/n] Y

Như bạn có thể thấy, kích thước phù hợp, vì vậy lệnh hoạt động hoàn hảo.

bastien avatar
lá cờ de
Cảm ơn nhiều, mình sẽ cố gắng :)
bastien avatar
lá cờ de
Nó hoạt động, tôi không có đủ kỹ năng cho việc đó, bạn làm cho ngày của tôi. :)
galoget avatar
lá cờ fr
Vui mừng khi biết điều đó, bạn được chào đón. =)
Điểm:0
lá cờ de

Vì vậy, với một người bạn, chúng tôi thay đổi một số điều. Lời nhắc: Tôi gửi tập lệnh python để biết kích thước của các bản cập nhật cho apt và yum.

Đây là mã trong python:

def get_upgradable() :
    nếu os.path.isfile("/usr/bin/apt"):
        command = "apt list --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 }'"
    khác :
        nâng cao PkgManager("Không tìm thấy trình quản lý gói")
        trở lại Không có
    process = sub process.Popen(command, shell=True, stdout=sub process.PIPE, encoding='utf8')
    gói_name = []
    cho out trong process.stdout :
        gói_name.append(ra[:-1])
    trả lại gói_name

def get_yum_size(*args, return_somme=True) :
    command = "yum info {pkg} | egrep \"(Taille|Size)\""
    thừa số = {"k" : 1000,
              "M" : 1000000,
              "G" : 1000000000}
    somme = 0
    kích thước = []
    cho pkg trong args:
        lines = sub process.Popen(command.format(pkg=pkg),
                                 vỏ = Đúng,
                                 thiết bị xuất chuẩn = quy trình con.PIPE,
                                 mã hóa = 'utf8',
                                ).stdout.readlines()
        infos = lines[-1][:-1].split(' ')
        kích thước = float(infos[-2])*factor[infos[-1]]
        kích thước.append(kích thước)
        somme += kích thước
    nếu return_somme : trả lại somme
    kích thước trở lại


def get_apt_size(*args, return_somme=True) :
    command = "apt-cache --no-all-versions show {pkg} | grep \"^Size\" | cut -d' ' -f2"
    kích thước = []
    somme = 0
    cho pkg trong args:
        size = int(sub process.Popen(command.format(pkg=pkg),
                                    vỏ = Đúng,
                                    thiết bị xuất chuẩn = quy trình con.PIPE,
                                    mã hóa = 'utf8'
                                   ).stdout.read())
        kích thước.append(kích thước)
        somme += kích thước
    nếu return_somme : trả lại somme
    kích thước trở lại

def get_size(*args, **kwargs) :
    nếu os.path.isfile("/usr/bin/apt"):
        trả về get_apt_size(*args, **kwargs)
    elif os.path.isfile("/usr/bin/yum"):
        trả về get_yum_size(*args, **kwargs)
    khác :
        nâng cao PkgManager("Không tìm thấy trình quản lý gói")

Và bạn gọi nó trong mã chính với:

get_size(*get_upgradable())

Nếu bạn thử, đầu ra sẽ là: 9780000000

Đó là tất cả kích thước của các bản cập nhật tính bằng byte.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.