Utilice sudo apt-get remove ^k3b
au lieu de cela. Lorsque vous installez ou supprimez des paquets, *
est souvent dangereuse et rarement nécessaire. Si vous utilisez *
Il faut le citer, mais cela n'a pas d'importance. pas le rendre 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 il est utilisé. apt
y apt-get
l'interpréter et pas un effet de expansion du chemin d'accès .
- Même les utilisations sûres de
*
sont souvent inutile .
- Utilisations dangereuses sont brutales . Suppression
k3b*
supprime tous les paquets qui contiennent k3
n'importe où dans son nom (et tout paquet qui dépend d'un tel paquet). Il ne s'agit pas d'une faute de frappe : contenir k3
est suffisante, même sans le b
parce que b*
signifie "zéro ou plusieurs b
s."
Lorsque vous exécutez apt
ou apt-get
avec le install
, remove
ou purge
chaque argument suivant est d'abord 1 interprété comme le nom d'un paquet individuel. S'il existe un paquet portant ce nom exact, l'action est exécutée pour ce paquet.
S'il n'existe pas de paquet de ce type, apt
y apt-get
vérifiera si l'argument contient l'un des éléments suivants expression régulière métacaractères 2 .
, ?
, +
, *
, |
, [\[
](http://www.regular-expressions.info/charclass.html) , ^
ou $
. Si ce n'est pas le cas, c'est terminé - aucun paquet n'a été trouvé.
S'il fait contient l'un de ces caractères, elle est traitée comme une expression régulière et comparée à l'expression toute partie de n'importe quel nom de paquet. Il n'est pas nécessaire qu'il corresponde au nom entier. Comme d'autres l'ont dit, *
dans une expression régulière ne signifie pas la même chose que *
en un seul bloc. ?
ne le fait pas non plus. Dans une expression régulière :
-
*
permet d'afficher l'élément précédent un nombre quelconque de fois --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'elle 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 l'expression contient l'un des éléments suivants : '.', '?' ou '*', on suppose qu'il s'agit d'une expression régulière POSIX et elle est appliquée à tous les noms de paquetages de la base de données. Tous les paquets correspondants sont alors installés (ou supprimés). Notez que la correspondance est par sous-chaîne, donc 'lo.*' correspond à 'how-lo' et 'lowest'. Si l'expression est indésirable, 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 ne mentionne que .
, ?
et *
pero il est incomplet , comme +
, |
, [
, ^
et $
sont également suffisants pour que apt-get
ou apt
interprète le motif comme une expression régulière. 3
Bien que vous puissiez faire correspondre n'importe quel nombre de caractères avec .*
-- pas juste *
--Vous n'avez besoin de cette information que si elle apparaît dans la liste de contrôle. milieu de votre expression régulière. Comme le motif est comparé à n'importe quelle sous-chaîne du nom d'un paquet, il est inutile à la fin (ou au début) du motif.
La page de manuel mentionne ^
y $
. Ceux-ci (en particulier les ^
) sont essentiels pour écrire des modèles sûrs et efficaces à utiliser avec le programme install
, remove
ou purge
actions en apt
ou apt-get
.
-
^
ancre une expression régulière dans le champ début de l'ensemble de la chaîne. ^k3b
sélectionne tous les paquets dont les noms commencer con k3b
.
-
$
ancre une expression régulière dans le champ fin de l'ensemble de la chaîne. k3b$
sélectionnerait tous les paquets dont les noms fin con k3b
.
Vous pouvez donc utiliser cette commande pour supprimer les paquets en toute sécurité :
sudo apt-get remove ^k3b
Enfin, dans le cas spécifique que vous avez mentionné, vous pourriez tout aussi bien transmettre les deux noms vous-même :
sudo apt-get remove k3b k3b-data
Vous évitez ainsi toute cette complexité ! (Bien que l'ancrage avec ^
est simple une fois que l'on s'y est habitué). Ou utilisez expansion de l'orthèse que votre Shell développe en la commande ci-dessus :
sudo apt-get remove k3b{,-data}
1 Il existe deux exceptions à cette règle : <em>(a) </em>certaines options (par exemple, <code>-f</code> , <code>--purge</code> ) sont reconnues, et <em>(b) </em>certains caractères de ponctuation apparaissant au <em>fin </em>d'un argument qui serait autrement pris comme nom de paquet pour effectuer l'action peut être utilisé pour modifier ce qui est fait (par exemple, <code>sudo apt install ubuntu-desktop^</code> installe le <a href="https://askubuntu.com/a/249373/22949">tâche </a>plutôt que le paquet, et lorsque <code>^</code> apparaît à la fin).
2 Il existe d'autres métacaractères d'expression régulière. Il existe d'autres métacaractères d'expression régulière, <code>\</code> est supporté par tous les dialectes d'expressions régulières et est couramment utilisé. <code>.</code> , <code>?</code> , <code>+</code> , <code>*</code> , <code>|</code> , <code>[</code> , <code>^</code> et <code>$</code> se trouvent être les métacaractères dont les développeurs d'APT ont décidé qu'ils déclencheraient l'interprétation en tant qu'expression régulière (après l'échec de la résolution en tant que nom de paquet exact).
3 La façon la plus simple de le vérifier est de simuler l'installation ou la suppression d'un tel modèle, en utilisant la fonction <code>-s</code> comme décrit ci-dessus. Par exemple, en exécutant <code>apt -s install ^virtualbox</code> montre que <code>sudo apt install ^virtualbox</code> aurait pour effet de tenter d'installer tous les paquets dont le gestionnaire de paquets a connaissance et dont le nom commence par <code>virtualbox</code> . Toutefois, ce comportement peut également être vérifié en examinant les éléments suivants <a href="https://git.launchpad.net/apt/tree/?h=1.2.y" rel="nofollow noreferrer">le code source </a>. Vérifier les <code>CacheSetHelper::PackageFromRegEx</code> fonction dans <a href="https://git.launchpad.net/apt/tree/apt-pkg/cacheset.cc?h=1.2.y" rel="nofollow noreferrer"><code>cacheset.cc</code></a> .