Почему apt удаляет нежелательные пакеты при предоставлении * в качестве суффикса?

Я сделал sudo apt-get remove ruby* а затем увидел, что некоторые пакеты grub также удаляются, поэтому я пошел на установку тех пакетов, которые, как показал журнал, удалили

Я установил grub для работы с моим /sda (вообще, а не с любым номером) при установке обратно.

Должно быть все нормально, или я должен бояться за свою систему и планировать установку / реконфигурирование большего количества grub.

И почему это произошло?

Попробуйте эту команду на терминале,

 sudo grub-install /dev/sda 

Он переустановит grub2 на ваш диск.

Если вы хотите настроить grub, установите пакет grub-pc Попробуйте выполнить команду ниже, чтобы установить пакет grub-pc ,

 sudo apt-get install grub-pc 

Примечание. Установите этот пакет, только если вы установили Ubuntu в режиме Legacy.

Если вы не знаете, что именно вы делаете, вы не должны использовать:

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

так как это может удалить непреднамеренные пакеты и вызвать больше проблем, чем решает. package.* Будет соответствовать всем пакетам (и их зависимостям), содержащим package строк в их имени. Это от man apt-get , где-то на линии 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. 

И это из регулярных выражений / POSIX Basic Regular Expressions Wikibooks:

* Соответствует предыдущему элементу ноль или более раз. Например, ab*c соответствует « ac », « abc », « abbbc » и т. Д. [xyz]* соответствует «», « x », « y », « z », « zx », « zyx », xyzzy "и т. д. \(ab\)* соответствует "", " ab ", " abab ", " ababab " и т. д.

В любом случае, если вы действительно хотите запустить что-то вроде sudo apt-get remove package.* (Или sudo apt-get remove packagey* или sudo apt-get remove packagec* – все в этом случае одинаковы), сначала запустите его с помощью -s ( --simulate ), чтобы увидеть, что именно будет (см. man apt-get для man apt-get дополнительной информации).

Теперь я думаю, что вы можете решить свою проблему, выполнив следующие два действия:

  1. Переустановите все удаленные вами пакеты

  2. Удалить только ruby :

     sudo apt-get remove ruby 

    Или, если вы хотите удалить все пакеты, начиная их имена с ruby :

     sudo apt-get remove ^ruby 

    Но лучше сначала имитировать:

     apt-get -s remove ^ruby 

Apt-get работает с регулярными выражениями, что означает, что ruby* выбирает все пакеты, содержащие rub в их имени. Правильный способ удаления всех пакетов, начиная с ruby, – это:

 apt-get remove ^ruby