为什么 apt 在给出 * 作为后缀时会删除不需要的软件包?

为什么 apt 在给出 * 作为后缀时会删除不需要的软件包?

我做了一个sudo apt-get remove ruby*,然后我发现一些 grub 包也被删除了,所以我去重新安装那些日志显示已被删除的包

/sda当我重新安装时,我设置 grub 在我的(一般来说,不是任何号码)上工作。

一切都应该没问题吗,或者我应该担心我的系统并计划安装/重新配置更多的 grub。

并且,为什么会发生这种情况?

答案1

如果您不清楚自己在做什么,则不应使用:

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

因为这可能会删除不需要的包,导致的问题比解决的问题还多。将匹配名称中package.*包含字符串的所有包(及其依赖项) 。这是来自,位于第 110 行的某处:packageman apt-get

       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匹配“交流电“,”美国广播公司“,”艾比克" 等[xyz]*匹配 "", "X“,”“,”“,”陣陣“,”韋克斯“,”討厭" 等等。\(ab\)*匹配 "", "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 时才安装此软件包。

相关内容