В инструменте с графическим интерфейсом вы можете получить список пакетов с обновлениями безопасности. Можно ли это сделать из командной строки в Debian или Ubuntu?
Обычно я могу использовать «apt-get upgrade», который покажет мне, что обновляется, но я хотел бы знать, какие из них являются обновлениями безопасности.
apt-get upgrade -s | grep -i security
... это то, что плагин Nagios check-apt использует для подсчета ожидающих обновлений безопасности, что похоже на то, что вы ищете.
В ubuntu вы должны иметь возможность использовать apt-check, именно он заполняет ваш motd количеством доступных обновлений безопасности.
Вы можете получить список с помощью этой команды:
sudo unattended-upgrade --dry-run -d 2> /dev/null | grep 'Checking' | awk '{ print $2 }'
Используйте приложение автоматического обновления.
sudo unattended-upgrade
Это позволяет автоматически устанавливать только обновления безопасности, но при необходимости вы можете вызвать это вручную.
У меня модифицированная версия update-notifier
для этого требуется дополнительный переключатель: --security-package-names
который выводит только имена пакетов, связанных с безопасностью. У меня это есть суть (пока я не создам запрос на слияние в соответствующем проекте на панели запуска). А пока его можно запустить следующим образом:
Бегать
curl -s https://gist.githubusercontent.com/ahmadnazir/c2444d6b09fd7bb4963a13bc577d92a3/raw/0231b94a4e46abe0a5959de5f84feda76ad2eb9d/apt-check.py \
| python /dev/stdin --security-package-names \
| column -t -s , \
| sort
Вывод
Это дает результат в формате: имя пакета, установленная версия, и версия кандидата:
...
thunderbird 1:38.6.0+build1-0ubuntu0.14.04.1 1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-gnome-support 1:38.6.0+build1-0ubuntu0.14.04.1 1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en 1:38.6.0+build1-0ubuntu0.14.04.1 1:38.8.0+build1-0ubuntu0.14.04.1
thunderbird-locale-en-us 1:38.6.0+build1-0ubuntu0.14.04.1 1:38.8.0+build1-0ubuntu0.14.04.1
...
На основе ответа Фабрицио Регини выше.
Для 12.04 / Точность:
sudo unattended-upgrade --dry-run -d 2>&1 /dev/null | grep 'Checking' | grep security | awk '{ print $2 }'
Для 14.04 / Trusty:
sudo unattended-upgrade --dry-run -d | grep 'Checking' | grep security | awk '{ print $2 }'
И вариант, который сбился вместе после прочтения других ответов - я считаю, что это решает проблему ложных срабатываний и является достаточно легким.
sudo unattended-upgrade --dry-run -d 2>/dev/null | awk '/Checking/ && /archive:..*-security. / {print $2}'
Я считаю, что ответ на вопрос, который задает ОП, - это как увидеть Список пакетов, а не как установить только пакеты безопасности. Основываясь на ответе @topdog, вы должны использовать:
/usr/lib/update-notifier/apt-check -p
Где -p
флаг означает пакеты
Эти две команды выплюнут список. Подключите к wc -l, чтобы узнать, сколько осталось позади. ;-)
grep security /etc/apt/sources.list > /tmp/security.list
sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s
По-прежнему действует для старых дистрибутивов или если у вас отключены репозитории обновлений, но безопасность включена:
sudo apt-get upgrade -s| grep ^Inst |grep Security
Я думаю, что ответ @smin - это в основном хороший подход, но немного нечеткий с регулярным выражением, как отметил @Shnatsel.
Как насчет этого:
apt-get upgrade -q --dry-run \
| perl -ne 'm/^Inst (\S+) \S+ \(([^\)]+) Debian-Security:8/ && print "$1-$2\n"'
Здесь перечислены имена пакетов вместе с версиями, которые вы хотите установить. Ты можешь взять -$2
из оператора печати, если вам не нужны версии.
[Вероятно, это можно было бы немного облегчить, используя awk вместо perl]
Я решил изменить сценарий apt-check в моей системе Ubuntu. Он заботится только об обновлениях безопасности, отображая также имена пакетов, если был указан флаг -p.
Здесь вы можете найти суть: https://gist.github.com/thesp0nge/94f9d336a081a3fefba6ca61d787a28b