Как установить обновления через командную строку?

693

Когда я захожу на свой веб-сервер через SSH, я вижу информацию:

88 packages can be updated.
80 updates are security updates

Я пробовал apt-get updateтогда, apt-get upgradeно каждый раз, когда я вхожу, я все еще вижу сообщение об обновлениях. Как мне их установить?

Marlin
источник
1
Вы пробовали это сначала: sudo apt-get clean это должно очистить кеш.
user2635584 20.09.13

Ответы:

871

Использовать это:

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в вашем терминале.

Использование обоих upgradeи full-upgradeвместе обычно не требуется, но в некоторых случаях это может помочь: смотрите документацию Debian об обновлениях с Debian 9 .

SirCharlo
источник
29
Я должен всегда перезагружаться sudo rebootпосле этого?
Хеллбой
1
Мне нужно было добавить -y, чтобы оно работало. Ubuntu 17.10
T04435
125

Выполните все команды, набрав 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-upgradeи autoremoveпутем apt-get dist-upgrade --auto-remove.
Ярно
3
Нет необходимости запускать оба upgradeи dist-upgrade.
Ярно
3
@jarno dist-upgradeможет удалять пакеты. Использование upgradefirst может избежать этого, например, когда новые версии пакетов удовлетворяют зависимости легче, чем старые. Я не знаю, как часто это помогает при обновлении пакетов в стабильном выпуске Ubuntu, но это рекомендуется в некоторых других контекстах . Лично я редко использую dist-upgradeв Ubuntu, и когда я делаю, я никогда не прохожу -y. Но если кто-то должен бежать dist-upgradeи пройти -y, я думаю, что разумно upgradeсначала выполнить действие.
Элия ​​Каган
1
@jarno, в то время как вы можете связать --autoremoveвместе с выбранной вами командой обновления, это не рекомендуется, так как это может привести к нечистому состоянию в случае сбоя одного из пакетов. Лучше было бы использовать autoremoveодин на отдельной строке после завершения процесса обновления, если вы хотите очистить старые конфигурационные файлы, вы можете связать это --purge.
Видеонавт
@Videonauth ой, это зависит от того, как aptэто реализовано. Я думаю, что это должно быть реализовано, чтобы не оставлять систему в нечистом состоянии.
Ярно
91

Это нормальное поведение.

Сообщение, которое вы видите при входе в систему, было добавлено к состоянию сервера «Сообщение дня», которое обновляется только каждый календарный день (или при загрузке / запуске сервера). Посмотрите на содержимое, используя

cat /etc/motd

Все еще вижу те же обновления доступны после запуска

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

следует ожидать. Если вы затем повторно запустить эту команду вы только будете предложено ввести любые дополнительные обновления , если еще больше (новые) обновления были выпущены.

david6
источник
Я замечаю, что какие-либо изменения файлов во всей системе не отображаются до следующего календарного дня, есть ли способ как «обновить», чтобы сразу же увидеть изменения?
aljuaid86
Вы имеете в виду обновления для контента « Сообщения дня» или не получаете то, что вы хотите после запуска sudo apt-get update && sudo apt-get upgrade?
david6
3
Это больше не относится к 16.04. После «apt-get dist-upgrade» и перезагрузки я вижу «0 пакетов могут быть обновлены».
Богдан Калмак
1
Оператор '.. or on server reboot ..', описанный выше, охватывает это.
david6
3
cat: / etc / motd: такого файла или каталога нет
xApple
11

Как только вы войдете в свой сервер, выполните команду ниже.

sudo apt-get upgrade

Это должно сделать свое дело. Может быть, вам просто нужно перезагрузить сервер.

Mitch
источник
3
Спасибо за ваш ответ, но я попробовал обновить sudo apt-get. О перезапуске сервера не может быть и речи, потому что на нем есть сайты.
Марлин
3
если вы установили обновление, которое напрямую влияет на ядро, обновление драйвера или критическое обновление для системы безопасности, необходимо перезагрузить сервер.
Эвандро Сильва
Может быть, вы должны рассмотреть ошибку 503 на минуту. Вы знаете, что это за обновление?
NorTicUs
1
Как вы можете дать 503, если сервер находится в автономном режиме?
Mконт
8

В моем случае у меня был неправильный или недоступный URL в /etc/apt/sources.list. После удаления этого URL я смог успешно обновить все пакеты.

Команды:

sudo vi /etc/apt/sources.list
sudo apt-get update && sudo apt-get upgrade
burtsevyg
источник
7

Мое (очень поздно, мне нравятся значки некроманта :-)):

  1. Установите Wajig (один раз):

    sudo apt-get install wajig 
    
  2. Когда вы хотите обновить / полностью обновить вашу систему

    wajig dailyupgrade
    

    (при необходимости он запрашивает пароль и выполняет все действия по обновлению, обновлению, dist-upgrade и автоматическому удалению).

Rmano
источник
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

Скотт Стенсленд
источник
0

Если вы запустите apt-get updateснова после apt-get upgradeзавершения, эти сообщения при входе в систему через ssh должны исчезнуть.

Франциско Луз
источник