sudo apt-get remove ^k3b
대신 사용하십시오 . 패키지를 설치하거나 제거 할 때 *
종종 위험하고 거의 필요하지 않습니다. 당신이 *
그것을 사용한다면 , 당신은 그것을 인용해야하지만 , 당신이 의도 한 것보다 훨씬 더 많은 패키지를 선택하는 경향 이 경로 결과 확장 의 영향이 아닌 방법의 결과 와 그것을 해석 하기 때문에 더 안전 하지는 않습니다 .apt
apt-get
- 심지어 의 안전한 사용은
*
있습니다 종종 불필요한 .
- 안전하지 않은 사용 은 잔인 합니다. 제거
k3b*
포함하는 모든 패키지을 제거합니다 k3
어디서나 이름 (그와 같은 패키지에 따라 모든 패키지)에. 오타가 아닙니다. 포함 k3
하지 않아도 충분합니다 b
. 왜냐하면 b*
"0 이상"을 의미 하기 때문 b
입니다.
당신이 실행하는 경우 apt
또는 apt-get
로 install
, remove
또는 purge
액션, 이후의 각 인수는 처음으로 1 개별 패키지의 이름으로 해석했다. 정확한 이름을 가진 패키지가 존재하면 해당 작업이 수행됩니다.
거기에 그러한 패키지 없으며, 경우 apt
및 apt-get
인수 공통의 포함 여부를 확인합니다 정규 표현식 메타 문자를 2 .
, ?
, +
,*
, |
, \[
, ^
, 또는$
. 그렇지 않은 경우 완료된 것입니다. 패키지가 없습니다.
이 경우 않는 그 문자를 포함, 다음은 정규 표현식으로 처리하고와 일치합니다 어떤 부분 어떤 패키지 이름의. 전체 이름과 일치하지 않아도됩니다. 다른 사람들이 말했듯 *
이 정규 표현식 *
에서 글로브 와 같은 것을 의미하지는 않습니다 . ?
그렇지 않습니다. 정규식에서 :
*
이전 항목 이 정확히 한 번이 아닌 한 번만 포함하거나 한 번만 포함 하여 여러 번 나타날 수 있습니다.
?
이전 항목을 선택 사항으로 만듭니다. 즉 , 0 번 또는 1 번 나타날 수 있습니다.
apt-get (8) ( man apt-get
)는 말합니다 :
주어진 표현식과 일치하는 패키지가없고 표현식에 '.', '?'중 하나가 포함 된 경우 또는 '*'인 경우 POSIX 정규식으로 가정되며 데이터베이스의 모든 패키지 이름에 적용됩니다. 그런 다음 일치하는 항목이 설치되거나 제거됩니다. 일치는 하위 문자열로 수행되므로 'lo. *'는 'how-lo'및 'lowest'와 일치합니다. 이것이 바람직하지 않은 경우 정규식을 '^'또는 '$'문자로 고정하거나보다 구체적인 정규식을 작성하십시오.
맨 페이지 만 언급 .
, ?
그리고 *
있지만, 그것은 불완전 로, +
, |
, [
, ^
, 및 $
도하게하기에 충분하다 apt-get
또는 apt
정규 표현식으로 패턴을 해석한다. 삼
당신은 어떤 문자의 수와 일치 할 수 있지만 .*
- 아니 단지 *
는에 나타나는 경우 알려줄까요에만이 필요 중간 정규 표현식의. 패턴은 패키지 이름의 하위 문자열과 일치하므로 패턴의 끝 (또는 시작)에서 의미가 없습니다.
맨 페이지에 및가 언급 ^
되어$
있습니다. 이 (특히 ^
)를 사용하기 위해 안전하고 효율적인 패턴을 작성하는 열쇠 install
, remove
또는 purge
조치 apt
나 apt-get
.
^
전체 문자열 의 시작 부분 에 정규식을 고정 합니다. ^k3b
이름이 모든 패키지 선택 시작 과를 k3b
.
$
전체 문자열 의 끝에 정규식을 고정 합니다. k3b$
이름이 모든 패키지 선택 것이다 끝 과를 k3b
.
따라서이 명령을 사용하여 패키지를 안전하게 제거 할 수 있습니다.
sudo apt-get remove ^k3b
마지막으로, 언급 한 특정 경우에 두 이름을 모두 직접 전달할 수도 있습니다.
sudo apt-get remove k3b k3b-data
그런 다음이 모든 복잡성을 피하십시오! (이것에 ^
익숙해지면 간단하게 고정 할 수 있습니다.) 또는 괄호 확장을 사용 하면 쉘이 위의 명령으로 확장됩니다.
sudo apt-get remove k3b{,-data}
한 두 가지 예외가 여기에있다 : (a)는 일부 옵션 (예 :, -f
, --purge
) 인정되며, (b)는 상기 나타나는 몇 가지 문장 부호 끝 달리 할 수있는 작업을 수행하기 위해 패키지 이름으로 간주 될 인수의 수행 된 작업을 변경하는 데 사용됩니다 (예 : 패키지 대신 작업을sudo apt install ubuntu-desktop^
설치 하고 끝에 표시 될 때 ).^
2 다른 정규식 메타 문자가 존재합니다. 예를 들어, \
모든 정규식의 방언에서 지원되며 일반적으로 사용됩니다. .
, ?
, +
, *
, |
, [
, ^
, 및 $
단지 APT 개발자들이 정규 표현식으로 해석 발생하게 결정 메타 될 일이 (라는 이름의 정확한 패키지로 해결 한 후 실패했습니다).
3 이를 확인하는 가장 쉬운 방법 -s
은 위에서 설명한 옵션을 사용하여 이러한 패턴으로 설치 또는 제거를 시뮬레이션하는 것입니다 . 예를 들어, running apt -s install ^virtualbox
은 sudo apt install ^virtualbox
패키지 관리자가 누구의 이름으로 시작하는지 알고있는 모든 패키지를 설치하려고 시도 함을 보여줍니다 virtualbox
. 그러나이 동작은 소스 코드 를 검사 하여 확인할 수도 있습니다 . 의 CacheSetHelper::PackageFromRegEx
기능을 확인하십시오 cacheset.cc
.