crenshaw-dev Asked: 2010-07-29 14:50:02 +0800 CST2010-07-29 14:50:02 +0800 CST 2010-07-29 14:50:02 +0800 CST 如何从命令行仅安装安全更新?关于如何管理更新的一些提示 772 sudo apt-get upgrade安装所有更新,而不仅仅是安全更新。我知道我可以使用更新管理器只选择重要的安全更新,但有没有办法从命令行执行此操作? package-management security command-line updates 10 个回答 Voted Best Answer blueyed 2010-07-30T09:28:14+08:002010-07-30T09:28:14+08:00 unattended-upgrades软件包提供了自动安装安全更新的功能。 您可以使用它,但您可以手动调用它,而不是配置自动部分: sudo unattended-upgrade -d --dry-run sudo unattended-upgrade -d # Idem --debug 如果您想安静地运行它: sudo unattended-upgrade 注意:当您调用无人值守升级时,您将“s”放在末尾(在较新的版本中,有一个符号链接可以避免这种情况)。 这假设默认情况下安装了该软件包,它可能是。如果没有,请执行以下操作: sudo apt install unattended-upgrades 另请参阅/usr/share/doc/unattended-upgrades/README.md。 ILIV 2012-11-17T03:35:10+08:002012-11-17T03:35:10+08:00 关于如何管理更新的一些提示 这适用于 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 笔记: 有时 Ubuntu 会显示安全更新,就好像它们来自 $release-updates 存储库一样。有人告诉我,之所以如此,是因为 Ubuntu 开发人员还将安全更新推送到 $release-updates 存储库,以加快它们的可用性。 如果是这种情况,您可以执行以下操作以仅显示安全更新: sudo sh -c 'grep ^deb /etc/apt/sources.list | grep security > /etc/apt/sources.security.only.list' 和 apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null | grep "^Inst" | awk -F " " {'print $2'} 检查软件包升级后需要重新启动哪些服务。事先确定要升级的软件包并安排重启/重启。这里的问题是,除非您重新启动服务,否则它仍然可能使用旧版本的库(最常见的原因),该库在您安装修复安全漏洞或其他问题的新软件包之前已加载到内存中。 checkrestart -v 但是,请记住,这checkrestart可能会列出不一定要重新启动的进程。例如,PostgreSQL 服务可能会在其内存中保留对已删除的 xlog 文件的引用,这不是重新启动服务的正当理由。 因此,另一种更可靠的使用标准 utils 进行检查的方法是以下我无耻地从https://locallost.net/?p=233窃取的小 bash 脚本 它检查系统上正在运行的进程是否仍在使用已删除的库,因为它会将这些库的副本保存在活动内存中。 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 Ressu 2010-07-29T20:12:58+08:002010-07-29T20:12:58+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) 优先级,因此考虑安装它们。这意味着只有被认为比当前安装的软件包更受欢迎的软件包才是安全更新。有关apt_preferences 手册页中固定的更多信息。 您可以使用适用于并且(至少)允许您固定某些版本以便它们有资格升级的--target-release选项来临时提升特定发行版的更新。apt-getaptitude 如果您希望仅将其用于脚本而不将其设为系统默认值,您可以将规则放在其他位置并改用它: apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade 这将使 apt 从非默认位置查找首选项文件。 作为示例给出的首选项文件不适用于第三方存储库,如果您也希望固定它们,您可以使用它apt-cache policy来轻松确定固定所需的密钥。 vcardillo 2016-10-04T09:18:26+08:002016-10-04T09:18:26+08:00 以下在 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"; }; 请注意默认情况下,它是如何配置为仅允许对安全包进行无人值守升级的。 修改文件/etc/apt/apt.conf.d/10periodic类似于: 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 Micah Butler 2020-07-26T07:23:11+08:002020-07-26T07:23:11+08:00 如果您希望仅安装安全更新,则以下操作将起作用。首先它列出了所有可升级的包,只过滤掉来自安全仓库的包,在第一个字段中剪切返回的字符串,然后将它们传递给 apt-get install 进行包更新。 sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y keypress 2019-01-19T04:41:53+08:002019-01-19T04:41:53+08:00 在 Debian 上,我使用此命令仅进行安全更新: apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq ) Stephen RC 2010-07-29T16:00:19+08:002010-07-29T16:00:19+08:00 尽管它非常丑陋,但您可以禁用除安全存储库之外的所有存储库,然后执行以下操作: sudo apt-get update && sudo apt-get upgrade 我没有测试过它,但理论上它只会在安全回购中找到更新并应用它们...... fuser 2013-08-03T01:49:57+08:002013-08-03T01:49:57+08:00 apt-get update:只需阅读存储库中的条目 - 根据现有列表。需要检查什么是新的。 apt-get upgrade:没有内核模块的已安装软件包的所有更新。没有发布更新。 apt-get dist-upgrade:已安装软件包的所有更新也包含内核模块。没有发布更新。 apt-get带参数-s:仅测试,不进行任何更改。 Seth Bergman 2019-07-23T13:02:54+08:002019-07-23T13:02:54+08:00 这是一个以几种不同方式实现此目的的脚本: #!/usr/bin/env bash set -e # List upgradable packages apt-get update apt list --upgradable 2>/dev/null # List security upgrades test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y) # List upgradable apt packages then upgrade apt-get update && apt-get upgrade -y -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)" Ross 2010-07-29T15:04:40+08:002010-07-29T15:04:40+08:00 我在 apt-get 或 aptitude 中都找不到选项,但是有人对 SuperUser有同样的问题。唯一的回应是: Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. Did you replace 'karmic' with the code name of your Ubuntu? 然而,没有回复是否有效。
unattended-upgrades软件包提供了自动安装安全更新的功能。
您可以使用它,但您可以手动调用它,而不是配置自动部分:
如果您想安静地运行它:
注意:当您调用无人值守升级时,您将“s”放在末尾(在较新的版本中,有一个符号链接可以避免这种情况)。
这假设默认情况下安装了该软件包,它可能是。如果没有,请执行以下操作:
另请参阅
/usr/share/doc/unattended-upgrades/README.md
。关于如何管理更新的一些提示
这适用于 Debian 和 Ubuntu,但更具体的 Ubuntu 说明如下。
仅显示安全更新:
或者
或者
显示所有可升级包
仅安装安全更新
笔记:
有时 Ubuntu 会显示安全更新,就好像它们来自 $release-updates 存储库一样。有人告诉我,之所以如此,是因为 Ubuntu 开发人员还将安全更新推送到 $release-updates 存储库,以加快它们的可用性。
如果是这种情况,您可以执行以下操作以仅显示安全更新:
和
检查软件包升级后需要重新启动哪些服务。事先确定要升级的软件包并安排重启/重启。这里的问题是,除非您重新启动服务,否则它仍然可能使用旧版本的库(最常见的原因),该库在您安装修复安全漏洞或其他问题的新软件包之前已加载到内存中。
但是,请记住,这
checkrestart
可能会列出不一定要重新启动的进程。例如,PostgreSQL 服务可能会在其内存中保留对已删除的 xlog 文件的引用,这不是重新启动服务的正当理由。因此,另一种更可靠的使用标准 utils 进行检查的方法是以下我无耻地从https://locallost.net/?p=233窃取的小 bash 脚本
它检查系统上正在运行的进程是否仍在使用已删除的库,因为它会将这些库的副本保存在活动内存中。
替换
/etc/apt/preferences
为以下内容:现在一个简单的
apt-get upgrade
将只升级所有安全更新。为什么(以及如何)这样做:首选项文件会将 Ubuntu 发行版中的所有软件包固定到优先级 50,这将使它们不如已安装的软件包那么受欢迎。源自安全存储库的文件被赋予默认 (500) 优先级,因此考虑安装它们。这意味着只有被认为比当前安装的软件包更受欢迎的软件包才是安全更新。有关apt_preferences 手册页中固定的更多信息。
您可以使用适用于并且(至少)允许您固定某些版本以便它们有资格升级的
--target-release
选项来临时提升特定发行版的更新。apt-get
aptitude
如果您希望仅将其用于脚本而不将其设为系统默认值,您可以将规则放在其他位置并改用它:
这将使 apt 从非默认位置查找首选项文件。
作为示例给出的首选项文件不适用于第三方存储库,如果您也希望固定它们,您可以使用它
apt-cache policy
来轻松确定固定所需的密钥。以下在 Ubuntu 14.04 LTS 中得到确认。
使用
unattended-upgrade
包。看文件
/etc/apt/apt.conf.d/50unattended-upgrades
。顶部应该有一个部分:请注意默认情况下,它是如何配置为仅允许对安全包进行无人值守升级的。
修改文件
/etc/apt/apt.conf.d/10periodic
类似于:这将运行自动无人值守的安全升级,每天一次。
现在,手动运行:
sudo unattended-upgrade
.在不做任何事情的情况下进行试运行:
sudo unattended-upgrade --dry-run
.来源:https ://help.ubuntu.com/14.04/serverguide/automatic-updates.html
如果您希望仅安装安全更新,则以下操作将起作用。首先它列出了所有可升级的包,只过滤掉来自安全仓库的包,在第一个字段中剪切返回的字符串,然后将它们传递给 apt-get install 进行包更新。
在 Debian 上,我使用此命令仅进行安全更新:
尽管它非常丑陋,但您可以禁用除安全存储库之外的所有存储库,然后执行以下操作:
我没有测试过它,但理论上它只会在安全回购中找到更新并应用它们......
apt-get update
:只需阅读存储库中的条目 - 根据现有列表。需要检查什么是新的。apt-get upgrade
:没有内核模块的已安装软件包的所有更新。没有发布更新。apt-get dist-upgrade
:已安装软件包的所有更新也包含内核模块。没有发布更新。apt-get
带参数-s
:仅测试,不进行任何更改。这是一个以几种不同方式实现此目的的脚本:
我在 apt-get 或 aptitude 中都找不到选项,但是有人对 SuperUser有同样的问题。唯一的回应是:
然而,没有回复是否有效。