Utilisez à la sudo apt-get remove ^k3b
place. Lorsque vous installez ou supprimez des paquetages, cela *
est souvent dangereux et rarement nécessaire. Si vous utilisez *
, vous devriez citer, mais cela ne pas le rendre plus sûr, parce que sa tendance à choisir des paquets beaucoup plus que vous avez l' intention est le résultat de la manière apt
et l' apt-get
interpréter et non un effet de l' expansion du chemin .
- Même les utilisations sécurisées
*
sont souvent inutiles .
- Les utilisations dangereuses sont brutales . Supprimer
k3b*
supprime chaque paquet qui contient k3
n'importe où dans son nom (et chaque paquet qui dépend d'un tel paquet). Ce n'est pas une faute de frappe - contenir k3
est suffisant, même sans le b
, parce que b*
signifie "zéro ou plus de b
s".
Lorsque vous exécutez apt
ou apt-get
avec le install
, remove
ou l' purge
action, chaque argument ultérieur est d' abord 1 interprété comme le nom d'un emballage individuel. S'il existe un package portant exactement ce nom, l'action est effectuée sur celui-ci.
S'il n'y a pas tel paquet, apt
et apt-get
vérifiera si l'argument contient l' une des communes expression régulière métacaractères 2 .
, ?
, +
,*
, |
, \[
, ^
ou$
. Sinon, c'est fait - aucun paquet n'a été trouvé.
Si elle ne contient aucun de ces caractères, il est traité comme une expression régulière et en correspondance avec une partie d'un nom de package. Il ne doit pas nécessairement correspondre au nom complet. Comme d'autres l'ont déjà dit, l' *
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 que nécessaire - y compris une seule fois ou pas du tout - au lieu d'une seule fois.
?
rend l’élément précédent facultatif - c’est-à-dire qu’il lui permet d’apparaître zéro ou une fois.
apt-get (8) ( man apt-get
) dit:
Si aucun paquet ne correspond à l'expression donnée et que celle-ci contient l'un des '.', '?' ou '*' alors il est supposé être une expression régulière POSIX et il est appliqué à tous les noms de packages de la base de données. Toutes les correspondances sont ensuite installées (ou supprimées). Notez que la correspondance est effectuée par sous-chaîne, donc 'lo. *' Correspond à 'how-lo' et à 'lower'. Si cela n'est pas souhaité, ancrez l'expression régulière avec un caractère '^' ou '$' ou créez une expression régulière plus spécifique.
La page de manuel mentionne seulement .
, ?
et *
, mais il est incomplet , comme +
, |
, [
, ^
et $
sont également suffisantes pour laisser apt-get
ou apt
interpréter le motif comme une expression régulière. 3
Bien que vous puissiez faire correspondre un nombre quelconque de caractères avec .*
- pas seulement - vous n'en*
avez besoin que s'il apparaît au milieu de votre expression régulière. Comme le modèle correspond à n'importe quelle 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$
. Ceux - ci ( en particulier ^
) sont essentielles à l' écriture des motifs sécuritaires et efficaces pour une utilisation avec les install
, remove
ou purge
actions apt
ou apt-get
.
^
ancre une expression régulière au début de la chaîne entière. ^k3b
sélectionne tous les paquets dont le nom commence par k3b
.
$
ancre une expression régulière à la fin de la chaîne entière. k3b$
sélectionnerait tous les paquets dont le nom se termine par 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 donner 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 le développement d'accolade , que votre shell développe dans la commande ci-dessus:
sudo apt-get remove k3b{,-data}
1 Il y a 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 exécuter l'action peut être utilisé 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 Il existe d'autres métacaractères d'expression régulière. Par exemple, \
est pris en charge par tous les dialectes d'expressions régulières et couramment utilisés. .
, ?
, +
, *
, |
, [
, ^
, Et $
Il se trouve que les métacaractères les développeurs APT ont décidé déclencherait l' interprétation comme une expression régulière (après résolution comme un paquet exact nommé a échoué).
3 Le moyen le plus simple de vérifier cela consiste à simuler l'installation ou la suppression à l'aide d'un tel motif, en utilisant l' -s
option décrite ci-dessus. Par exemple, l'exécution de apt -s install ^virtualbox
shows qui sudo apt install ^virtualbox
aurait pour effet d'essayer d'installer chaque paquet connu du gestionnaire de paquets dont le nom commence par virtualbox
. Toutefois, ce comportement peut également être vérifié en examinant le code source . Vérifiez la CacheSetHelper::PackageFromRegEx
fonction dans cacheset.cc
.