어제 밤에 CD를 구우려고했습니다. k3b에 짜증이 났고 대신 brasero를 사용하기로 선택했기 때문에 k3b를 제거했습니다.
나는 입력했다 :
sudo apt-get remove k3b
탭을 두 번 누르고 시스템에 k3b 및 k3b 데이터가 모두 있음을 알았습니다. k3b가없는 시스템에서 k3b 데이터가 필요하지 않다고 가정하고, 그것을 제거하고 싶었습니다.
sudo apt-get remove k3b*
불행히도 나는 보지 않고 확인하기 위해 Y를 누르십시오. k3b
및 이상을 완전히 제거했습니다 k3b-data
. 내 k3b*
정규식에 맞지 않는 패키지를 제거했습니다 . 예를 들면 다음 transmission
과 같습니다 network-manager
.
나는 사이의 공간이하지 않은 것을 매우 확신 k3b
하고 *
있지만, 나는 그것이했던 모든 것을 제거 왜 다른 모른다. 내가 잘못 이해하는 apt-get에 관한 것이 있습니까?
답변
원하는 명령은 다음 sudo apt-get remove '^k3b.*'
과 같습니다.
- 당신은
.*
어떤 문자, 여러 번 일치 해야 합니다 ^
문자열의 시작과 일치 해야 합니다- bash
*
가 와일드 카드로 해석되지 않도록 정규식을 인용해야합니다.
(이 답변은 qbi 및 Flimm에서 제공 한 이전 정보를 완성하고 요약합니다)
답변
정규식 *
은 0 또는 임의로 많은 수를 나타냅니다. 따라서 apt-get
포함 k3
된 모든 것을 제거 b
하고 기본적으로 포함 된 모든 것을 제거 하라고 지시 했습니다 k3
. 시스템에서 명령을 시도하면 58 패키지를 제거하려고합니다.
sudo apt-get remove -s k3b*
Package k3b is not installed, so not removed
Package k3b-data is not installed, so not removed
Package k3b-dbg is not installed, so not removed
Package libcanberra-gtk3-0 is not installed, so not removed
Package libcanberra-gtk3-0-dbg is not installed, so not removed
Package libcanberra-gtk3-dev is not installed, so not removed
…
The following packages will be REMOVED:
appmenu-gtk ardour audacity brasero brasero-cdrkit firefox-globalmenu
gconf-editor gir1.2-appindicator-0.1 gnome-applets gnome-control-center
…
0 upgraded, 2 newly installed, 58 to remove and 0 not upgraded.
답변
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
.
답변
그런 다음 해당 프로그램이 의존하는 k3b가있는 lib를 제거하십시오.
요컨대 당신은 알지 못할 수도 있습니다. 와일드 카드를 사용하여 사물을 제거하고 메시지가 표시 될 때 사물을 읽지 않는 것이 좋습니다 (죄송합니다).
또한 -n 정규식 검색을 사용하면 이름뿐만 아니라 모든 필드를 사용합니다.
http://ccrma.stanford.edu/planetccrma/man/man8/apt-cache.8.html
또한 qbi는 정규 표현식에 문제가 있습니다.