Por que o apt remove pacotes indesejados ao fornecer * como sufixo?

Por que o apt remove pacotes indesejados ao fornecer * como sufixo?

Eu fiz um sudo apt-get remove ruby*e então vi que alguns pacotes grub também estavam sendo removidos, então instalei de volta os pacotes que o log mostrou ter removido

Eu configurei o grub para funcionar no meu /sda(em geral, não em qualquer número) quando estava instalando novamente.

Tudo deve ficar bem ou devo temer pelo meu sistema e planejar instalar/reconfigurar mais o grub.

E por que isso aconteceu?

Responder1

Se você não sabe exatamente o que está fazendo, não deve usar:

sudo apt-get remove package.*
#                          ⤷ or any other character in the place of dot

pois isso pode excluir pacotes não intencionais e causar mais problemas do que soluções. O package.*irá corresponder a todos os pacotes (e suas dependências) contendo a string packageem seus nomes. Isto é de man apt-get, em algum lugar na linha 110:

       If no package matches the given expression and the expression
       contains one of '.', '?' or '*' then it is assumed to be a POSIX
       regular expression, and it is applied to all package names in the
       database. Any matches are then installed (or removed). Note that
       matching is done by substring so 'lo.*' matches 'how-lo' and
       'lowest'. If this is undesired, anchor the regular expression with
       a '^' or '$' character, or create a more specific regular
       expression.

E isso é deExpressões Regulares/Expressões Regulares Básicas POSIXWikilivros:

* Corresponde ao elemento anterior zero ou mais vezes. Por exemplo, ab*ccorresponde a "ac","abc","abbbc", etc. [xyz]*corresponde a "", "x","sim","z","zx","zyx","xyzzy", e assim por diante. \(ab\)*corresponde a "", "ab","aba","ababab", e assim por diante.

De qualquer forma, se você realmente deseja executar algo como sudo apt-get remove package.*(ou sudo apt-get remove packagey*, ou sudo apt-get remove packagec*- todos são iguais neste caso),primeiro execute-o com a opção -s( --simulate) para ver exatamente o que ele fará(veja man apt-getpara mais informações).

Agora, acho que você pode resolver seu problema usando as duas etapas a seguir:

  1. Reinstale todos os pacotes que você removeu

  2. Remover apenas ruby:

    sudo apt-get remove ruby
    

    Ou, se você quiser remover todos os pacotes que iniciam seus nomes com ruby:

    sudo apt-get remove ^ruby
    

    Mas é melhor simular primeiro com:

    apt-get -s remove ^ruby
    

Responder2

O Apt-get funciona com expressões regulares, o que significa que ruby*seleciona todos os pacotes que contêmesfregarem seu nome. A maneira correta de remover todos os pacotes começando comrubié:

apt-get remove ^ruby

Responder3

Experimente este comando no terminal,

sudo grub-install /dev/sda

Ele irá reinstalar o grub2 no seu disco.

Se você deseja configurar seu grub, instale grub-pco pacote. Tente o comando abaixo para instalar grub-pco pacote,

sudo apt-get install grub-pc

Observação:Instale este pacote somente se você instalou o Ubuntu no modo Legacy.

informação relacionada