패턴과 일치하는 설치된 패키지 목록을 얻는 올바른 방법은 무엇입니까?

패턴과 일치하는 설치된 패키지 목록을 얻는 올바른 방법은 무엇입니까?

저는 (아주 새로운) 데비안 기반 배포판을 실행하고 있습니다.

특정 패턴과 일치하는 설치된 모든 패키지의 간단한 목록을 생성하고 싶습니다. 다음과 같이 실행하여 이 작업을 수행할 수 있습니다.

apt list --installed "linux-image-*" | cut -d/ -f1

하지만 다음과 같이 신경 쓰지 않는 줄이 표시됩니다.

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Listing...

따라서 를 사용하지 않는 것이 좋습니다 apt. 다음과 같이 dpkg-query를 실행할 수 있습니다.

dpkg-query --showformat='${Package}\n' --show "linux-image*"

그러나 이는 설치된 패키지에만 국한되지 않습니다. 나는 사용할 수 있다

dpkg-query --list "linux-image-*" | grep "ii"

그런데 텍스트 처리를 많이 해야 하는데 이 공간을 누가 믿을 수 있겠습니까?

따라서 결론은 다음과 같습니다.옳은패턴과 일치하는 설치된 패키지 목록을 얻는 방법은 무엇입니까?


노트:

  • 쉘 글로브뿐만 아니라 적절한 정규식이 될 수 있다면 보너스 포인트입니다.
  • 텍스트를 구문 분석하는 것은 이상적인 솔루션이 아닌 것 같습니다. 그것이 당신이 제안하는 것이라면 왜 더 나은 방법이 없는지 설명하십시오.

답변1

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1{print $1}'
linux-image-3.16.0-4-amd64
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64
linux-image-4.8.0-2-amd64
linux-image-4.9.0-1-amd64
linux-image-4.9.0-2-amd64
linux-image-4.9.0-3-amd64

정규식에 대해 이야기하기:

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1 && $0~/4.1/{print $1}'
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64

패키지 이름 없이 호출하면 기본적으로 설치된 패키지만 나열하는 dpkg-query( --showformat) 옵션을 사용할 수도 있습니다 .-f

$ dpkg-query -f '${Package}\n' -W |grep 'linux-image' #-W == --show

답변2

aptitude정규식을 사용하여 관련 없는 출력 없이 패키지 관리 도구에 알려진 모든 패키지(설치된 패키지 또는 기타 패키지)를 검색하도록 지원하며 출력 형식을 지정하는 방법을 알려줄 수 있습니다.

aptitude search "linux-image-.*"

설치된 패키지만 나열:

aptitude search "linux-image-.* ~i"

설치된 패키지만 나열이름정규식 일치:

aptitude search "linux-image-.* ~i" -F "%p"

이 문서에서는 다음을 다루고 있습니다.사용 가능한 검색 모드그리고출력 형식 지정자상세한. 이 웹사이트에서 다음과 같은 예를 찾을 수도 있습니다.적성과 함께 정규식을 사용하는 방법이 있습니까?,적성을 갖춘 정규식 2부, 그리고Linux - apt만을 사용하여 보안 업데이트 표시 또는 업그레이드.

답변3

이는 Debian 기반 시스템에 설치된 패키지 목록을 얻는 좋은 방법입니다:

dpkg -l | grep ^ii | awk '{print $2}'

출력 라인은 dpkg -l정상이라고 신뢰할 수 있습니다. 패턴은 ^ii설치된 패키지와 행을 일치시키고 간단한 Awk는 패키지 이름( apt-get install명령에 사용된 것과 동일한 이름)인 두 번째 열을 추출합니다. 패키지 이름에는 공백이 포함될 수 없으므로 이는 안전한 작업입니다.

답변4

용어를 검색할 때 "잡기" 위해서는grep평평한포장 백검색어를 묶어야 하는 출력은 아래와 같습니다. "자식"는 샘플 검색어로 사용됩니다.

dpkg -l |grep "^ii  git[[:space:]]"

이것캐럿(^)둘,(2) 공백 다음에 검색어 앞에 아무 것도 추가하세요.앞으로이 문자 조합이 아닌 다른 문자와 일치할 수 있습니다.

[[:space:]]검색어는 공백만 즉시 일치시켜 부분 일치를 방지합니다.뒤쪽에그것.

관련 정보