如何通过命令行安装更新?


692

通过SSH登录到Web服务器时,我看到以下信息:

88 packages can be updated.
80 updates are security updates

apt-get update然后,我尝试了一下,apt-get upgrade但是每次登录时,我仍然看到有关更新的消息。如何安装它们?


1
您是否首先尝试过此方法:sudo apt-get clean这应该清除缓存。
user2635584

Answers:


868

用这个:

sudo apt update        # Fetches the list of available updates
sudo apt upgrade       # Installs some updates; does not remove packages
sudo apt full-upgrade  # Installs updates; may also remove some packages, if needed
sudo apt autoremove    # Removes any old packages that are no longer needed

有关每个apt选项的文档可在apt的手册页中找到。这些也可以通过man apt在终端中运行来获得。

两者的使用upgradefull-upgrade一般不需要在一起,但它可以帮助在某些情况下:看到有关从Debian的9升级Debian的文档


29
我应该总是在sudo reboot之后重新启动吗?
hellboy 2015年

1
我需要添加-y使其起作用。Ubuntu 17.10
T04435 '18

124

通过键入sudo一次执行所有命令:

sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'

要么

sudo -s -- <<EOF
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
apt-get autoremove -y
apt-get autoclean -y
EOF

甚至在for循环中更短(感谢@dessert)

sudo bash -c 'for i in update {,dist-}upgrade auto{remove,clean}; do apt-get $i -y; done'

3
您可以结合dist-upgradeautoremove通过apt-get dist-upgrade --auto-remove
佳诺

3
无需同时运行upgradedist-upgrade
佳诺

3
@jarno dist-upgrade可以删除软件包。使用upgradefirst可以避免这种情况,例如当新的软件包版本比旧的软件包更容易满足依赖关系时。我不知道在稳定版本的Ubuntu中升级软件包时这有多大帮助,但是在其他情况下建议这样做。就个人而言,我很少dist-upgrade在Ubuntu中使用,而当我这样做时,我永远不会通过-y。但是,如果要通过dist-upgrade并通过-y,我认为首先执行upgrade操作是合理的。
伊利亚·卡根

1
@jarno虽然可以--autoremove与您选择的升级命令链接在一起,但不建议这样做,因为当其中一个软件包出现故障时,它可能以不干净的状态结束。更好autoremove的方法是在完成更新过程后,在单独的行上单独使用,如果您也想清除旧的配置文件,也可以使用进行链接--purge
Videonauth

@Videonauth哦,这取决于如何apt实现。我认为应该实施它,以免使系统处于不干净的状态。
佳诺

91

这是正常现象。

在登录时看到该消息已被附加到服务器状态“消息的最日”,这是唯一的更新每个日历天(或在服务器开机/启动)。看一下内容,使用

cat /etc/motd

运行后仍然看到可用的相同更新

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

可以预料的。如果您随后重新运行此命令,则当发布了更多(较新的)更新时,才会提示您进行任何进一步的更新。


我注意到整个系统中的任何文件更改都不会显示到下一个日历日,是否有办法像“刷新”一样立即开始查看更改?
aljuaid86 '16

你的意思是为内容更新消息的最天,或者没有得到你运行后想要什么sudo apt-get update && sudo apt-get upgrade
david6 '16

3
16.04不再适用。在“ apt-get dist-upgrade”和重启之后,我看到“可以升级0个软件包”。
Bogdan Calmac '16

1
上面的“ ..或在服务器上重新启动..”语句确实涵盖了这一点。
david6

3
猫:/ etc / motd:没有此类文件或目录
xApple

11

登录到服务器后,请运行以下命令。

sudo apt-get upgrade

它应该可以解决问题。也许您只需要重新启动服务器即可。


3
感谢您的回答,但我确实尝试了sudo apt-get upgrade。重新启动服务器是不可能的,因为我上面有站点。
马林2012年

3
如果您安装的更新直接影响内核,或者是驱动程序更新,或者是关键安全更新,则需要重新启动服务器。
伊万德罗·席尔瓦

也许您应该考虑一分钟的错误503。您知道这是哪种更新吗?
NorTicUs 2012年

1
如果服务器离线,如何提供503?
mcont 2015年

8

就我而言,我有一个不正确的或无法访问的网址/etc/apt/sources.list中。 删除此URL后,我能够成功更新所有软件包。

命令:

sudo vi /etc/apt/sources.list
sudo apt-get update && sudo apt-get upgrade

7

我的(真的很晚,我喜欢死灵法师徽章:-))解决方案:

  1. 安装wajig(一次):

    sudo apt-get install wajig 
    
  2. 当您想完全更新/升级系统时

    wajig dailyupgrade
    

    (如果需要,它将询问密码,并为您执行所有更新,升级,远程升级和自动删除步骤)。



1

该脚本非常有用,可以自动执行更新,包括删除不需要的程序包,并且仅在操作系统需要一个

remote_user=usernamehere
remote_host=example.com

ssh -A -n -o StrictHostKeyChecking=no ${remote_user}@${remote_host} && \
sudo apt-get update && \
sudo apt-get -f install -y && \
sudo apt-get -o Dpkg::Options::="--force-confnew" -yy dist-upgrade -y && \
sudo apt-get autoremove -y && \
[ -f /var/run/reboot-required ] && \
echo "sudo reboot now" && \
sudo reboot now 

在本地框上运行只需离开第一行做ssh

这是我保存在〜/ .bashrc中的别名

alias doit='echo; kill $( ps -eafww|grep update-manager|grep -v grep | grep update-manager | tr -s " " |cut -d" "  -f2 ) > /dev/null 2>&1;  echo "sudo apt-get update && sudo apt-get dist-upgrade &&  [ -f /var/run/reboot-required ] && echo && echo reboot required && echo";echo;sudo apt-get update && sudo apt-get dist-upgrade &&  [ -f /var/run/reboot-required ] && echo && echo reboot required && echo '

然后在终端上我只是发出 doit


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.