Что делает «sudo apt-get update»?


Ответы:


551

В двух словах, на apt-get updateсамом деле не устанавливает новые версии программного обеспечения. Вместо этого он обновляет списки пакетов для обновлений для пакетов, которые требуют обновления, а также для новых пакетов, которые только что поступили в хранилища.

  • apt-get updateзагружает списки пакетов из репозиториев и «обновляет» их, чтобы получить информацию о новейших версиях пакетов и их зависимостях. Это будет сделано для всех репозиториев и PPA. С http://linux.die.net/man/8/apt-get :

    Используется для повторной синхронизации файлов индекса пакета из их источников. Индексы доступных пакетов выбираются из местоположений, указанных в /etc/apt/sources.list(5). Обновление всегда следует выполнять перед обновлением или dist-upgrade.

  • apt-get upgradeбудет получать новые версии пакетов, существующих на компьютере, если APT узнает об этих новых версиях в порядке apt-get update.

    С http://linux.die.net/man/8/apt-get :

    Используется для установки новейших версий всех пакетов, установленных в настоящее время в системе, из источников, перечисленных в /etc/apt/sources.list(5). Пакеты, установленные в настоящее время с доступными новыми версиями, извлекаются и обновляются; ни при каких обстоятельствах установленные в настоящее время пакеты не удаляются, а пакеты, которые еще не установлены, не извлекаются и не устанавливаются. Новые версии установленных в настоящее время пакетов, которые нельзя обновить без изменения состояния установки другого пакета, останутся в их текущей версии. [Выделение мое] Сначала необходимо выполнить обновление, чтобы apt-get знал, что доступны новые версии пакетов.

  • apt-get dist-upgradeбудет выполнять ту же работу, что и пользователь apt-get upgrade, плюс он также будет интеллектуально обрабатывать зависимости, поэтому он может удалять устаревшие пакеты или добавлять новые. Смотрите здесь: Что такое «dist-upgrade» и почему он обновляется больше, чем «upgrade»?

    С http://linux.die.net/man/8/apt-get :

    В дополнение к выполнению функции обновления, эта опция также интеллектуально обрабатывает изменение зависимостей с новыми версиями пакетов; apt-get имеет «умную» систему разрешения конфликтов, и при необходимости она попытается обновить самые важные пакеты за счет менее важных. /etc/apt/sources.listФайл (5) содержит список мест , из которых можно извлечь нужные файлы пакета. Смотрите также apt_preferences (5) для механизма переопределения общих настроек для отдельных пакетов.

Вы можете комбинировать команды &&следующим образом:

sudo apt-get update && sudo apt-get install foo bar baz foo-dev foo-dbg

или получить самые новые версии, возможные в соответствии с требованиями версий зависимостей:

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

Вам нужно sudoоба раза, но, поскольку sudoпо умолчанию не запрашивается около 5 минут с момента последней sudoоперации, вам будет предложено ввести пароль только один раз (или не запрашивать вообще).


11
Всегда ли нам нужно запускать sudo apt-get updateкоманду всякий раз, когда мы устанавливаем пакеты? В чем недостаток, если мы этого не сделаем?
JohnnyQ

14
@JohnnyQ Если вы не запустите эту команду, вы можете установить устаревший пакет.
ζ--

ах звучит так, будто это просто условность. Поэтому я предполагаю, что в этом нет необходимости, особенно если вы просто используете базовые пакеты с базовыми командами, которые обычно не обновляются. Проблема в моей ситуации заключается в том apt-get update, что интернет все еще примитивен.
JohnnyQ

2
@JohnnyQ, если у вас медленное обновление apt-get, то ваше apt-get dist-upgrade также будет медленным, так что на самом деле это не аргумент, чтобы сначала не обновлять apt-get. Кстати, вы можете ускорить обновление apt-get, заглянув в папку /etc/apt/sources.d/, чтобы узнать, есть ли у вас какие-либо добавленные пользовательские репозитории, и один из них может не отвечать, что замедлит весь процесс обновления.
Младен Б.

1
Кстати, «apt» расшифровывается как Advanced Packaging Tool ( wiki.debian.org/Apt «Что такое APT?»). Что-то я узнал на днях, думал, что поделюсь. («apt» часто встречается у man apt-get, man apt, но я никогда раньше не видел расшифровку аббревиатуры).
августа

47

Поиск Google может дать вам определение практически для любой команды терминала, как и --help в терминале. Например,

apt-get --help

sudo apt-get update по сути состоит из трех частей:

sudo

выполняет следующую команду с правами суперпользователя (root). Многие действия, требующие изменения системных файлов или установки приложений, требуют дополнительных разрешений.

apt-get

это инструмент командной строки, который Ubuntu использует для установки, удаления и управления пакетами программного обеспечения

update

это опция для программы apt-get, которая обновляет списки пакетов с сервера в Интернете. Списки пакетов предоставляют утилите apt-get важную информацию о пакетах программного обеспечения, которые вы можете установить с помощью apt-get. apt-get использует эти списки, чтобы определить, какое программное обеспечение устанавливать, когда ему дается команда для установки. Например

sudo apt-get install guake

установил бы терминал Guake, поскольку он в настоящее время перечислен в локальных списках программного обеспечения моего компьютера. Однако это может быть не подходящая версия, или, если программа новая, она может быть вообще недоступна. Таким образом, при установке программного обеспечения с помощью apt-get вы обычно набираете

sudo apt-get update
sudo apt-get install <package>

убедитесь, что apt-get знает, что нужно установить самую последнюю версию пакета.

Еще одним полезным источником информации является help.ubuntu.comсайт. Например, если вы искали этот сайт, apt-getвы найдете AptGet / Howto в качестве одного из результатов.


Алекс, могу ли я в основном использовать команду, как ты ее выразил: "apt-get update apt-get install <package>" В основном можно выполнить 2 вещи, просто набрав вместе две команды, как это?
Элизиум

1
@Elysium Да, если у вас есть &&между ними какsudo apt-get update&&sudo apt-get install foo bar baz
ζ--

7
Использование &&означает, что вторая команда будет выполняться только в случае успеха первой. Если вас не волнует успех первой команды, используйте ;вместо этого.
Flimm

4
Поиск Google привел меня к этому вопросу / ответу. Просто к вашему сведению;)
teewuane

19

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

В двух словах: настоятельно рекомендуется запускать sudo apt-get updateперед установкой, но он может быть пропущен, если вы действительно испытываете нехватку времени, если вы не меняли репозитории или PPA с момента последней apt-get update.


13

Он обновляет список доступного программного обеспечения на вашем компьютере.

На вашем компьютере есть список (например, каталог), который содержит все доступное программное обеспечение, доступное на серверах Ubuntu. Но доступное программное обеспечение и версии могут измениться, поэтому «обновление» попадет на сервер и увидит, какое программное обеспечение доступно для обновления его локальных списков (или каталогов).

Обратите внимание, что updateотличается от upgrade. Обновление, как упомянуто выше, будет загружать доступное программное обеспечение и обновлять списки, а upgradeтакже устанавливать новые версии программного обеспечения, установленного на вашем компьютере (фактические обновления программного обеспечения).

Чтобы фактически обновить ваше программное обеспечение (не «обновлять» списки), вы выполняете команду

sudo apt-get upgrade

который обычно выполняется после «обновления».


Что sudo apt-get installтогда? Установка конкретных пакетов вместо общего обновления?
Питер Мортенсен

12

Вам нужно запустить apt-get updateодин раз перед установкой новых пакетов, так как это обновит информацию о локальном хранилище. Если вы собираетесь устанавливать несколько пакетов вскоре после этого, запускать не нужно apt-get update. Кроме того, вы можете установить несколько пакетов одновременно, если вы наберете sudo apt-get install package1 package2...


Хороший трюк для этого!
Эмерсон Се

6

При установке пакетов из командной строки с помощью sudo apt-get install ...(или sudo aptitude install ...) или при обновлении их из командной строки (с использованием upgradeили dist-upgradeвместо install) следующая информация получается из конфигурации локальной системы, а не из Интернета:

  1. какие пакеты доступны

  2. какие версии из них доступны

  3. откуда можно получить доступные пакеты

Запуск sudo apt-get update(или sudo aptitude update) обновляет это в вашей локальной системе. Это шаг, который фактически извлекает информацию о том, какие пакеты могут быть установлены, в том числе о том, какие обновления доступны в настоящее время для установленных пакетов пакетов , из интернет-источников.

При установке пакетов с графическим интерфейсом (диспетчер обновлений, центр программного обеспечения или диспетчер пакетов Synaptic) работа sudo apt-get updateвыполняется автоматически. Когда вы устанавливаете пакеты из командной строки, это не так, и вы всегда должны делать это самостоятельно, если только вы это не сделали совсем недавно .

Поскольку информация о том, какие обновленные версии пакетов доступны, получается с помощью sudo apt-get update(или sudo aptitude update), рекомендуется запускать его перед установкой любого пакета, и необходимо запустить его для установки последних обновлений, даже если вы не добавили или не удалили какое-либо Программное обеспечение. Источники (такие как PPA) .

Обратите внимание, что если вы собираетесь выполнять несколько операций по управлению пакетами одновременно, вам не нужно запускать их sudo apt-get updateперед каждым. Только если информация некоторое время не обновлялась, вы должны обязательно ее запустить.


4

Как упомянул Элиа Каган выше, можно ожидать, что приложение с графическим интерфейсом будет запускаться apt-get updateдо apt-get install/ apt-get upgrade, но я только что обнаружил интересную ошибку 404 на относительно новой машине с наступательной безопасностью, которая поставила меня в тупик на минуту.

Из командной строки я запустил apt-get updateи снова попробовал команду «Системные инструменты / Обновление программного обеспечения», и на этот раз она работала без ошибок 404.

Итак, я думаю, вы не всегда можете предположить, что apt-get updateон запускается из приложений с графическим интерфейсом ...


Интересно ... Может ли быть какая-то необычная сетевая ситуация между вами и сервером, которая лучше обрабатывается при запуске, apt-getчем автоматическая проверка, выполняемая при запуске Software Updater / Update Manager? Вы используете HTTP прокси? И можете ли вы сделать это снова или это случилось один раз? Если это единичная аномалия, мне интересно, может быть, проблема связана с временной неправильной настройкой сервера. Какое зеркало вы используете? С большей информацией, возможно, я мог бы улучшить свой ответ. (Кстати, это предназначено как отдельный ответ, или это должно быть преобразовано в комментарий?)
Элия ​​Каган

3

Как говорили многие люди до меня, это обновляет ваш локальный репозиторий (список пакетов).

Вы можете столкнуться с проблемами, если попытаетесь установить

apt-get install foobar

и у foobar или зависимости нет их последней версии в репозитории. Это может быть особенно проблематично, если вы устанавливаете файл .deb вручную или ppa от третьего лица.

В основном это делает , что ваш список соответствует мастер - список.


2

Давайте рассмотрим пример установки VLC media player на Ubuntu:

sudo apt-get update

Он проверит репозитории на наличие доступных обновлений.

В то время как

sudo apt-get install vlc vlc-plugin-pulse mozilla-plugin-vlc

установит VLC media player из репозиториев, которые мы искали.

Если вы вошли в систему как пользователь root (администратор), вам не нужно его использовать sudo, поскольку у вас уже есть привилегии суперпользователя.

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