Warum entfernt apt unerwünschte Pakete, wenn * als Suffix angegeben wird?

Warum entfernt apt unerwünschte Pakete, wenn * als Suffix angegeben wird?

Ich habe ein sudo apt-get remove ruby*und dann sah ich, dass einige Grub-Pakete ebenfalls entfernt wurden, also habe ich diese Pakete wieder installiert, deren Entfernung laut Protokoll entfernt wurde

Ich habe Grub so eingestellt, dass es auf meinem /sda(im Allgemeinen, nicht auf irgendeiner Zahl) funktioniert, als ich es wieder installiert habe.

Sollte alles in Ordnung sein oder muss ich um mein System fürchten und planen, mehr Grub zu installieren/neu zu konfigurieren?

Und warum ist das passiert?

Antwort1

Wenn Sie nicht genau wissen, was Sie tun, sollten Sie Folgendes nicht verwenden:

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

da dies unbeabsichtigte Pakete löschen und mehr Probleme verursachen kann, als es löst. Das package.*wird alle Pakete (und ihre Abhängigkeiten) abgleichen, die die Zeichenfolge packagein ihrem Namen enthalten. Dies ist von man apt-get, irgendwo in Zeile 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.

Und das ist vonReguläre Ausdrücke/POSIX Grundlegende reguläre AusdrückeWikibooks:

* Stimmt null oder mehrmals mit dem vorhergehenden Element überein. Stimmt beispielsweise ab*cmit „ überein“Wechselstrom", "ABC", "abbb", usw. [xyz]*entspricht "", "X", "j", "z", "zx", "zyx", "xyzzy", und so weiter. \(ab\)*entspricht "", "ab", "abab", "Abonnieren", und so weiter.

sudo apt-get remove package.*Wenn Sie jedoch wirklich etwas wie (oder sudo apt-get remove packagey*, oder sudo apt-get remove packagec*- in diesem Fall sind alle gleich) ausführen möchten ,Führen Sie es zuerst mit der Option -s( --simulate) aus, um genau zu sehen, was es tut( man apt-getweitere Informationen finden Sie unter).

Ich denke, dass Sie Ihr Problem mit den folgenden zwei Schritten lösen können:

  1. Installieren Sie alle Pakete neu, die Sie entfernt haben

  2. Nur entfernen ruby:

    sudo apt-get remove ruby
    

    Oder wenn Sie alle Pakete entfernen möchten, deren Name mit folgendem beginnt ruby:

    sudo apt-get remove ^ruby
    

    Besser ist jedoch, zunächst mit folgendem zu simulieren:

    apt-get -s remove ^ruby
    

Antwort2

Apt-get arbeitet mit regulären Ausdrücken, d. h. es ruby*wählt alle Pakete aus, die enthaltenreibenin ihrem Namen. Der richtige Weg, alle Pakete zu entfernen, die mit beginnenRubinIst:

apt-get remove ^ruby

Antwort3

Versuchen Sie diesen Befehl im Terminal.

sudo grub-install /dev/sda

Dadurch wird Grub2 auf Ihrer Festplatte neu installiert.

Wenn Sie Ihr Grub konfigurieren möchten, installieren Sie grub-pcdas Paket. Versuchen Sie den folgenden Befehl, um grub-pcdas Paket zu installieren.

sudo apt-get install grub-pc

Notiz:Installieren Sie dieses Paket nur, wenn Sie Ubuntu im Legacy-Modus installiert haben.

verwandte Informationen