為什麼 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.*包含該字串的所有套件(及其依賴項) 。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匹配“交流電“,”ABC“,”阿伯克", 等[xyz]*匹配 "", "X“,”y“,”z“,”zx“,”茲克斯“,”XYZY”,等等。\(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-pcgrub-pc

sudo apt-get install grub-pc

筆記:只有在您在傳統模式下安裝 Ubuntu 時才安裝此軟體套件。

相關內容