Vamos dividi-lo.
Em primeiro lugar, algumas notas sobre como apt-get install (e a maioria dos outros argumentos apt-get ) funciona:
-
Você pode inserir vários nomes de pacotes:
sudo apt-get install foobar spamegg
-
Os nomes dos pacotes são, na verdade, Expressão Regular Estendida (ERE) (Verificar man 7 regex ) padrões, portanto, um nome de pacote foo.bar significa qualquer nome de pacote que tenha uma substring que comece com foo e termine com bar caractere único entre foo e bar . f.*r significa qualquer nome de pacote que contenha uma subcadeia que tenha f e r com qualquer número de caracteres, ou seja, qualquer coisa entre eles. Para fazer a correspondência do nome do pacote inteiro, use tokens de início e fim, por exemplo %código%. Se você quiser que qualquer token Regex seja tratado literalmente, será necessário escapar do token com ^foo.bar$ , por exemplo. para tratar \ literalmente, você precisa:
sudo apt-get install 'foo\.bar'
Aqui, a cotação única é para evitar a interpretação da casca do padrão como um padrão de globbing, não necessário neste caso, mas seria necessário, e. para o padrão foo.bar se você tiver um arquivo no diretório atual chamado, por exemplo, foo.*bar .
-
Existe um problema na consideração do nome do pacote. Se houver algum pacote que corresponda ao padrão, o padrão será tratado literalmente e nenhuma interpretação Regex será feita. Por exemplo, para um padrão de pacote foo.bar , ele corresponderá ao pacote g++ literalmente, independentemente do token Regex g++ . Se não houver nenhum pacote chamado + nos repositórios definidos, ele será tratado como um padrão ERE.
Agora, você deu o comando:
sudo apt-get install g++ 5.0
Isso significa:
-
Você deseja instalar dois pacotes fornecidos, como g++ e g++
-
5.0 corresponde ao meta-pacote literal g++ como mencionado acima
-
A parte restante, g++ , tem um token Regex, 5.0 , ou seja, qualquer caractere único. Portanto, isso corresponderá a qualquer nome de pacote que contenha . . Assim, todos os pacotes que possuem a correspondência foram selecionados para serem instalados e, presumivelmente, 5<any_character>0 também foi selecionado no processo.
Presumivelmente, você quer instalar o virtualbox-5.0 versão g++ , então seria necessário fazer o seguinte ( já mencionado nesta resposta ); O meta-pacote, 5 , irá se referir ao último pacote menor disponível de g++-5 versão 5:
sudo apt-get install g++-5
Para procurar por quaisquer pacotes, dentro dos repositórios configurados, use g++ (usa ERE como apt-cache ):
apt-cache search 'g\+\+-[0-9]+'
Se você não quiser regex-it-it, use apt-get para rolar a lista um pouco maior:
apt-cache search g++ | less
Também antes de instalar qualquer coisa que você não tenha certeza, não use a opção less ( -y ) e teste-a primeiro com --assume-yes ( -s / --simulate ):
sudo apt-get install --dry-run foobar