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

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

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

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

Все ли будет в порядке или мне следует опасаться за свою систему и планировать установку/перенастройку большего количества grub?

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

решение1

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

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Викиучебники:

* Соответствует предыдущему элементу ноль или более раз. Например, ab*cсоответствует "переменный ток", "азбука", "abbbc", и т.д. [xyz]*соответствует "", "Икс", "у", "з", "zx", "zyx", "иксиззи", и так далее. \(ab\)*совпадения "", "аб", "абаб", "абабаб", и так далее.

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

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

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

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

    sudo apt-get remove ruby
    

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

    sudo apt-get remove ^ruby
    

    Но лучше сначала провести симуляцию с помощью:

    apt-get -s remove ^ruby
    

решение2

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

apt-get remove ^ruby

решение3

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

sudo grub-install /dev/sda

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

Если вы хотите настроить grub, то установите grub-pcпакет. Попробуйте выполнить следующую команду для установки grub-pcпакета:

sudo apt-get install grub-pc

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

Связанный контент