Użyj sudo apt-get remove ^k3bzamiast 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 apti apt-getinterpretacji, 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 k3jest wystarczające, nawet bez b, ponieważ b*oznacza „zero lub więcej bs”.
Po uruchomieniu aptlub apt-getz install, removelub purgedział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, apti apt-getsprawdzi, 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-getlub aptzinterpretować 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, removelub purgedziałania w aptlub apt-get.
^zakotwicza wyrażenie regularne na początku całego łańcucha. ^k3bwybiera 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 -sopcji opisanej powyżej. Na przykład uruchamianie apt -s install ^virtualboxprogramów, sudo apt install ^virtualboxktó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::PackageFromRegExfunkcję w cacheset.cc.