더 이상 사용되지 않는 패키지 목록을 얻으려면 어떻게합니까?


19

활성화 한 리포지토리에서 더 이상 사용할 수없는 패키지 목록을 얻는 방법을 찾으려고합니다. 이 워크 스테이션은 꽤 많은 버전의 우분투를 거치며 많은 타사 저장소를 추가하고 제거했습니다. 제거 된 리포지토리에서 가지고있는 소프트웨어 목록을 가져 와서 정리하거나 적절한 리포지토리를 다시 추가 할 수 있습니다.

답변:


23
aptitude search '~o'

적성에는 매우 강력한 검색 기능이 있습니다. 불행히도 구문은 다루기 쉽지 않으며 설명서를 찾으려면 맨 페이지를 지나야하지만 그만한 가치가 있습니다.

apt-show-versions도 도움이 될 수 있습니다.

apt-show-versions | grep 'No available version'

1
구식 패키지에 대한 좋은 기사를 여기에서보십시오 : raphaelhertzog.com/2011/02/07/…
Lluís

또 다른 유용한 목록이 생성되었습니다apt-show-versions | grep "newer than version in archive"
Sean

적성 선이 기억하기에 반 직관적이기 때문에 apt-show-versions가 최고라고 생각합니다. 내가 필요할 때마다 나는 구글 / 그것을 찾아 / 저장 / 스크립트 / 등을 만들어야합니다.
j riv

6

등록 된 리포지토리 또는 PPA에없는 앱 목록을 얻으려면 다음과 같이하십시오.

sudo apt-get install apt-show-versions
apt-show-versions | grep 'No available version'

다음과 같은 텍스트가 출력되어야합니다.

app1 1.0.0.14 installed: No available version in archive
app23 0.3.6 installed: No available version in archive
app332 7.0.9377 installed: No available version in archive

나에게 이것은 효과가 있었고 DEB 패키지를 사용하여 설치하고 Repo 또는 PPA에서 사용할 수없는 세 가지 앱을 보여주었습니다.

모든 프로그램을 확인하는 것은 불가능하다는 것을 기억하십시오 dpkg. 예를 들어 일부 응용 프로그램은 올바른 폴더로 추출하여 설치하거나 다른 응용 프로그램은 독립 실행 형 설치 관리자 저장소 또는 스크립트를 사용합니다. 따라서 가장 좋은 방법은 APT 이외의 방법으로 설치 한 앱 목록을 유지하는 것입니다.


모든 로컬 dpkg설치된 패키지에서 작동 합니다. 한 가지 예외가 있습니다. 정식 파트너 리포지토리를 명확하게 표시하는 skype-bin반면 이 목록 에 apt-cache policy skype-bin표시됩니다. 무슨 일인지 잘 모르겠습니다. 다단계 문제? 여전히 +1 apt-show-versions!
gertvdijk

적성은 이러한 '폐기 된'패키지를 호출합니다. 위의 연대기 주석을 참조하십시오.
Henk Poley

5

당신이있는 경우 적성 설치된 사용,

aptitude search '?obsolete'

또는 짧은 형식

aptitude search '~o'

여기 샘플 출력입니다

i A gcc-4.7-base - GCC, the GNU Compiler Collection (base package)
id  libdb4.7     - Berkeley v4.7 Database Libraries [runtime]
i   libudev0     - libudev shared library

각 줄 의 첫 번째 문자 는 패키지의 현재 상태를 나타냅니다. 가장 일반적인 상태는 다음과 같습니다.

  • p는 시스템에 패키지의 흔적이 없음을 의미합니다.
  • c, 패키지가 삭제되었지만 구성 파일이 시스템에 남아 있음을 의미합니다.
  • i는 패키지가 설치되었음을 의미하며
  • v, 패키지가 가상임을 의미합니다.

두 번째 문자 는 패키지에 대해 수행 할 저장된 조치 (있는 경우)를 나타내며, 그렇지 않으면 공백이 표시됩니다. 가장 일반적인 조치는 다음과 같습니다.

  • i, 패키지가 설치됨을 의미합니다.
  • d, 패키지가 삭제됨을 의미
  • p는 패키지 및 해당 구성 파일이 제거됨을 의미합니다.

세 번째 문자 가 A이면 패키지가 자동으로 설치된 것입니다.

가능한 상태 및 동작 플래그의 전체 목록은 적성 참조 안내서의 패키지 정보 액세스 섹션을 참조하십시오 .


1
aptitude search ?obsoletebash에서 작동 할 수도 있지만 사용해야합니다aptitude search '?obsolete'
AB

출력 파싱에 대한 세부 정보를 추가 할 수 있습니까?
Geek

'? 쓸모없는'이 '~ o'와 다른가?
Sean

@Sean 아니요, 다르지 않습니다. ~ o는 실제로 사용되지 않는 짧은 형식입니다.
Demis Palma ツ

따옴표는 셸에서 파싱됩니다. AB가 의미하는 바는 쉘에서 수행 할 작업을 모르기 때문에 명령 줄에서 이스케이프 처리되지 않은 이상한 문자를 전달해서는 안된다는 것입니다.
Sean

2

Ubuntu 19.10부터는 실행할 수 있습니다

apt list ?obsolete

더 이상 사용되지 않는 패키지 목록을 가져옵니다.

모든 릴리스에 대해 다음 Bash one-liner를 사용할 수 있습니다.

comm -23 <(dpkg-query -W -f '${db:Status-Abbrev}\t${Package}\n' | grep '^.[^nc]' | cut -f2 | sort) <(apt-cache dumpavail | sed -rn 's/^Package: (.*)/\1/p' | sort -u)

이를 위해 추가 패키지를 설치할 필요가 없으며 비교적 빠릅니다. 또한 부분적으로 설치된 패키지를 찾을 수 있지만 구성 파일 만 남아있는 패키지는 찾지 못하지만 쉽게 변경할 수 있습니다. 참고 : 이것은 패키지가 어떤 아키텍처인지 상관하지 않습니다.

리포지토리에서 사용 가능한 것과 다른 버전으로 설치된 패키지를 포함하려는 경우 다음 중 하나를 수행 할 수 있습니다.

현대적 아파트 사용 :

 apt list --installed | awk -F/ '/\[installed,local\]/{print $1}'

또 다른 옵션은 실행하는 것입니다

ubuntu-support-status --show-unsupported

"더 이상 다운로드 할 수 없음 :"섹션에서 패키지 이름을 읽으십시오.


'apt list-수동 설치 | grep -v cosmic '은 오 탐지를 보여줍니다. 이 답변이 훨씬 좋습니다!
TamusJRoyce

1
@TamusJRoyce, 그렇습니다, 나는 편집 후에 지금 그렇게 생각합니다.
jarno

1

조사 할 추가 정보.

우분투 지원 상태 
echo " '수동으로 설치됨'으로 표시된 $ (sudo apt-mark showmanual | wc -l) 패키지."

... ubuntu-support-status 및 apt-mark는 설치가 필요할 수 있습니다.


sudo와 함께 사용할 필요가 없습니다 apt-mark showmanual.
jarno

ubuntu-support-status더 이상 사용되지 않는 패키지 수를 나열하지만 패키지 이름은 표시하지 않습니다.
jarno

1
ubuntu-support-status --help
Hannu

아, 힌트 고마워
jarno

0

더 깨끗한 방법이있을 수 있지만 내 머리 꼭대기에서 할 수 있습니다.

dpkg -l | cut -f 3 -d ' ' > installed
xargs -n 1 --replace=X apt-cache search ^X$ < installed | cut -f 1 -d ' ' > available
diff installed available

installed파일 의 처음 몇 줄을 정리하십시오 . 헤더가 있습니다.

누군가 내 구문 강조를 고칠 수 있다면 보너스 ...


2
dpkg -l설치된 패키지 목록을 얻기 위해 of의 출력을 사용하려는 경우 , dpkg는 설치되지 않은 패키지를 나열 할 것입니다 (아마 제거되었지만 제거되지 않은). . 예를 들어 첫 번째 명령을 변경 dpkg -l | grep '^.[^i]' | cut -f 3 -d ' ' 하면 설치되지 않은 패키지 목록이 반환됩니다. (그러나 한 번은)
스튜

1
또한 apt-cache search someinstalledpackage저장소에서 패키지를 사용할 수없는 경우에도 무언가를 반환하므로 전혀 작동하지 않을 것이라고 생각합니다.
스튜

1
@stew 누군가 결론에 도달했는지 확인하기 위해 여기에 남겨 두겠습니다.하지만 귀하의 대답은 확실히 좋습니다. 당신에게 +1.
Jeff Ferland

@stew dpkg -l | grep '^.[^i]' | cut -f 3 -d ' '는 또한 일부 헤더 행을 인쇄합니다.
jarno

이 답변이 효과가 있더라도 apt-cache search각 패키지마다 별도로 실행되므로 속도가 매우 느립니다 .
jarno

0

언급했듯이 apt-get 검색은 패키지가 여전히 사용 가능한지 확인하는 좋은 방법이 아닙니다. 추가 한 줄에 모든 것을 추가했습니다.

for i in `dpkg -l | grep '^i' | awk '{ print $2 }'`; do apt-cache show $i > /dev/null || echo $i; done

그리고 왜grep '^i'
AB

@AB 좋은 지적; 패키지가 설치되었는지는 알 수 없지만 패키지의 원하는 조치가 설치되어야합니다. 자세한 내용 man dpkg-query은 참조하십시오.
jarno

이것은 매우 느리다
jarno

apt-cache show패키지가 사용 가능한지 확인하는 데 좋지 않습니다. 해당 리포지토리를 비활성화하고 활성화 된 다른 리포지토리에 패키지가없는 경우에도 패키지가 표시됩니다.
jarno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.