Linux - отображать или обновлять обновления безопасности только с помощью apt

Это не ошибка в bash , а его задокументированное поведение :

Каждая команда в конвейере выполняется в своей собственной подоболочке

Инструкция return действительна, находясь внутри определения функции, но также будучи в подоболочке, она не влияет на ее родительскую оболочку, поэтому следующая инструкция, выводит эхо , выполняется независимо. Тем не менее, это непереносимая конструкция оболочки, поскольку стандарт POSIX позволяет командам, составляющим конвейер, выполняться либо в подоболочке (по умолчанию), либо в верхний (допустимое расширение).

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

Надеюсь, вы можете указать bash вести себя так, как вы ожидаете, с помощью пары параметров:

$ set +m # disable job control
$ shopt -s lastpipe # do not run the last command of a pipeline a subshell 
$ o(){ echo | while read -r; do return 0; done; echo $?;}
$ o
$          <- nothing is printed here

11
09.10.2017, 16:32
2 ответа

apt пока не может ()предоставить нужную вам информацию. aptitudeможет, хотя и несколько запутанно:

aptitude search '~U ~ODebian' -F "%p %O"|awk '/Debian-Security/ {print $1}'

Это ищет все обновляемые(~U)пакеты в официальных репозиториях Debian(~ODebian)и отображает их имя пакета(%p)и «происхождение»(%O). Последний фактически отображает метку репозитория , что означает «Debian -Security :9/stable» для репозиториев безопасности Debian 9. В итоге вы получите список обновляемых имен пакетов из репозиториев безопасности.

Существует множество способов установки только обновлений безопасности, однако ни один из них не является идеальным.

    Текстовый интерфейс
  • aptitudeпозволяет применять только обновления безопасности, просто прокрутив до заголовка «Обновления безопасности» (, который должен быть первым ), и нажав + .

  • Вы можете отправить список извлеченных выше пакетов на aptдля установки обновлений:

    aptitude search '~U ~ODebian' -F "%p %O" |
    awk '/Debian-Security/ {print $1}' |
    xargs apt-get install --only-upgrade
    

    Это имеет неприятный побочный -эффект очистки маркера «автоматически установлено» на обновленных пакетах.

  • Вы можете использовать unattended-upgrades, действие которого по умолчанию — применять только обновления безопасности:

    unattended-upgrades -v
    

    Если вы не хотите, чтобы обновления устанавливались автоматически, вам необходимо отключить ежедневное задание cron unattended-upgrades.

7
27.01.2020, 19:58

Чтобы отобразить обновление безопасности, вы можете использовать:

apt-get --just-print upgrade | grep -i security | awk '{print $2}' | awk '!seen[$0]++'

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

apt-get install --only-upgrade pckg_name

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

list=$(apt-get --just-print upgrade | grep -i security | awk '{print $2}' | awk '!seen[$0]++')
apt-get install --only-upgrade $list
5
27.01.2020, 19:58

Теги

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