Sử dụng sudo apt-get remove ^k3b
thay thế. Khi bạn cài đặt hoặc gỡ bỏ các gói, *
thường nguy hiểm và hiếm khi cần thiết. Nếu bạn sử dụng *
, bạn nên trích dẫn nó, nhưng điều đó không làm cho nó an toàn hơn, bởi vì xu hướng chọn nhiều gói hơn bạn dự định là kết quả của cách thức apt
và apt-get
diễn giải nó chứ không phải là hiệu ứng của việc mở rộng tên đường dẫn .
- Thậm chí sử dụng an toàn
*
là thường không cần thiết .
- Sử dụng không an toàn là tàn bạo . Xóa
k3b*
bỏ loại bỏ mọi gói có chứa k3
bất cứ nơi nào trong tên của nó (và mọi gói phụ thuộc vào gói đó). Đó không phải là một lỗi đánh máy - chứa k3
là đủ, thậm chí không có b
, bởi vì b*
có nghĩa là "không hoặc nhiều hơn b
s."
Khi bạn chạy apt
hoặc apt-get
với install
, remove
hoặc purge
hành động, mỗi đối số tiếp theo là lần đầu tiên 1 hiểu là tên của một gói cá nhân. Nếu một gói có tên chính xác đó tồn tại, hành động được thực hiện cho nó.
Nếu không có gói như vậy, apt
và apt-get
sẽ kiểm tra nếu đối số có chứa bất kỳ trong những phổ biến biểu thức chính quy metacharacters 2 .
, ?
, +
,*
, |
, \[
, ^
, hoặc$
. Nếu không, nó đã được thực hiện - không có gói nào được tìm thấy.
Nếu nó có chứa bất kỳ ký tự nào trong số đó, thì nó được coi là một biểu thức chính quy và khớp với bất kỳ phần nào của bất kỳ tên gói nào. Nó không phải phù hợp với toàn bộ tên. Như những người khác đã nói, *
trong một biểu thức chính quy không có nghĩa tương tự như *
trong một quả địa cầu. ?
cũng không. Trong một biểu thức chính quy:
*
cho phép mục trước xuất hiện bất kỳ số lần nào - chỉ bao gồm một lần hoặc không hoàn toàn - thay vì chính xác một lần.
?
làm cho mục trước đó là tùy chọn - đó là, nó cho phép nó xuất hiện 0 hoặc một lần.
apt-get (8) ( man apt-get
) nói:
Nếu không có gói nào khớp với biểu thức đã cho và biểu thức chứa một trong số '.', '?' hoặc '*' thì nó được coi là biểu thức chính quy POSIX và được áp dụng cho tất cả các tên gói trong cơ sở dữ liệu. Bất kỳ trận đấu sau đó được cài đặt (hoặc loại bỏ). Lưu ý rằng việc khớp được thực hiện bởi chuỗi con nên 'lo. *' Khớp 'how-lo' và 'low'. Nếu điều này là không mong muốn, hãy neo biểu thức chính quy bằng ký tự '^' hoặc '$' hoặc tạo biểu thức chính quy cụ thể hơn.
Manpage chỉ đề cập đến .
, ?
và *
, nhưng nó là không đầy đủ , như +
, |
, [
, ^
, và $
cũng đủ để cho apt-get
hoặc apt
giải thích các mô hình như một biểu thức chính quy. 3
Mặc dù bạn có thể khớp bất kỳ số lượng bất kỳ ký tự nào với .*
- không chỉ - bạn *
chỉ cần điều này nếu nó xuất hiện ở giữa biểu thức thông thường của bạn. Vì mẫu được khớp với bất kỳ chuỗi con nào của tên gói, nên nó vô nghĩa ở cuối (hoặc bắt đầu) của mẫu.
Các trang web đề cập ^
và$
. Những (đặc biệt ^
) là chìa khóa để viết an toàn, mô hình hiệu quả để sử dụng với install
, remove
hoặc purge
hành động trong apt
hoặc apt-get
.
^
neo một biểu thức chính quy vào đầu của toàn bộ chuỗi. ^k3b
chọn tất cả các gói có tên bắt đầu bằng k3b
.
$
neo một biểu thức chính quy vào cuối của toàn bộ chuỗi. k3b$
sẽ chọn tất cả các gói có tên kết thúc bằng k3b
.
Do đó, bạn có thể sử dụng lệnh này để gỡ bỏ các gói một cách an toàn:
sudo apt-get remove ^k3b
Cuối cùng, trong trường hợp cụ thể mà bạn đã đề cập, bạn cũng có thể tự mình vượt qua cả hai tên:
sudo apt-get remove k3b k3b-data
Sau đó, bạn tránh tất cả sự phức tạp này! (Mặc dù việc neo với ^
đơn giản là một khi bạn đã quen với nó.) Hoặc sử dụng mở rộng dấu ngoặc , mà vỏ của bạn mở rộng thành lệnh trên:
sudo apt-get remove k3b{,-data}
1 Có hai trường hợp ngoại lệ như sau: (a) một số tùy chọn (ví dụ -f
, --purge
) được công nhận, và (b) một số ký tự dấu xuất hiện tại cuối của một cuộc tranh cãi rằng nếu không sẽ được thực hiện như là một tên gói để thực hiện các hành động có thể được sử dụng để thay đổi những gì được thực hiện (ví dụ: sudo apt install ubuntu-desktop^
cài đặt tác vụ thay vì gói và khi ^
xuất hiện ở cuối).
2 Siêu ký tự biểu thức chính quy khác tồn tại. Ví dụ, \
được hỗ trợ bởi tất cả các phương ngữ của biểu thức chính quy và thường được sử dụng. .
, ?
, +
, *
, |
, [
, ^
, Và $
chỉ xảy ra là metacharacters các nhà phát triển APT quyết định sẽ kích hoạt sự giải thích như một biểu thức chính quy (sau độ phân giải như một gói chính xác tên đã thất bại).
3 Cách dễ nhất để xác minh điều này là mô phỏng cài đặt hoặc gỡ bỏ với một mẫu như vậy, sử dụng -s
tùy chọn như mô tả ở trên. Ví dụ, việc chạy các apt -s install ^virtualbox
chương trình sudo apt install ^virtualbox
sẽ có tác dụng cố gắng cài đặt mọi gói mà người quản lý gói biết về tên bắt đầu bằng virtualbox
. Tuy nhiên, hành vi này cũng có thể được xác minh bằng cách kiểm tra mã nguồn . Kiểm tra CacheSetHelper::PackageFromRegEx
chức năng trong cacheset.cc
.