Verwenden Sie sudo apt-get remove ^k3b
stattdessen. Wenn Sie Pakete installieren oder entfernen, *
ist dies häufig gefährlich und wird selten benötigt. Wenn Sie es verwenden *
, sollten Sie es zitieren, aber das macht es nicht sicherer, da seine Tendenz, weit mehr Pakete auszuwählen, als Sie beabsichtigen, das Ergebnis der Art apt
und Weise und der apt-get
Interpretation ist und keine Auswirkung der Pfadnamenerweiterung .
- Auch sichere Verwendungen
*
sind oftmals nicht erforderlich .
- Unsichere Verwendungen sind brutal . Durch das Entfernen
k3b*
wird jedes Paket entfernt, das k3
irgendwo in seinem Namen enthalten ist (und jedes Paket, das von einem solchen Paket abhängt). Das ist kein Tippfehler - k3
es reicht aus, auch ohne das b
, denn es b*
bedeutet "null oder mehr b
s".
Wenn Sie laufen apt
oder apt-get
mit dem install
, remove
oder purge
Action, jede nachfolgende Argument ist zunächst 1 als Name eines einzelnen Pakets interpretiert. Wenn ein Paket mit diesem genauen Namen vorhanden ist, wird die Aktion für dieses Paket ausgeführt.
Wenn es kein solches Paket, apt
und apt-get
prüft , ob das Argument eine der gemeinsamen enthält regulären Ausdruck Metazeichen 2 .
, ?
, +
,*
, |
, \[
, ^
, oder$
. Wenn nicht, ist es geschafft - es wurde kein Paket gefunden.
Wenn es nicht eine dieser Zeichen enthält, dann wird er als regulärer Ausdruck behandelt und gegen abgestimmt jeden Teil eines Paketnamen. Es muss nicht mit dem ganzen Namen übereinstimmen. Wie andere gesagt haben, bedeutet *
ein regulärer Ausdruck nicht dasselbe wie *
ein Globus. ?
tut es auch nicht. In einem regulären Ausdruck:
*
Ermöglicht, dass das vorherige Element beliebig oft angezeigt wird - einschließlich nur einmal oder überhaupt nicht - und nicht genau einmal.
?
macht das vorherige Element optional - das heißt, es lässt zu, dass es null oder einmal erscheint.
apt-get (8) ( man apt-get
) sagt:
Wenn kein Paket mit dem angegebenen Ausdruck übereinstimmt und der Ausdruck eines von '.', '?' Enthält oder '*' wird als regulärer POSIX-Ausdruck angenommen und auf alle Paketnamen in der Datenbank angewendet. Alle Übereinstimmungen werden dann installiert (oder entfernt). Beachten Sie, dass der Abgleich durch einen Teilstring erfolgt, sodass "lo. *" Mit "how-lo" und "low" übereinstimmt. Wenn dies unerwünscht ist, verankern Sie den regulären Ausdruck mit einem '^' oder '$' Zeichen oder erstellen Sie einen spezifischeren regulären Ausdruck.
Die Manpage nur erwähnt .
, ?
und *
, aber es ist unvollständig , wie +
, |
, [
, ^
, und $
ist auch ausreichend zu lassen apt-get
oder apt
das Muster als regulärer Ausdruck interpretiert. 3
Obwohl Sie eine beliebige Anzahl von Zeichen mit .*
- nicht nur - *
übereinstimmen können, benötigen Sie dies nur, wenn es in der Mitte Ihres regulären Ausdrucks erscheinen würde. Da das Muster mit einer beliebigen Teilzeichenfolge eines Paketnamens abgeglichen wird, ist es am Ende (oder am Anfang) des Musters sinnlos.
Die Manpage erwähnt ^
und$
. Diese (vor allem ^
) sind die Schlüssel zum Schreiben von sicheren, effizienten Mustern für die Verwendung mit den install
, remove
oder purge
Aktionen in apt
oder apt-get
.
^
Verankert einen regulären Ausdruck am Anfang der gesamten Zeichenfolge. ^k3b
wählt alle Pakete , deren Namen beginnen mit k3b
.
$
Verankert einen regulären Ausdruck am Ende der gesamten Zeichenfolge. k3b$
würde wählen Sie alle Pakete , deren Namen enden mit k3b
.
Daher können Sie diesen Befehl verwenden, um die Pakete sicher zu entfernen:
sudo apt-get remove ^k3b
Schließlich können Sie in dem von Ihnen erwähnten speziellen Fall auch beide Namen selbst übergeben:
sudo apt-get remove k3b k3b-data
Dann vermeiden Sie diese Komplexität! (Obwohl das Verankern mit ^
einfach ist, wenn Sie es gewohnt sind.) Oder verwenden Sie die Klammererweiterung , die Ihre Shell zu dem obigen Befehl erweitert:
sudo apt-get remove k3b{,-data}
1 Es gibt zwei Ausnahmen: (a) einige Optionen (zB -f
, --purge
) werden erkannt, und (b) einige Satzzeichen auf dem erscheinende Ende eines Arguments , das sonst als Paketnamen genommen würde , um die Aktion auszuführen , kann sein wird verwendet, um zu ändern, was getan wird (z. B. sudo apt install ubuntu-desktop^
installiert die Task anstelle des Pakets und wann ^
am Ende angezeigt wird).
2 Andere Metazeichen für reguläre Ausdrücke sind vorhanden. Zum Beispiel \
wird von allen Dialekten regulärer Ausdrücke unterstützt und häufig verwendet. .
, ?
, +
, *
, |
, [
, ^
, Und $
nur zufällig die Metazeichen werden der APT - Entwickler als regulärer Ausdruck auslösen würde Interpretation entschieden (nach Auflösung als exaktes Paket mit dem Namen ausgefallen ist ).
3 Der einfachste Weg, dies zu überprüfen, besteht darin, die Installation oder Deinstallation mit einem solchen Muster zu simulieren. Verwenden Sie dazu die -s
oben beschriebene Option. Wenn Sie beispielsweise apt -s install ^virtualbox
Shows sudo apt install ^virtualbox
ausführen, wird versucht, jedes Paket zu installieren, über das der Paketmanager weiß, mit wem der Name beginnt virtualbox
. Dieses Verhalten kann jedoch auch durch Untersuchen des Quellcodes überprüft werden . Überprüfen Sie die CacheSetHelper::PackageFromRegEx
Funktion in cacheset.cc
.