Why does apt removes unwanted packages when giving * as suffix? [duplicate]

Solution 1:

If you don't know exactly what you are doing, you should not use:

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

as this can delete unintended packages and cause more problems than it solves. The package.* will match all packages (and their dependencies) containing the string package in their name. This is from man apt-get, somewhere at the line 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.

And this is from Regular Expressions/POSIX Basic Regular Expressions Wikibooks:

* Matches the preceding element zero or more times. For example, ab*c matches "ac", "abc", "abbbc", etc. [xyz]* matches "", "x", "y", "z", "zx", "zyx", "xyzzy", and so on. \(ab\)* matches "", "ab", "abab", "ababab", and so on.

Anyway, if you really want to run something like sudo apt-get remove package.* (or sudo apt-get remove packagey*, or sudo apt-get remove packagec* - all are in this case the same), first run it with -s (--simulate) option to see exactly what it will do (see man apt-get for more info).

Now, I think that you can solve your problem using the following two steps:

  1. Reinstall all the packages that you have removed

  2. Remove only ruby:

    sudo apt-get remove ruby
    

    Or, if you want to remove all packages starting their names with ruby:

    sudo apt-get remove ^ruby
    

    But better to simulate first with:

    apt-get -s remove ^ruby
    

Solution 2:

Apt-get works with regular expressions, which means that ruby* selects all packages that contain rub in their name. The correct way to remove all packages starting with ruby is:

apt-get remove ^ruby

Solution 3:

Try this command on terminal,

sudo grub-install /dev/sda

It will reinstall grub2 on your disk.

If you want to configure your grub then install grub-pc package.Try the below command to install grub-pc package,

sudo apt-get install grub-pc

Note: Install this package only if you installed Ubuntu in Legacy mode.