더 이상 사용되지 않는 패키지를 식별하고 삭제하는 방법은 무엇입니까? [폐쇄]

더 이상 사용되지 않는 패키지를 식별하고 삭제하는 방법은 무엇입니까? [폐쇄]

어떤 이유에서인지 Linux 배포판(Fedora/CentOS/Debian/Ubuntu/Arch/...)에 많은 패키지가 설치되어 있습니다. 그 중 일부는 일회용입니다. 하지만 패키지 관리자를 사용하여 전체 시스템 업그레이드를 실행할 때마다 업그레이드에 포함됩니다. 이 경우 일회성 패킷은 더 이상 실제로 필요하지 않기 때문에 시간과 대역폭 낭비일 뿐입니다. 그래서 그게 뭔지 알아내고 삭제하고 싶어요.

일부 패키지 관리자는 패키지를 종속성으로 설치하여 다운스트림 패키지가 제거될 때 자동으로 제거되도록 허용한다는 것을 알고 있습니다. 하지만 가끔 패키지를 설치하는 동안 이 옵션을 추가하는 것을 잊어버리고 그 중 일부는 패키지에서 사용되지 않습니다.종속성옵션. 그래서 현재 상황은 어떤 패키지가 더 이상 사용되지 않는지 알 수 없다는 것입니다.

이러한 패키지를 식별하는 한 가지 방법은 패키지 파일의 마지막 액세스 시간을 추적하는 것입니다. 하지만 널리 사용되는 패키지 관리자(dnf/yum/apt/pacman/...)를 사용하여 이 작업을 수행하는 방법을 모르겠습니다. 그들 중에 일회용 패키지를 식별하고 제거할 수 있는 이와 유사한 기능이 있습니까? 이를 수행하는 번거로운 방법은 모든 패키지의 전체 파일 목록을 가져와서 액세스 시간을 기준으로 정렬하는 것입니다. 하지만 그 전에, 나는 바퀴를 재발명하지 않는지 확인하고 싶습니다(즉, 패키지 관리자가 이미 가지고 있는 것을 만드는 것).

답변1

Debian/Ubuntu에서는 특정 패키지에 있는 모든 파일에 대한 가장 최근 액세스 시간을 제공합니다.

function package_access { dpkg-query -L $1 | xargs stat -c '%F %n' | grep '^regular file ' | sed 's/^regular file //' | xargs stat -c '%x' | sort -r | head -1 ; }

(이름에 공백/괄호가 없는 경우)

따라서 다음을 통해 패키지와 마지막 액세스 시간을 나열할 수 있습니다.

( for p in $(dpkg-query -f '${Package}\n' --show); do echo "$(package_access "$p") $p" ; done ) | sort -r

(한동안 실행되고 많은 쓰레기가 출력됩니다. 위의 경고를 참조하세요)

이상하게도 2017년 5월에 Ubuntu 16.04를 설치했을 때 2007년으로 거슬러 올라가는 패키지에 대한 액세스가 발견되었습니다( tk실제 파일이었기 때문입니다 /usr/share/doc/tk/copyright). 그러나 이러한 패키지의 파일에 액세스하면 package_access 출력이 현재 상태로 되돌아갑니다.

관련 정보