Usar en su sudo apt-get remove ^k3b
lugar. Cuando instala o elimina paquetes, a *
menudo es peligroso y rara vez se necesita. Si lo usa *
, debe citarlo, pero eso no lo hace más seguro, porque su tendencia a seleccionar muchos más paquetes de los que desea es el resultado de la forma apt
e apt-get
interpretación y no un efecto de la expansión del nombre de ruta .
- Incluso los usos seguros de a
*
menudo son innecesarios .
- Los usos inseguros son brutales . Al eliminar, se
k3b*
eliminan todos los paquetes que contienen k3
cualquier parte de su nombre (y cada paquete que depende de dicho paquete). Eso no es un error tipográfico, k3
es suficiente, incluso sin el b
, porque b*
significa "cero o más b
s".
Cuando se ejecuta apt
o apt-get
con el install
, remove
o purge
acción, cada argumento subsiguiente es primero 1 interpretado como el nombre de un paquete individual. Si existe un paquete con ese nombre exacto, la acción se realiza para él.
Si no hay tal paquete, apt
y apt-get
comprobará si el argumento contiene cualquiera de los comunes de expresiones regulares metacaracteres 2 .
, ?
, +
,*
, |
, \[
, ^
, o$
. Si no, está hecho, no se encontró ningún paquete.
Si no contiene ninguno de esos personajes, a continuación, se trata como una expresión regular y compara con cualquier parte de cualquier nombre de paquete. No tiene que coincidir con el nombre completo. Como han dicho otros, *
en una expresión regular no significa lo mismo que *
en un globo. ?
tampoco. En una expresión regular:
*
permite que el elemento anterior aparezca cualquier cantidad de veces, incluso una sola vez o ninguna, en lugar de exactamente una vez.
?
hace que el elemento anterior sea opcional , es decir, le permite aparecer cero o una vez.
apt-get (8) ( man apt-get
) dice:
Si ningún paquete coincide con la expresión dada y la expresión contiene uno de '.', '?' o '*', entonces se supone que es una expresión regular POSIX, y se aplica a todos los nombres de paquetes en la base de datos. Las coincidencias se instalan (o eliminan). Tenga en cuenta que la coincidencia se realiza mediante una subcadena, por lo que 'lo. *' Coincide con 'how-lo' y 'lower'. Si esto no es deseado, ancle la expresión regular con un carácter '^' o '$', o cree una expresión regular más específica.
La página de manual sólo menciona .
, ?
y *
, pero es incompleta , ya que +
, |
, [
, ^
, y $
también son suficientes para permitir apt-get
o apt
interpretar el patrón como una expresión regular. 3
Aunque puede hacer coincidir cualquier número de caracteres con .*
, no solo, *
solo necesita esto si aparece en el medio de su expresión regular. Debido a que el patrón se compara con cualquier subcadena del nombre de un paquete, no tiene sentido al final (o principio) del patrón.
La página de manual menciona ^
y$
. Estos (especialmente ^
) son clave para escribir patrones seguros y eficaces para su uso con los install
, remove
o purge
acciones en apt
o apt-get
.
^
ancla una expresión regular al comienzo de toda la cadena. ^k3b
selecciona todos los paquetes cuyos nombres comienzan con k3b
.
$
ancla una expresión regular al final de toda la cadena. k3b$
seleccionaría todos los paquetes cuyos nombres terminen en k3b
.
Por lo tanto, puede usar este comando para eliminar de forma segura los paquetes:
sudo apt-get remove ^k3b
Finalmente, en el caso específico que mencionó, podría pasar ambos nombres usted mismo:
sudo apt-get remove k3b k3b-data
¡Entonces evitas toda esta complejidad! (Aunque anclar con ^
es simple una vez que está acostumbrado). O use la expansión de llaves , que su caparazón se expande en el comando anterior:
sudo apt-get remove k3b{,-data}
1 Hay dos excepciones a esto: (a) se reconocen algunas opciones (p. Ej. -f
, --purge
) Y (b) algunos caracteres de puntuación que aparecen al final de un argumento que de otro modo se tomarían como un nombre de paquete para realizar la acción. se usa para alterar lo que se hace (por ejemplo, sudo apt install ubuntu-desktop^
instala la tarea en lugar del paquete, y cuando ^
aparece al final).
2 Existen otros metacaracteres de expresiones regulares. Por ejemplo, \
es compatible con todos los dialectos de expresiones regulares y de uso común. .
, ?
, +
, *
, |
, [
, ^
, Y $
acaba de pasar a ser los metacaracteres los desarrolladores decidieron APT daría lugar a la interpretación como una expresión regular (después de la resolución como un paquete llamado exacta ha fallado).
3 La forma más fácil de verificar esto es simular la instalación o eliminación con dicho patrón, utilizando la -s
opción como se describe anteriormente. Por ejemplo, ejecutar apt -s install ^virtualbox
programas que sudo apt install ^virtualbox
tendrían el efecto de intentar instalar todos los paquetes que el administrador de paquetes conoce sobre el nombre de quién comienza virtualbox
. Sin embargo, este comportamiento también se puede verificar examinando el código fuente . Verifique la CacheSetHelper::PackageFromRegEx
función en cacheset.cc
.