sudo apt-get upgrade安装所有更新,而不仅仅是安全更新。我知道我可以使用Update Manager仅选择重要的安全更新,但是有没有办法从命令行执行此操作?

评论

我不这么认为。 dist-upgrade将整个系统升级到新版本。我说的是日常更新,就像您在Update Manager中看到的一样。

哦,我明白你现在在说什么。嘿,我经常运行apt-get update,我无意间输入了它。感谢您的单挑!

您要“ apt-get dist-upgrade”,而不是“ apt-get升级”。 “ dist-upgrade”不适用于新发行版(即“ do-release-upgrade”是一个单独的命令)。使用“ dist-upgrade”意味着它将处理新软件包的依赖关系。这可能很重要。

dist-upgrade是Update Manager GUI执行的常规操作。对于依赖于当前映像的软件包(例如,其中有linux-image-generic软件包的内核),例如linux-image-3.xy-zz-generic(每个版本都是单独的软件包名称),dist-upgrade (允许安装新软件包来满足依赖关系)将执行此升级,而升级会将内核软件包显示为受阻。

令人惊讶的是,考虑到它在每台服务器上的显着位置,没有合适的基于apt-get的答案

#1 楼

软件包无人值守升级提供了自动安装安全更新的功能。

您可以使用此功能,但是除了配置自动部件外,还可以手动调用它:

 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

评论


为了禁用无人值守升级的自动执行,您可能需要修改/etc/cron.daily/apt,但不确定这样做是否“正确”。

–Jaime Hablutzel
14-10-23在3:33

旁注:对于Ubuntu 12.04.5 LTS服务器,默认情况下未安装无人值守升级。

–猛禽
2015年4月22日在2:41

由于您是从命令行执行此操作的,因此对于信息消息,请使用-v;对于调试消息,请使用-d。否则,该实用程序将非常安静,在这种情况下,您需要检查/ var / log / unattended-upgrades中的日志。您也可以使用--dry-run进行模拟,但实际上不进行任何升级。有关更多信息和其他选项,请使用--help获取帮助消息。

– ADTC
16 Mar 20'9:00在



我今天学到了一些有关无人值守升级的知识。谢谢!

–兰迪L
16年5月17日在18:19

“用于监视运行情况”,它只是调试非交互式消息,对吗?

–水瓶座力量
17年5月14日在21:12

#2 楼

有关如何管理更新的一些提示

这对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 '} | 
    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 '}



检查打包后需要重新启动哪些服务升级。弄清楚要升级的软件包,并计划重新启动/重新引导。这里的问题是,除非重新启动服务,否则它可能仍会使用旧版本的库(最常见的原因),该库已在安装新的可修复安全漏洞的软件包之前加载到内存中。

checkrestart -v


但是,请记住,checkrestart可能列出了不必重新启动的进程。例如,PostgreSQL服务可能会在内存中保留对已删除的xlog文件的引用,这不是重新启动该服务的有效理由。因此,另一种更可靠的方式来检查此以下标准bash脚本是使用标准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




评论


我现在才注意到这个帖子。非常精确。非常感谢(+1)

–Danduk82
16年5月13日在7:59

“ checkrestart”来自何处?我在Ubuntu Trusty中找不到它。我确实找到了“ needrestart”,看起来很适合您的说明?

– Ben XO
16年8月19日在11:29

它可以在debian-goodies软件包中找到:packages.debian.org/wheezy/debian-goodies。也需要重新开始。您可以通过运行以下命令在Xenial上找到两者:$ apt-cache search checkrestart

– ILIV
16年8月20日在3:51

我得到“ E:无法打开锁文件/ var / lib / dpkg / lock-打开(13:权限被拒绝)”,即使使用sudo也是如此。这是您所提供的更新或命令之一所特有的吗?

–内森·霍恩比(Nathan Hornby)
16-09-30在9:53

对我来说,如果我在apt-get install上不包括-y,它将在第一个是/否问题上退出

– Mike Q
19年2月12日在11:58

#3 楼

用以下内容替换/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-releaseapt-get(至少)一起使用的aptitude选项临时促进更新的特定发行版,这将允许您固定某些发行版,以便它们可以升级。

如果仅希望将其用于脚本而不是将其设置为系统的默认值,则可以将规则放在其他位置并改为使用:

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


这将易于从非默认位置查找首选项文件。

作为示例给出的首选项文件不适用于第三个第三方存储库,如果您也想固定它们,则可以使用apt-cache policy轻松确定所需的固定密钥。

评论


感谢您抽出宝贵的时间为您提供详尽的答案。我想我知道它是如何工作的。但是,当我创建/ etc / apt / preferences文件并运行apt-get upgrade时,它想升级所有软件包,而不仅仅是安全更新。升级之前和之后的列表完全相同,除了使用/ etc / apt / preferences之外,它不希望升级Leafpad,后者是我从源代码构建并通过dpkg“手动”安装的。这对我来说很奇怪,但可能对您有帮助。

– Michael Crenshaw
10年7月29日在13:14

您可以查看apt-cache policy命令的情况。选择一个没有获得安全修复的软件包,然后运行apt-cache policy软件包名称。这将列出各种版本的优先级。您应该看到不同的行和不同的优先级。如果没有优先级为50的行,则由于某种原因,固定不会影响所讨论的程序包。

– Resssu
2010年7月29日在16:24

我过去一直遵循这个答案。今天,我发现由于这个答案,我的服务器上没有安装68个安全更新程序包,也没有显示为潜在的安装候选程序。这不是一个好答案!

–阴影
2014年8月22日上午8:33

#4 楼

在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

评论


有没有办法使它成为每月计划?

–mike.b93
17年2月1日在14:30

@ mike.b93,我认为将APT :: Periodic :: Unattended-Upgrade设置为“ 30”;每30天就会执行一次。

–vcardillo
17年5月23日在22:13



#5 楼

尽管它很丑陋,但是您可以禁用除安全性存储库之外的所有存储库,然后执行以下操作:

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


我还没有对其进行测试,但是从理论上讲它只会在安全存储库中找到更新并将其应用...

评论


是的,那是可能的。我会调查一下。我不太擅长BASH,但是我可以尝试编写一个脚本来实现。

– Michael Crenshaw
10年7月29日在0:07

好的,我禁用了除Ubuntu安全存储库以外的所有文件,并运行了sudo apt-get update && sudo apt-get upgrade(在完成任何升级之前取消)。然后,我重新启用了所有存储库,运行sudo apt-get updatee,并打开了Update Manager。标记为安全更新的软件包与apt-get升级不完全相同,但是它们非常接近-对我来说足够接近。我仍然希望我确切地知道Update Manager的工作方式以及如何从命令行执行相同的操作,但是可以。谢谢!

– Michael Crenshaw
10年7月29日在0:39

#6 楼



apt-get update
仅读取存储库中的条目-根据现有列表。需要检查有什么新功能。

apt-get upgrade:不带内核模块的已安装软件包的所有更新。没有版本更新。

apt-get dist-upgrade:包含内核模块的已安装软件包的所有更新。没有版本更新。

参数为apt-get-s:仅测试,不做任何更改。


#7 楼

在Debian上,我使用此命令仅执行安全更新:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower() ~ /.*security.*/ || tolower() ~ /.*security.*/ {print }' | sort | uniq )


#8 楼

这是一个以几种不同方式实现此目的的脚本:

 #!/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}' && test "$(apt-get upgrade -y)"
 


#9 楼

如果您只希望安装安全更新,则以下内容将起作用。首先,它列出了所有可升级的软件包,仅过滤出来自安全性仓库的软件包,在第一个字段中剪切返回的字符串,然后将它们传递到apt-get install进行软件包更新。
sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y


评论


@keypress对该优雅的解决方案进行了很大的改进:使用--only-upgrade确保不会安装任何新软件包。我刚刚使用apt测试了它,并且可以正常工作。

– int_ua
20年8月13日在10:26



#10 楼

我在apt-get或aptitude中都找不到选项,但是有人在SuperUser上有相同的问题。唯一的响应是:

评论


似乎该Wiki页面中描述的方法取决于将aptitude的--target-release参数设置为 -security。像该问题的OP一样,该方法将安装所有升级,而不仅仅是安全升级。阅读apt-get和aptitude手册页时,我不认为--target-release参数甚至不打算将升级限制为仅安全性,尽管我不确定其用途是什么。

– Michael Crenshaw
10年7月28日在23:38