Por que usar o apt-get upgrade em vez do apt-get dist-upgrade?

302

Eu costumo usar apt-get update && apt-get upgradepara executar minhas atualizações e atualizações em vez da GUI, porque ela parece ser executada mais rapidamente.

No entanto, ultimamente tenho notado que muitas vezes recebo a mensagem de que uma das minhas atualizações foi retida. Normalmente, eu corro dist-upgradepara executá-lo e funciona bem. Tanto quanto eu posso dizer depois de ler esta pergunta e suas respostas, dist-upgradefaz as mesmas coisas e mais algumas.

Então, minha pergunta é: por que usar apt-get upgrade? Por que não usar apt-get dist-upgradeo tempo todo? Por que apt-get upgradeexiste mesmo?

jimchristie
fonte
1
Nas versões mais recentes do Ubuntu, sudo apt full-upgradefaz coisas semelhantes.
Aaron Franke

Respostas:

410

Normalmente, atualizo minhas máquinas com:

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

Abaixo está um trecho de man apt-get. O uso da atualização mantém a regra: sob nenhuma circunstância os pacotes instalados no momento são removidos ou os pacotes ainda não instalados são recuperados e instalados. Se isso é importante para você, use apt-get upgrade. Se você deseja que as coisas "funcionem", você provavelmente deseja apt-get dist-upgradegarantir que as dependências sejam resolvidas.

Para expandir por que você deseja atualizar em vez de dist-upgrade , se você é um administrador de sistemas, precisa de previsibilidade. Você pode estar usando recursos avançados, como o apt pinning ou pull de uma coleção de PPAs (talvez você tenha um PPA interno), com várias automações para inspecionar o sistema e as atualizações disponíveis, em vez de sempre atualizar ansiosamente todos os pacotes disponíveis. Você ficaria muito frustrado quando o apt realizar um comportamento sem script, principalmente se isso levar ao tempo de inatividade de um serviço de produção.

upgrade
    upgrade is used to install the newest versions of all packages
    currently installed on the system from the sources enumerated in
    /etc/apt/sources.list. Packages currently installed with new
    versions available are retrieved and upgraded; under no
    circumstances are currently installed packages removed, or packages
    not already installed retrieved and installed. New versions of
    currently installed packages that cannot be upgraded without
    changing the install status of another package will be left at
    their current version. An update must be performed first so that
    apt-get knows that new versions of packages are available.

dist-upgrade
    dist-upgrade in addition to performing the function of upgrade,
    also intelligently handles changing dependencies with new versions
    of packages; apt-get has a "smart" conflict resolution system, and
    it will attempt to upgrade the most important packages at the
    expense of less important ones if necessary. So, dist-upgrade
    command may remove some packages. The /etc/apt/sources.list file
    contains a list of locations from which to retrieve desired package
    files. See also apt_preferences(5) for a mechanism for overriding
    the general settings for individual packages.
rduplain
fonte
44
Obrigado por não apenas resumir as diferenças entre os dois, mas também explicar as situações em que um pode ser melhor que o outro. Era exatamente isso que eu estava procurando.
jimchristie
10
dist-upgradetem mais probabilidade de quebrar mal as coisas do que upgrade. upgradegarante que seu sistema permaneça completo.
Braiam 18/03/14
5
dist-upgrade é mais provável para corrigir problemas com versões de pacotes conflitantes, se você está confortável com a tomada da abordagem rolo de estrada (ou seja, você não precisa de um software de missão crítica de produção em execução no box)
Henno
1
Uma pequena pergunta sobre 'apt-get upgrade' referindo-se ao fato de "nenhum pacote instalado no momento foi removido ou um novo foi adicionado": os pacotes existentes também são atualizados de acordo. Por exemplo, oldA depende de oldB. O oldA e o oldB serão atualizados? Que tal se newA depende de oldB e não newB, o que acontece com esses dois durante a atualização? ambos não atualizados ou atualizados, o que pode deixar o newA não está funcionando porque o oldB está perdido?
Kenny
2
Qual o motivo do uso timeaqui?
ItalyPaleAle
129

Sei que esta pergunta foi respondida e tem um ano, mas acho que isso precisa ser dito. O Ubuntu 14.04 e posterior (e o Debian Jessie e posterior, para aqueles que o encontram no Google) usam o APT 1.0, que permite o comando em aptvez de apt-gete apt-cachepara algumas operações.

  • apt-get upgrade não mudará o que está instalado (apenas versões),
  • apt-get dist-upgrade instalará ou removerá os pacotes conforme necessário para concluir a atualização,
  • apt upgrade instalará automaticamente, mas não removerá os pacotes.
  • apt full-upgradeexecuta a mesma função que apt-get dist-upgrade.
Stephen Angelico
fonte
@muru Obrigado pela edição e pela observação sobre a atualização completa. Eu uso principalmente o Debian 7 (que é anterior ao APT 1.0) e só joguei com o Debian Jessie e o Ubuntu 14.04.
Stephen Angelico
de nada. Como alguém que usa jessiee 14.04 regularmente, eu aprendi com esse novo utilitário com a sua resposta!
muru 27/07
Você tem uma fonte para a sua descrição apt upgrade? Tudo o que posso sugerir apt upgradeé o mesmo apt-get upgrade. Por exemplo, apt help upgradenas saídas do meu sistema:"apt upgrade" is equivalent to "sudo apt-get upgrade"
Jon Bentley
1
As respectivas páginas de manual apte apt-getespecificam o que eu disse originalmente.
Stephen Angelico
1
apt safe-upgradenão é uma operação válida no meu sistema. Se você quer dizer aptitude safe-upgrade, não exatamente. apt-get upgradenunca vai instalar pacotes, enquanto que apt upgradee aptitude safe-upgradeirá instalar novos pacotes como dependências exigi-lo. Então aptitude safe-upgradeé equivalente a apt upgrade, não apt-get upgrade.
Stephen Angelico
7

A upgradeopção instala apenas a nova versão dos pacotes que já estão instalados no sistema (e sim, as atualizações do kernel pertencem a eles).

No entanto, algumas vezes as atualizações alteram as dependências: por exemplo, uma nova versão de um pacote não depende mais da biblioteca que você instalou ou exigirá a instalação de bibliotecas adicionais. A upgradeopção nunca removerá os pacotes instalados que você não precisa mais.

No entanto, a dist-upgradeopção pode "inteligentemente" manipular alterações no sistema de dependências. Isso inclui remover pacotes que não são mais necessários ou resolver conflitos entre pacotes que surgiram devido a alterações nas dependências.

janeiro
fonte
5
Embora isso seja preciso, acho que não responde à pergunta. Se temos uma opção "inteligente" que pode lidar com alterações de dependência e remover a desordem, por que nem sempre a usa?
ændrük
1
upgradetambém nunca adicionará novos pacotes que sejam necessários como dependências. From man apt-get: "sob nenhuma circunstância os pacotes atualmente instalados são removidos ou os pacotes ainda não instalados são recuperados e instalados" @ ændrük Só porque algo é "inteligente" não significa que ele sempre fará o que o usuário deseja (ou mesmo algo razoável) . Sempre que uma atualização do sistema remove um pacote, é bom para olhar sobre o que está fazendo antes de Y. pressionando
Elias Kagan
2

Os usuários podem ter vindo a confiar nos pacotes que foram instalados implicitamente devido à dependência de outros pacotes (instalados explicitamente). Portanto, o sistema de empacotamento não pode estar ciente de que um usuário / administrador deseja manter determinadas funcionalidades que, de outra forma, poderiam ser removidas via dist-upgrade.

user244474
fonte
-4

Não deve ser um problema para os usuários Win-Home sempre "dist-upgrade", mas se você estiver executando sistemas complexos, é melhor "nunca (realmente) alterar um sistema em execução" ... Mesmo que "não deva" haver nenhum problema , "poderia" haver probs - o que o impedirá! VOCÊ deve ser quem tem o direito de 2 decidir ;-)

Thorben Kaufmann
fonte
3
Should not be a problem for Win-Home Users to always "dist-upgrade"..por que é que ?
heemayl
1
Bem, digamos que você configure um servidor ubuntu, uma estação de trabalho para um ambiente produtivo: quando você, sempre e automatizado, faz o dist-upgrade, você provavelmente não consegue controlar quando recebe problemas - mesmo que não tenha tempo para resolver diretamente em Nesse momento, é feita uma atualização dist automática. Algumas configurações podem precisar de toque "humano" para porta. Foi o que expirei várias vezes. Quando você simplesmente trabalha em plataformas "Home" como é o Win-Home, por padrão, o usuário não está habilitado para controlar atualizações. Então você pode não incomodá-lo.
Thorben Kaufmann