Usa sudo apt-get remove ^k3b
invece. Quando installi o rimuovi pacchetti, *
è spesso pericoloso e raramente necessario. Se lo usi *
, dovresti citarlo, ma ciò non lo rende più sicuro, perché la sua tendenza a selezionare molti più pacchetti di quelli che intendi è il risultato del modo apt
e l' apt-get
interpretazione e non un effetto dell'espansione del nome percorso .
- Anche gli usi sicuri di questi
*
sono spesso inutili .
- Gli usi non sicuri sono brutali . La rimozione
k3b*
rimuove ogni pacchetto che contiene k3
ovunque nel suo nome (e ogni pacchetto che dipende da tale pacchetto). Questo non è un refuso - contenente k3
è sufficiente, anche senza il b
, perché b*
significa "zero o più b
s".
Quando si esegue apt
o apt-get
con la install
, remove
o purge
azione, ogni argomento successivo viene dapprima 1 interpretato come il nome di un singolo pacchetto. Se esiste un pacchetto con quel nome esatto, l'azione viene eseguita per esso.
Se non v'è tale pacchetto, apt
e apt-get
si controlla se l'argomento contiene una qualsiasi delle comuni espressioni regolari metacaratteri 2 .
, ?
, +
,*
, |
, \[
, ^
, o$
. In caso contrario, è fatto: non è stato trovato alcun pacchetto.
Se non contiene alcuna di quei personaggi, allora è considerato come un'espressione regolare e confrontata con qualsiasi parte di qualsiasi nome del pacchetto. Non deve corrispondere al nome intero. Come altri hanno già detto, *
in un'espressione regolare non significa la stessa cosa *
di un glob. ?
neanche. In un'espressione regolare:
*
consente all'elemento precedente di apparire un numero qualsiasi di volte, incluso solo una volta o per niente, anziché esattamente una volta.
?
rende facoltativo l' elemento precedente , ovvero consente di apparire zero o una volta.
apt-get (8) ( man apt-get
) dice:
Se nessun pacchetto corrisponde all'espressione data e l'espressione contiene uno di '.', '?' o '*' quindi si presume che sia un'espressione regolare POSIX e viene applicato a tutti i nomi di pacchetto nel database. Eventuali corrispondenze vengono quindi installate (o rimosse). Si noti che la corrispondenza viene eseguita dalla sottostringa in modo che "lo. *" Corrisponda a "how-lo" e "minimo". Se ciò non è desiderato, ancorare l'espressione regolare con un carattere '^' o '$' o creare un'espressione regolare più specifica.
La manpage menziona solo .
, ?
e *
, ma è incompleta , come +
, |
, [
, ^
, e $
sono anche sufficienti per consentire apt-get
o apt
interpretare il modello come un'espressione regolare. 3
Anche se puoi abbinare un numero qualsiasi di caratteri con .*
- non solo - hai*
bisogno di questo solo se apparirebbe nel mezzo della tua espressione regolare. Poiché il modello è abbinato a qualsiasi sottostringa del nome di un pacchetto, è inutile alla fine (o all'inizio) del modello.
La manpage menziona ^
e$
. Questi (in particolare ^
) sono la chiave per la scrittura di sicurezza, i modelli efficienti per l'utilizzo con i install
, remove
o purge
azioni apt
o apt-get
.
^
fissa un'espressione regolare all'inizio dell'intera stringa. ^k3b
seleziona tutti i pacchetti i cui nomi iniziano con k3b
.
$
ancora un'espressione regolare alla fine dell'intera stringa. k3b$
selezionerebbe tutti i pacchetti i cui nomi finiscono con k3b
.
Pertanto è possibile utilizzare questo comando per rimuovere in sicurezza i pacchetti:
sudo apt-get remove ^k3b
Infine, nel caso specifico che hai citato, potresti anche passare tu stesso entrambi i nomi:
sudo apt-get remove k3b k3b-data
Quindi eviti tutta questa complessità! (Anche se l'ancoraggio con ^
è semplice una volta che ci sei abituato.) O usa l' espansione del controvento , che la tua shell espande nel comando sopra:
sudo apt-get remove k3b{,-data}
1 Ci sono due eccezioni a questo: (a) alcune opzioni (ad es. -f
, --purge
) Sono riconosciute, e (b) alcuni caratteri di punteggiatura che appaiono alla fine di un argomento che altrimenti verrebbero presi come nome del pacchetto per eseguire l'azione usato per modificare ciò che viene fatto (ad esempio, sudo apt install ubuntu-desktop^
installa l' attività anziché il pacchetto e quando ^
appare alla fine).
2 Esistono altri metacaratteri di espressioni regolari. Ad esempio, \
è supportato da tutti i dialetti delle espressioni regolari e comunemente usato. .
, ?
, +
, *
, |
, [
, ^
, E $
capita di essere i metacaratteri gli sviluppatori hanno deciso di APT farebbe scattare l'interpretazione come un'espressione regolare (dopo la risoluzione come un pacchetto di nome esatto non è riuscita).
3 Il modo più semplice per verificarlo è simulare l'installazione o la rimozione con tale modello, utilizzando l' -s
opzione come descritto sopra. Ad esempio, l'esecuzione apt -s install ^virtualbox
mostra che sudo apt install ^virtualbox
avrebbe l'effetto di tentare di installare tutti i pacchetti che il gestore pacchetti conosce sul nome con cui inizia virtualbox
. Tuttavia, questo comportamento può essere verificato anche esaminando il codice sorgente . Controlla la CacheSetHelper::PackageFromRegEx
funzione in cacheset.cc
.