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


693

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

88 packages can be updated.
80 updates are security updates

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


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 .


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

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


Я замечаю, что какие-либо изменения файлов во всей системе не отображаются до следующего календарного дня, есть ли способ как «обновить», чтобы сразу же увидеть изменения?
— 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

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


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

7

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

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

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

    wajig dailyupgrade
    

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



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 должны исчезнуть.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.