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

4

Eu fiz um sudo apt-get remove ruby* e então vi que alguns pacotes do grub estavam sendo removidos também, então fui instalar 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 de volta.

Tudo deve estar ok ou devo temer pelo meu sistema e planejar instalar / reconfigurar mais do grub.

E por que isso aconteceu?

    
por diegoaguilar 09.03.2014 / 06:19

3 respostas

2

Experimente este comando no terminal

sudo grub-install /dev/sda

Ele irá reinstalar o grub2 no seu disco.

Se você quiser configurar seu grub, instale grub-pc package.Experimente o comando abaixo para instalar o grub-pc package,

sudo apt-get install grub-pc

Nota: Instale este pacote somente se você instalou o Ubuntu no modo Legacy.

    
por Avinash Raj 09.03.2014 / 06:22
8

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

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 soluciona. O package.* corresponderá a todos os pacotes (e suas dependências) contendo a string package em seu nome. Isso é 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 é de Expressões regulares / POSIX Basic Regular Expressions Wikibooks:

  

* Corresponde ao elemento anterior zero ou mais vezes. Por exemplo, ab*c corresponde a " ac ", " abc ", " abbbc ", etc. [xyz]* corresponde a "", " x "," y "," z "," zx "," zyx "," xyzzy ", e assim por diante. \(ab\)* corresponde a "", " ab ", " abab ", " 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 neste caso são iguais), primeiro execute com -s ( --simulate ) opção para ver exatamente o que vai fazer (veja man apt-get para 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
    
por Radu Rădeanu 09.03.2014 / 07:22
4

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

apt-get remove ^ruby
    
por Andrea Corbellini 02.09.2014 / 09:18

Tags