Gunakan sudo apt-get remove ^k3b
sebagai gantinya. Ketika Anda menginstal atau menghapus paket, *
seringkali berbahaya dan jarang dibutuhkan. Jika Anda menggunakannya *
, Anda harus mengutipnya, tetapi itu tidak membuatnya lebih aman, karena kecenderungannya untuk memilih paket yang jauh lebih banyak daripada yang Anda inginkan adalah hasil dari cara apt
dan apt-get
menafsirkannya dan bukan efek dari ekspansi pathname .
- Bahkan penggunaan yang aman dari
*
yang sering tidak perlu .
- Penggunaan yang tidak aman itu brutal . Menghapus
k3b*
Menghapus setiap paket yang berisi k3
mana saja dalam namanya (dan setiap paket yang tergantung pada paket tersebut). Itu bukan salah cetak yang k3
cukup, bahkan tanpa b
, karena b*
berarti "nol atau lebih b
."
Ketika Anda menjalankan apt
atau apt-get
dengan install
, remove
atau purge
tindakan, setiap argumen berikutnya adalah pertama 1 ditafsirkan sebagai nama paket individu. Jika paket dengan nama persis itu ada, tindakan dilakukan untuk itu.
Jika tidak ada paket seperti itu, apt
dan apt-get
akan memeriksa apakah argumen mengandung salah satu umum ekspresi reguler metakarakter 2 .
, ?
, +
,*
, |
, \[
, ^
, atau$
. Jika tidak, sudah selesai - tidak ada paket yang ditemukan.
Jika memang mengandung salah satu karakter tersebut, maka itu diperlakukan sebagai ekspresi reguler dan cocok dengan bagian mana pun dari nama paket apa pun. Itu tidak harus cocok dengan seluruh nama. Seperti yang dikatakan orang lain, *
dalam ekspresi reguler tidak berarti sama dengan *
di bola. ?
juga tidak. Dalam ekspresi reguler:
*
memungkinkan item sebelumnya muncul beberapa kali - termasuk hanya sekali atau tidak sama sekali - bukannya tepat sekali.
?
menjadikan item sebelumnya opsional --yaitu, memungkinkan item muncul nol atau satu kali.
apt-get (8) ( man apt-get
) mengatakan:
Jika tidak ada paket yang cocok dengan ekspresi yang diberikan dan ekspresi berisi salah satu dari '.', '?' atau '*' kemudian diasumsikan sebagai ekspresi reguler POSIX, dan itu diterapkan ke semua nama paket dalam database. Semua kecocokan kemudian diinstal (atau dihapus). Perhatikan bahwa pencocokan dilakukan dengan substring sehingga 'lo. *' Cocok 'how-lo' dan 'terendah'. Jika ini tidak diinginkan, jangkar ekspresi reguler dengan karakter '^' atau '$', atau buat ekspresi reguler yang lebih spesifik.
Manual ini hanya menyebutkan .
, ?
, dan *
, tapi itu tidak lengkap , seperti +
, |
, [
, ^
, dan $
juga cukup untuk membiarkan apt-get
atau apt
menafsirkan pola sebagai ekspresi reguler. 3
Meskipun Anda dapat mencocokkan sejumlah karakter apa pun dengan .*
- bukan hanya - Anda *
hanya memerlukan ini jika itu akan muncul di tengah ekspresi reguler Anda. Karena polanya cocok dengan substring apa pun dari nama paket, itu tidak ada gunanya di akhir (atau awal) dari pola.
Halaman manual menyebutkan ^
dan$
. Ini (terutama ^
) adalah kunci untuk menulis yang aman, pola efisien untuk digunakan dengan install
, remove
atau purge
tindakan dalam apt
atau apt-get
.
^
jangkar ekspresi reguler ke awal seluruh string. ^k3b
memilih semua paket yang namanya dimulai dengan k3b
.
$
jangkar ekspresi reguler ke akhir seluruh string. k3b$
akan memilih semua paket yang namanya diakhiri dengan k3b
.
Karena itu Anda dapat menggunakan perintah ini untuk menghapus paket-paket dengan aman:
sudo apt-get remove ^k3b
Akhirnya, dalam kasus spesifik yang Anda sebutkan, Anda mungkin hanya perlu menyampaikan kedua nama itu sendiri:
sudo apt-get remove k3b k3b-data
Maka Anda menghindari semua kerumitan ini! (Meskipun jangkar dengan ^
sederhana setelah Anda terbiasa.) Atau gunakan ekspansi brace , yang shell Anda ekspansi ke perintah di atas:
sudo apt-get remove k3b{,-data}
1 Ada dua pengecualian untuk ini: (a) beberapa pilihan (misalnya, -f
, --purge
) diakui, dan (b) beberapa karakter tanda baca muncul pada akhir dari argumen yang seharusnya dapat diambil sebagai nama paket untuk melakukan tindakan dapat digunakan untuk mengubah apa yang dilakukan (misalnya, sudo apt install ubuntu-desktop^
menginstal tugas daripada paket, dan kapan ^
muncul di akhir).
2 Metakarakter ekspresi reguler lainnya ada. Misalnya, \
didukung oleh semua dialek ekspresi reguler dan yang umum digunakan. .
, ?
, +
, *
, |
, [
, ^
, Dan $
hanya terjadi untuk menjadi metakarakter pengembang APT memutuskan akan memicu interpretasi sebagai ekspresi reguler (setelah resolusi sebagai paket yang tepat bernama telah gagal).
3 Cara termudah untuk memverifikasi ini adalah dengan mensimulasikan pemasangan atau penghapusan dengan pola seperti itu, menggunakan -s
opsi seperti dijelaskan di atas. Misalnya, menjalankan apt -s install ^virtualbox
pertunjukan yang sudo apt install ^virtualbox
akan berdampak mencoba menginstal setiap paket yang diketahui oleh manajer paket tentang siapa yang namanya dimulai virtualbox
. Namun, perilaku ini juga dapat diverifikasi dengan memeriksa kode sumber . Periksa CacheSetHelper::PackageFromRegEx
fungsi di cacheset.cc
.