Как установить только обновления безопасности из командной строки?

sudo apt-get upgrade устанавливает все обновления, а не только обновления для системы безопасности. Я знаю, что я могу использовать Update Manager для выбора только важных обновлений безопасности, но есть ли способ сделать это из командной строки?

1
задан 14 February 2016 в 23:30

6 ответов

Несколько советов о том, как управлять обновлениями

Это относится как к Debian, так и к Ubuntu, но более конкретные инструкции для Ubuntu следуют.

Показывать только обновления для системы безопасности:
apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
или
sudo unattended-upgrade --dry-run -d
или
/usr/lib/update-notifier/apt-check -p
Показать все обновляемые пакеты
apt-get -s dist-upgrade | grep "^Inst"
Только установить обновления безопасности
apt-get -s dist-upgrade | grep "^Inst" | 
    grep -i securi | awk -F " " {'print $2'} | 
    xargs apt-get install

Примечания:

Показать только обновления для системы безопасности:
apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
или [ f2] или
/usr/lib/update-notifier/apt-check -p

Показывать только обновления для системы безопасности:

checkrestart -v
Однако имейте в виду, что checkrestart может отображать процессы, которые не обязательно перезапускаются. Например, служба PostgreSQL может хранить в своей памяти ссылку на уже удаленный файл xlog, что не является веской причиной перезапуска службы.

или

Он проверяет, продолжают ли выполняемые процессы в системе удаленные библиотеки в результате хранения копий в активной памяти.
ps xh -o pid |
while read PROCID; do
       grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
       if [ $? -eq 0 ]; then
               CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
               echo -e "\tPID $PROCID $CMDLINE\n"
       fi
done
95
ответ дан 29 May 2018 в 13:06
  • 1
    Я замечаю только этот пост. Это очень точно. Большое спасибо (+1) – Danduk82 13 May 2016 в 10:59
  • 2
    откуда происходит «checkrestart»? Я не могу найти его в Ubuntu Trusty. Я нашел " needrestart " который выглядит так, как он будет соответствовать вашим инструкциям? – Ben XO 19 August 2016 в 14:29
  • 3
    Его можно найти в пакете debian-goodies: packages.debian.org/wheezy/debian-goodies . Там также нужен отдых. Вы можете найти и на Xenial, выполнив: $ apt-cache search checkrestart – ILIV 20 August 2016 в 06:51
  • 4
    Я получаю " E: Не удалось открыть файл блокировки / var / lib / dpkg / lock - open (13: Permission denied) " даже с судо. Это что-то конкретное для одного из обновлений или команд, которые вы предоставили? – Nathan Hornby 30 September 2016 в 12:53
  • 5
    Скорее всего, речь идет о некорректном / ненормальном завершении dpkg, который оставил незафиксированный файл блокировки. Обычно не происходит до тех пор, пока, например, установка пакета не завершается успешно (полный диск и т. д.) Вероятно, вы не можете запускать другие команды apt-get и dpkg, не так ли? – ILIV 1 October 2016 в 08:00

замените /etc/apt/preferences следующим образом:

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

теперь простой apt-get upgrade обновит все обновления безопасности.

Почему (и как) это работает: файл настроек привяжет все пакеты от дистрибутива Ubuntu до приоритета 50, что сделает их менее желательными, чем уже установленные пакеты. Файлы, созданные из репозитория безопасности, получают приоритет по умолчанию (500), поэтому они учитываются при установке. Это означает, что только пакеты, которые считаются более желательными, чем установленные в настоящее время, - это обновления для системы безопасности. Дополнительная информация о прикреплении в man-странице apt_preferences.

Вы можете временно рекламировать определенный дистрибутив для обновлений с опцией --target-release, которая работает с apt-get и aptitude (по крайней мере), которая позволит вам подключать некоторые версии, чтобы они были пригодны для обновления.

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

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

Это заставит apt искать файл настроек из нестандартного местоположения.

Файл настроек, приведенный в качестве примера, не применяется к сторонним репозиториям, если вы также можете привязать их, вы можете использовать apt-cache policy, чтобы легко определить требуемые ключи для закрепления.

45
ответ дан 29 May 2018 в 13:06
  • 1
    Спасибо, что нашли время для тщательного ответа. Я думаю Я понимаю, как это работает. Но когда я создаю файл / etc / apt / preferences и запускаю apt-get upgrade, он хочет обновить все пакеты, а не только обновления для системы безопасности. Обновление списка до и после точно такое же, , кроме с / etc / apt / preferences, он не хочет обновлять Leafpad, который я построил из источника и установил «вручную». с dpkg. Это очень странно для меня, но может означать что-то для вас. – mac9416 29 July 2010 в 18:14
  • 2
    Вы можете увидеть, что происходит с командой политики apt-cache. Выберите один из пакетов, который не получает исправления безопасности и запускает apt-cache policy packagename. В этом перечислены приоритеты для различных версий. Вы должны видеть различные линии и разные приоритеты. Если нет линий с приоритетом 50, то приведение в порядок не влияет на пакеты, о которых идет речь по какой-либо причине. – Ressu 29 July 2010 в 21:24
  • 3
    Я следовал этому ответу в прошлом. Сегодня я узнал, что из-за этого ответа 68 пакетов обновлений безопасности НЕ установлены на моем сервере и не отображались как потенциальные кандидаты на установку. Это НЕ ХОРОШИЙ ОТВЕТ! – Shade 22 August 2014 в 13:33

В Ubuntu 14.04 LTS подтверждено:

Используйте пакет unattended-upgrade.

Посмотрите на файл /etc/apt/apt.conf.d/50unattended-upgrades. В верхней части должен быть раздел:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

Обратите внимание, как он был настроен только для автоматического обновления пакетов безопасности по умолчанию.

Измените файл [ f5] аналогично:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

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

Теперь для запуска вручную: sudo unattended-upgrade.

] Чтобы проверить как сухую работу, ничего не делая: sudo unattended-upgrade --dry-run.

Источник: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html

7
ответ дан 29 May 2018 в 13:06
  • 1
    Есть ли способ сделать это ежемесячным расписанием? – mike.b93 1 February 2017 в 18:30
  • 2
    @ mike.b93, я считаю, что установка APT::Periodic::Unattended-Upgrade "30"; будет делать это каждые 30 дней. – vcardillo 24 May 2017 в 01:13

Хотя это довольно уродливо, вы можете отключить все репозитории, кроме репозитория безопасности, а затем выполните:

sudo apt-get update && sudo apt-get upgrade

Я его не тестировал, но теоретически он будет находить обновления только в security repo и применять их ...

5
ответ дан 29 May 2018 в 13:06
  • 1
    Да, это возможность. Я посмотрю. Я плохо разбираюсь в BASH, но я могу попытаться сделать сценарий для этого. – mac9416 29 July 2010 в 05:07
  • 2
    Хорошо, я отключил все, кроме репозиториев безопасности Ubuntu, и запустил sudo apt-get update && sudo apt-get upgrade (отмена до того, как все обновления были выполнены). Затем я снова включил все мои репозитории, запустил sudo apt-get updatee и открыл диспетчер обновлений. Пакеты, помеченные как обновления для системы безопасности, не были точно найдены apt-get upgrade, но они были очень близки - достаточно близко для меня. Мне все еще хотелось бы знать, как именно это делает диспетчер обновлений и как сделать то же самое из командной строки, но это будет сделано. Благодаря! – mac9416 29 July 2010 в 05:39
apt-get update: просто прочитайте записи в репозитории - в соответствии с существующим списком. Нужно проверить, что нового. apt-get upgrade: все обновления для установленных пакетов без модулей ядра. Нет обновления выпуска. apt-get dist-upgrade: все обновления для установленных пакетов также с модулями ядра. Нет обновления выпуска. apt-get с параметром -s: только проверка, никаких изменений не было выполнено.
3
ответ дан 29 May 2018 в 13:06

Я не могу найти вариант в apt-get или aptitude, однако у кого-то был тот же вопрос на SuperUser. Единственный ответ:

Проверьте и настройте /etc/apt/apt.conf.d/50unattended-upgrade. Вы заменили «karmic» на кодовое имя вашего Ubuntu?

Нет ответа о том, что это сработало.

0
ответ дан 29 May 2018 в 13:06
  • 1
    Похоже, что метод, описанный на этой странице wiki, зависит от установки аргумента aptitude -target-release для & lt; release & gt; -security. Подобно OP этого вопроса, этот метод устанавливает все обновления, а не только обновления безопасности. Чтение страниц apt-get и aptitude man, я не думаю, что аргумент -target-release даже предназначен для ограничения обновлений до простой безопасности, хотя я не уверен, что он является для , – mac9416 29 July 2010 в 04:38

Другие вопросы по тегам:

Похожие вопросы: