¿Por qué apt elimina paquetes no deseados al dar * como sufijo?

¿Por qué apt elimina paquetes no deseados al dar * como sufijo?

Hice un sudo apt-get remove ruby*y luego vi que algunos paquetes de grub también se estaban eliminando, así que volví a instalar esos paquetes cuyo registro mostraba que se habían eliminado.

Configuré grub para que funcionara en mi /sda(en general, no en cualquier número) cuando lo estaba instalando nuevamente.

¿Debería estar todo bien o debería temer por mi sistema y planear instalar/reconfigurar más grub?

¿Y por qué pasó esto?

Respuesta1

Si no sabes exactamente lo que estás haciendo, no debes utilizar:

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

ya que esto puede eliminar paquetes no deseados y causar más problemas de los que resuelve. Coincidirá package.*con todos los paquetes (y sus dependencias) que contengan la cadena packageen su nombre. Esto es de man apt-getalgún lugar de la línea 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.

Y esto es deExpresiones regulares/Expresiones regulares básicas POSIXWikilibros:

* Coincide con el elemento anterior cero o más veces. Por ejemplo, ab*ccoincide con "C.A", "a B C", "abbbc", etc. [xyz]*coincide con "", "X", "y", "z", "zx", "zix", "xyzzy", etc. \(ab\)*coincide con "", "ab", "abab", "ababab", etcétera.

De todos modos, si realmente desea ejecutar algo como sudo apt-get remove package.*(o sudo apt-get remove packagey*, o sudo apt-get remove packagec*, en este caso todos son iguales),primero ejecútelo con la opción -s( --simulate) para ver exactamente qué hará(ver man apt-getpara más información).

Ahora, creo que puedes resolver tu problema siguiendo los dos pasos siguientes:

  1. Reinstale todos los paquetes que ha eliminado

  2. Quitar sólo ruby:

    sudo apt-get remove ruby
    

    O, si desea eliminar todos los paquetes que comiencen sus nombres con ruby:

    sudo apt-get remove ^ruby
    

    Pero es mejor simular primero con:

    apt-get -s remove ^ruby
    

Respuesta2

Apt-get trabaja con expresiones regulares, lo que significa que ruby*selecciona todos los paquetes que contienenfrotaren su nombre. La forma correcta de eliminar todos los paquetes que comienzan conrubíes:

apt-get remove ^ruby

Respuesta3

Pruebe este comando en la terminal,

sudo grub-install /dev/sda

Reinstalará grub2 en su disco.

Si desea configurar su grub, instale grub-pcel paquete. Pruebe el siguiente comando para instalar grub-pcel paquete,

sudo apt-get install grub-pc

Nota:Instale este paquete solo si instaló Ubuntu en modo Legacy.

información relacionada