Рейтинг:1

Как получить размер (в мегабайтах) всех пакетов обновления?

флаг de

Так что для проекта в рамках работы мне нужно получить размер обновления линукса.

Я использовал команду:

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

Итак, я получаю имена пакетов, которые нужно обновить, но мне нужен только размер для скрипта. я могу использовать подходящий или же способность для Ubuntu, Debian и у меня одно и то же ням для Centos, RedHat.

Я сделал некоторые поиски в человек команду, но я не могу найти то, что хочу. Если кто-нибудь может мне помочь? Я думал, что это будет просто, но, возможно, я что-то упустил.

N0rbert avatar
флаг zw
См. https://askubuntu.com/a/1340872/66509.
Рейтинг:4
флаг fr

Вы можете добиться этого, выполнив следующие шаги:

Сначала установите apt-show-версии пакет на машине с:

sudo apt-get install -y apt-show-версии

С помощью следующей команды вы можете получить список обновляемых пакетов:

apt-show-версии -u

Это можно использовать в наших интересах, объединив этот инструмент с apt-кэш чтобы восстановить размер пакета, давайте посмотрим, как это делается:

для пакета в `/usr/bin/apt-show-versions -u | тр '' / | вырезать -f1,6 -d'/' | тр / =` ; выполнить эхо -n $пакет ; sudo apt-cache показать пакет $ | grep '^Размер:' | вырезать -d: -f2 ; сделано | сортировать -k2 -n

Предыдущая команда предоставит вам список обновляемых пакетов и их размер в байтах в порядке возрастания.

Если вы хотите понять, что делается на каждом шаге, вот краткое описание приведенной выше команды:

# Дает вам список обновляемых пакетов с их новыми доступными версиями в формате package_name=version
/usr/bin/apt-show-версии -u | тр '' / | вырезать -f1,6 -d'/' | тр / =

# Получить размер (в байтах) каждого обновляемого пакета
sudo apt-cache показать пакет $ | grep '^Размер:'

# Отображение вывода в порядке возрастания
сортировать -k2 -n 

Пример вывода предыдущей команды:

galoget@hackem:~$ для пакета в `/usr/bin/apt-show-versions -u | тр '' / | вырезать -f1,6 -d'/' | тр / =` ; выполнить эхо -n $пакет ; sudo apt-cache показать пакет $ | grep '
^Размер:' | вырезать -d: -f2 ; сделано | сортировать -k2 -n

initramfs-tools:все=0.136ubuntu6.6 9248
системаd-sysv:amd64=245.4-4ubuntu3.7 10280
общие свойства программного обеспечения: все = 0.98.9.5 10616
initramfs-tools-bin:amd64=0.136ubuntu6.6 10904
ядро диспетчера обновлений: все = 1: 20.04.10.7 11260
python-apt-common: все = 2.0.0ubuntu0.20.04.5 17052
Linux-база: все = 4.5ubuntu3.6 17780
libasound2-данные: все = 1.2.2-2.1ubuntu2.4 20040
Ubuntu-выпуск-обновление-ядро: все = 1: 20.04.33 23812
свойства программного обеспечения python3: все = 0.98.9.5 25124
alsa-ucm-conf: все = 1.2.2-1ubuntu0.8 26484
системаd-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: все = 1.3.1-5ubuntu4.2 37276
python3-update-manager: все = 1: 20.04.10.7 38176
libpam-modules-bin: amd64 = 1.3.1-5ubuntu4.2 41180
initramfs-tools-core: все = 0.136ubuntu6.6 47744
libxmlb1:amd64=0.1.15-2ubuntu1~20.04.1 50520
libpam0g:amd64=1.3.1-5ubuntu4.2 55372
либудев1:амд64=245,4-4убунту3,7 77604
libnss-systemd:amd64=245.4-4ubuntu3.7 96096
python3-disupgrade: все = 1: 20.04.33 104100
netplan.io:amd64=0.102-0ubuntu1~20.04.2 117380
общее уведомление об обновлении: все = 3.192.30.8 132392
python3-apt:amd64=2.0.0ubuntu0.20.04.5 154164
libpam-systemd: amd64 = 245.4-4ubuntu3.7 185812
apt-утилиты: 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: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-преимущество-инструменты: 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
системаd: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 | тр '' / | вырезать -f1,6 -d'/' | тр / =` ; сделать sudo apt-cache показать $package | grep '^Размер: ' | вырезать -d "" -f2 ; сделано | сортировать -k2 -n | awk '{СУММА += $1} КОНЕЦ {вывести СУММ}'

45245756

В моем примере общий размер обновления будет 45245756 байт, что равно 45,3 мегабайтам, это можно проверить, запустив:

galoget@hackem:~$ sudo apt upgrade

Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Будут установлены следующие НОВЫЕ пакеты:
  информация о дистрибутиве
Будут обновлены следующие пакеты:
  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-свойства программного обеспечения python3-update-manager snapd общие свойства программного обеспечения
  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 МБ архива.
После этой операции будет использовано 11,1 МБ дополнительного места на диске.
Вы хотите продолжить? [Д/н] Д

Как видите, размер совпадает, так что команда работает отлично.

bastien avatar
флаг de
Спасибо большое! Попробую :)
bastien avatar
флаг de
Это работает, у меня недостаточно навыков для этого, вы делаете мой день. :)
galoget avatar
флаг fr
Рад это слышать, добро пожаловать. знак равно
Рейтинг:0
флаг de

Так что с другом мы кое-что меняем. Напоминание: я отправляю скрипт Python, чтобы получить размер обновлений для apt и yum.

Это код на питоне:

защита get_upgradable() :
    если os.path.isfile("/usr/bin/apt"):
        command = "apt list --upgradable 2>/dev/null | cut -d'/' -f1"
    Элиф 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 }'"
    еще :
        поднять PkgManager("Диспетчер пакетов не найден")
        возврат Нет
    процесс = подпроцесс.Popen (команда, оболочка = True, стандартный вывод = подпроцесс.PIPE, кодировка = 'utf8')
    имя_пакета = []
    для выхода в процессе.stdout :
        package_name.append(out[:-1])
    вернуть пакеты_имя

def get_yum_size(*args, return_somme=True) :
    command = "yum info {pkg} | egrep \"(Taille|Size)\""
    фактор = {"к" : 1000,
              "М": 1000000,
              "Г": 1000000000}
    сом = 0
    размеры = []
    для пакета в аргументах:
        строки = подпроцесс.Popen(command.format(pkg=pkg),
                                 оболочка = Верно,
                                 стандартный вывод=подпроцесс.PIPE,
                                 кодировка = 'utf8',
                                ).stdout.readlines()
        информация = строки[-1][:-1].split(' ')
        размер = число с плавающей запятой (информация [-2]) * фактор [информация [-1]]
        размеры.добавлять(размер)
        сомма += размер
    if return_somme : вернуть сомму
    возвращаемые размеры


def get_apt_size(*args, return_somme=True) :
    command = "apt-cache --no-all-versions show {pkg} | grep \"^Size\" | cut -d' ' -f2"
    размеры = []
    сом = 0
    для пакета в аргументах:
        размер = int (subprocess.Popen (command.format (pkg = pkg),
                                    оболочка = Верно,
                                    стандартный вывод=подпроцесс.PIPE,
                                    кодировка = 'utf8'
                                   ).stdout.read())
        размеры.добавлять(размер)
        сомма += размер
    if return_somme : вернуть сомму
    возвращаемые размеры

def get_size(*args, **kwargs):
    если os.path.isfile("/usr/bin/apt"):
        вернуть get_apt_size(*args, **kwargs)
    Элиф os.path.isfile("/usr/bin/yum"):
        вернуть get_yum_size(*args, **kwargs)
    еще :
        поднять PkgManager("Диспетчер пакетов не найден")

И вы вызываете это в основном коде с помощью:

get_size(*get_upgradable())

Если вы попробуете, вывод будет: 9780000000

Это весь размер обновлений в байтах.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.