Use em sudo apt-get remove ^k3b
vez disso. Quando você instala ou remove pacotes, *
geralmente é perigoso e raramente necessário. Se você usar *
, deve citá-lo, mas isso não o torna mais seguro, porque a tendência de selecionar muito mais pacotes do que você pretende é o resultado do caminho apt
e apt-get
interpretá-lo, e não um efeito da expansão do nome do caminho .
- Mesmo usos seguros de
*
são muitas vezes desnecessários .
- Usos inseguros são brutais . A remoção
k3b*
remove todos os pacotes que contêm k3
qualquer lugar em seu nome (e todos os pacotes que dependem desse pacote). Isso não é um erro de digitação - k3
é suficiente, mesmo sem o b
, porque b*
significa "zero ou mais b
s".
Quando você executa apt
ou apt-get
com o install
, remove
ou purge
ação, cada argumento posterior é o primeiro 1 interpretado como o nome de um pacote individual. Se um pacote com esse nome exato existir, a ação será executada para ele.
Se não existe tal pacote, apt
e apt-get
irá verificar se o argumento contém qualquer um dos comuns de expressões regulares metacharacters 2 .
, ?
, +
,*
, |
, \[
, ^
, ou$
. Caso contrário, está feito - nenhum pacote foi encontrado.
Se ele não contém nenhum desses personagens, então ele é tratado como uma expressão regular e comparado com qualquer parte de qualquer nome do pacote. Não precisa corresponder ao nome inteiro. Como outros já disseram, *
em uma expressão regular não significa a mesma coisa que *
em uma glob. ?
também não. Em uma expressão regular:
*
permite que o item anterior apareça inúmeras vezes - incluindo apenas uma vez ou não - em vez de exatamente uma vez.
?
torna o item anterior opcional - ou seja, permite que ele apareça zero ou uma vez.
O apt-get (8) ( man apt-get
) diz:
Se nenhum pacote corresponder à expressão fornecida e a expressão contiver um de '.', '?' ou '*', assume-se que seja uma expressão regular POSIX e é aplicada a todos os nomes de pacotes no banco de dados. Todas as correspondências são instaladas (ou removidas). Observe que a correspondência é feita por substring, então 'lo. *' Corresponde a 'how-lo' e 'lower'. Se isso não for desejado, ancore a expressão regular com um caractere '^' ou '$' ou crie uma expressão regular mais específica.
A manpage apenas menciona .
, ?
e *
, mas é incompleta , como +
, |
, [
, ^
, e $
também são suficientes para deixar apt-get
ou apt
interpretar o padrão como uma expressão regular. 3
Embora você possa combinar qualquer número de caracteres com .*
- e não apenas -, você *
só precisa disso se ele aparecer no meio da sua expressão regular. Como o padrão é comparado com qualquer substring de um nome de pacote, não faz sentido o final (ou o começo) do padrão.
A página de manual menciona ^
e$
. Estes (especialmente ^
) são a chave para escrever padrões seguras e eficientes para uso com os install
, remove
ou purge
ações em apt
ou apt-get
.
^
ancora uma expressão regular no início de toda a cadeia. ^k3b
seleciona todos os pacotes cujos nomes começam com k3b
.
$
ancora uma expressão regular no final de toda a cadeia. k3b$
selecionaria todos os pacotes cujos nomes terminam com k3b
.
Portanto, você pode usar este comando para remover com segurança os pacotes:
sudo apt-get remove ^k3b
Finalmente, no caso específico que você mencionou, você também pode apenas passar os dois nomes:
sudo apt-get remove k3b k3b-data
Então você evita toda essa complexidade! (Embora a ancoragem com ^
seja simples quando você estiver acostumado a isso.) Ou use expansão de chaves , que seu shell expande no comando acima:
sudo apt-get remove k3b{,-data}
1 Há duas excepções a esta: (a) algumas opções (por exemplo, -f
, --purge
) são reconhecidos, e (b) alguns caracteres de pontuação que aparecem no final de um argumento que seria tomado como um nome de pacote para executar a ação pode ser usado para alterar o que é feito (por exemplo, sudo apt install ubuntu-desktop^
instala a tarefa em vez do pacote e quando ^
aparece no final).
2 Existem outros metacaracteres de expressão regular. Por exemplo, \
é suportado por todos os dialetos de expressões regulares e comumente usado. .
, ?
, +
, *
, |
, [
, ^
, E $
só acontecerá a ser os metacaracteres os desenvolvedores APT decidiram provocaria interpretação como uma expressão regular (após a resolução como um pacote exato nomeado falhou).
3 A maneira mais fácil de verificar isso é simular a instalação ou remoção com esse padrão, usando a -s
opção descrita acima. Por exemplo, a execução de apt -s install ^virtualbox
programas que sudo apt install ^virtualbox
teriam o efeito de tentar instalar todos os pacotes que o gerenciador de pacotes conhece sobre cujo nome começa virtualbox
. No entanto, esse comportamento também pode ser verificado examinando o código-fonte . Verifique a CacheSetHelper::PackageFromRegEx
função em cacheset.cc
.