Użyj sudo apt-get remove ^k3b
zamiast tego. Podczas instalowania lub usuwania pakietów *
jest często niebezpieczny i rzadko potrzebny. Jeśli używasz *
, powinieneś go zacytować, ale to nie czyni go bezpieczniejszym, ponieważ jego tendencja do wybierania znacznie większej liczby pakietów, niż zamierzasz, jest wynikiem sposobu apt
i apt-get
interpretacji, a nie efektem rozwijania nazwy ścieżki .
- Nawet bezpieczne zastosowania
*
są często niepotrzebne .
- Niebezpieczne zastosowania są brutalne . Usunięcie
k3b*
usuwa każdy pakiet, który zawiera k3
dowolne miejsce w jego nazwie (i każdy pakiet, który zależy od takiego pakietu). To nie jest literówka - zawieranie k3
jest wystarczające, nawet bez b
, ponieważ b*
oznacza „zero lub więcej b
s”.
Po uruchomieniu apt
lub apt-get
z install
, remove
lub purge
działania, każdy kolejny argument to pierwszy 1 interpretowane jako nazwa opakowaniu jednostkowym. Jeśli istnieje pakiet o tej dokładnej nazwie, wykonywana jest dla niego akcja.
Jeśli nie ma takiego pakietu, apt
i apt-get
sprawdzi, czy argument zawiera którekolwiek z typowych wyrażeń regularnych metaznaki 2 .
, ?
, +
,*
, |
, \[
, ^
, lub$
. Jeśli nie, to gotowe - nie znaleziono pakietu.
Jeśli nie zawierają żadnego z tych znaków, to jest traktowane jako wyrażenie regularne i porównywana z jakiejkolwiek części jakiejkolwiek nazwy pakietu. Nie musi pasować do całej nazwy. Jak powiedzieli inni, *
wyrażenie regularne nie oznacza tego samego, co *
glob. ?
też nie. W wyrażeniu regularnym:
*
pozwala, aby poprzedni element pojawiał się dowolną liczbę razy - w tym tylko raz lub wcale - zamiast dokładnie raz.
?
sprawia, że poprzedni element jest opcjonalny - to znaczy, że może pojawić się zero lub jeden raz.
apt-get (8) ( man apt-get
) mówi:
Jeśli żaden pakiet nie pasuje do podanego wyrażenia, a wyrażenie zawiera jedno z „.”, „?” lub „*”, wówczas przyjmuje się, że jest to wyrażenie regularne POSIX i jest stosowane do wszystkich nazw pakietów w bazie danych. Wszelkie dopasowania są następnie instalowane (lub usuwane). Zauważ, że dopasowanie odbywa się przez podciąg, więc „lo. *” Dopasowuje „how-lo” i „najniższą”. Jeśli jest to niepożądane, zakotwicz wyrażenie regularne znakiem „^” lub „$” albo utwórz bardziej szczegółowe wyrażenie regularne.
Manpage tylko wspomina .
, ?
i *
, ale jest niekompletna , jak +
, |
, [
, ^
, i $
są również wystarczające, aby pozwolić apt-get
lub apt
zinterpretować jako wzorzec wyrażenia regularnego. 3)
Chociaż można dopasować dowolną ilość dowolnych znaków z .*
- nie wystarczy *
tylko --you to potrzebne, jeśli wydaje się w środku swojego wyrażenia regularnego. Ponieważ wzorzec jest dopasowywany do dowolnego podciągu nazwy pakietu, nie ma sensu na końcu (lub początku) wzorca.
Strona wspomina ^
i$
. Tych (szczególnie ^
) są kluczem do pisania bezpiecznych, skutecznych wzorców do użytku z install
, remove
lub purge
działania w apt
lub apt-get
.
^
zakotwicza wyrażenie regularne na początku całego łańcucha. ^k3b
wybiera wszystkie pakiety, których nazwy zaczynają się k3b
.
$
zakotwicza wyrażenie regularne na końcu całego łańcucha. k3b$
wybrałby wszystkie pakiety, których nazwy kończą się na k3b
.
Dlatego możesz użyć tego polecenia, aby bezpiecznie usunąć pakiety:
sudo apt-get remove ^k3b
Wreszcie, w konkretnym przypadku, o którym wspomniałeś, równie dobrze możesz po prostu podać oba nazwiska:
sudo apt-get remove k3b k3b-data
Wtedy unikniesz całej tej złożoności! (Chociaż zakotwiczenie za pomocą ^
jest proste, gdy już się do tego przyzwyczaisz). Lub użyj rozszerzenia nawiasów , które twoja powłoka rozwija do powyższego polecenia:
sudo apt-get remove k3b{,-data}
1 Istnieją dwa wyjątki to: (a) niektóre opcje (np -f
, --purge
) są rozpoznawane i (b) niektóre znaki interpunkcyjne pojawiające się na końcu argumentu, które byłyby uznawane za nazwę pakietu wykonywać działania mogą być służy do zmiany tego, co zostało zrobione (np. sudo apt install ubuntu-desktop^
instaluje zadanie zamiast pakietu i kiedy ^
pojawia się na końcu).
2 Istnieją inne metaznaki wyrażeń regularnych. Na przykład \
jest obsługiwany przez wszystkie dialekty wyrażeń regularnych i powszechnie używane. .
, ?
, +
, *
, |
, [
, ^
, I $
po prostu stało się metaznaki apt deweloperzy zdecydowali spowodowałaby interpretację jako wyrażenie regularne (po ustąpieniu jako dokładnym pakiecie o nazwie nie udało).
3 Najłatwiejszym sposobem sprawdzenia tego jest symulacja instalacji lub usunięcia z takim wzorcem, przy użyciu -s
opcji opisanej powyżej. Na przykład uruchamianie apt -s install ^virtualbox
programów, sudo apt install ^virtualbox
które skutkowałyby próbą zainstalowania każdego pakietu, o którym menedżer pakietów wie, od którego imienia zaczyna się nazwa virtualbox
. To zachowanie można jednak również zweryfikować, sprawdzając kod źródłowy . Sprawdź CacheSetHelper::PackageFromRegEx
funkcję w cacheset.cc
.