Utilisez plutôt sudo apt-get remove ^k3b
. Lorsque vous installez ou supprimez des packages, *
est souvent dangereux et rarement nécessaire. Si vous utilisez *
, vous devriez le citer, mais pas ne le rend pas plus sûr, car sa tendance à sélectionner beaucoup plus de paquets que vous ne le souhaitez est le résultat de la façon dont apt
et apt-get
l'interprète et pas un effet de extension de chemin .
- Même les utilisations sûres de
*
sont souvent inutile .
- Les utilisations non sécurisées sont brutales . La suppression de
k3b*
supprime tous les packages contenant k3
n'importe où dans son nom (et tous les paquets qui en dépendent). Ce n'est pas une faute de frappe - contenant k3
suffit, même sans b
, car b*
signifie "zéro ou plus b
s."
Lorsque vous exécutez apt
ou apt-get
avec l'action install
, remove
ou purge
, chacune L'argument suivant est d'abord 1 interprété comme le nom d'un package individuel. Si un paquet avec ce nom exact existe, l'action est effectuée pour cela.
S'il n'y en a pas, apt
et apt-get
vérifieront si l'argument contient l'un des expression régulière metacharacters 2 .
, ?
, +
, *
, |
, \[
, < a href="http://www.regular-expressions.info/anchors.html"> ^
ou $
. Sinon, c'est fait - aucun paquet n'a été trouvé.
S'il contient l'un de ces caractères, il est traité comme une expression régulière et associé à n'importe quelle partie de n'importe quel nom de package. Il ne doit pas nécessairement correspondre au nom entier. Comme d'autres l'ont déjà dit, *
dans une expression régulière ne signifie pas la même chose que *
dans un glob. ?
non plus. Dans une expression régulière:
-
*
permet à l'élément précédent d'apparaître autant de fois - y compris une seule fois ou pas du tout-- au lieu de exactement une fois.
-
?
rend l'élément précédent facultatif - c'est-à-dire qu'il lui permet d'apparaître zéro ou une fois. / li>
apt-get (8) ( man apt-get
) dit:
Si aucun paquet ne correspond à l'expression donnée et que l'expression contient
un des '.', '?' ou '*' alors il est supposé être un POSIX ordinaire
expression, et il est appliqué à tous les noms de package de la base de données.
Toutes les correspondances sont alors installées (ou supprimées). Notez que la correspondance est
fait par sous-chaîne donc 'lo. *' correspond à 'how-lo' et 'lower'. Si c'est
indésirable, ancre l'expression régulière avec un caractère '^' ou '$',
ou créer une expression régulière plus spécifique.
La page de manuel ne mentionne que .
, ?
et *
, mais elle est incomplète , sous la forme +
, |
, [
, ^
et $
suffit également à laisser apt-get
ou apt
interpréter le modèle comme une expression régulière. 3
Bien que vous puissiez faire correspondre n'importe quel nombre de caractères avec .*
- non juste *
- vous n'en avez besoin que s'il apparaît dans le middle de votre expression régulière. Étant donné que le modèle correspond à une sous-chaîne d’un nom de package, il est inutile à la fin (ou au début) du modèle.
La page de manuel mentionne ^
et $
. Celles-ci (en particulier ^
) sont essentielles à l'écriture de modèles sûrs et efficaces à utiliser avec les actions install
, remove
ou purge
dans apt
ou apt-get
.
-
^
ancre une expression régulière dans le début de la chaîne entière. ^k3b
sélectionne tous les packages dont les noms start avec k3b
.
-
$
ancre une expression régulière à la fin de la chaîne entière. k3b$
sélectionnerait tous les packages dont les noms end avec k3b
.
Par conséquent, vous pouvez utiliser cette commande pour supprimer les packages en toute sécurité:
sudo apt-get remove ^k3b
Enfin, dans le cas spécifique que vous avez mentionné, vous pourriez aussi bien passer les deux noms vous-même:
sudo apt-get remove k3b k3b-data
Alors vous évitez toute cette complexité! (Bien que l'ancrage avec ^
soit simple une fois que vous y êtes habitué) ou utilisez extension d'accolade , que votre shell développe dans la commande ci-dessus:
sudo apt-get remove k3b{,-data}
1 Il existe deux exceptions à cela: (a) certaines options (par exemple, -f
, --purge
) sont reconnus, et (b) certains caractères de ponctuation apparaissant à la fin d'un argument qui serait autrement considéré comme un nom de package pour effectuer l'action peuvent être utilisés pour modifier ce qui est fait (par exemple, sudo apt install ubuntu-desktop^
installe la tâche plutôt que le paquet, et quand ^
apparaît à la fin ).
2 D'autres métacaractères d'expression régulière existent. Par exemple, \
est pris en charge par tous les dialectes des expressions régulières et couramment utilisés. .
, ?
, +
, *
, |
, [
, ^
et $
se trouvent être les métacaractères que les développeurs APT ont décidé d'interpréter comme une expression régulière ( après résolution comme un package exact nommé a échoué).
3 Le moyen le plus simple de le vérifier est de simuler l’installation ou la suppression avec un tel modèle, en utilisant l’option -s
décrite ci-dessus. Par exemple, l'exécution de apt -s install ^virtualbox
indique que sudo apt install ^virtualbox
aurait pour effet d'essayer d'installer tous les packages connus du gestionnaire de packages dont le nom commence par virtualbox
. Toutefois, ce comportement peut également être vérifié en examinant le code source . Vérifiez la fonction CacheSetHelper::PackageFromRegEx
dans cacheset.cc
.