apt를 사용하여 불완전한 패키지를 선택하는 방법은 무엇입니까?

apt를 사용하여 불완전한 패키지를 선택하는 방법은 무엇입니까?

apt(또는 다른 도구)를 사용하여 설치하거나 제거할 다양한 패키지(특히 커널 관련 패키지)를 선택하는 쉬운 방법이 있습니까?

현재 저는 오래된 커널을 제거하려고 합니다 apt remove linux-\*-4.4.0-{40..80}-\*.

이렇게 하면 제거하려는 패키지가 올바르게 선택되지만 아래 양식의 오류로 인해 프로세스가 즉시 중단됩니다 E: Couldn't find any package by glob 'linux-*-4.4.0-65-*'.

실제로 이 정규식에 해당하는 패키지는 없지만 이로 인해 경고 대신 오류가 발생한다는 사실에 상당히 놀랐습니다. 결국, 빈 패키지 세트를 제거하는 것은 간단합니다!

답변1

이 작업은 다음을 사용하여 수행할 수 있습니다.명령 대체. 예를 들어:

apt-get remove $(dpkg -l 'linux-*' | awk '/-4.4.0-([4-7][0-9]|80)-/ { print $2}')

또는 dlocate이미 설치되어 있는 경우:

apt-get remove $(dlocate -k | grep -E -- '-4.4.0-([4-7][0-9]|80)-') 

관련된 솔루션과 달리 xargs명령 대체는 stdin 파일 설명자를 변경하지 않으므로 apt-getapt-get은 정상적으로 입력을 받을 수 있습니다(예: debconf 질문에 대한 답변). xargs표준 입력에서 자체 입력을 얻으므로 대화형 프로그램, 즉 표준 입력의 입력이 필요한 프로그램과 함께 사용하면 안 됩니다.

사용하려면 apt-get먼저 xargs문제가 발생하지 않는지 확인해야 합니다. 예를 들면 다음과 같습니다.

export DEBIAN_FRONTEND=noninteractive
dlocate -k | grep -- -4.4.0- | xargs apt-get remove -y

참고 dlocate: 이 -k옵션은 설치된 모든 커널 및 dkms 관련 패키지를 한 줄에 하나씩 나열합니다( -K동일한 작업을 수행하지만 자세한 dpkg -L형식으로 표시됨). 이 사용법을 가능하게 -k하는 옵션을 추가했지만 dlocate지금까지는 그 뒤에 선택적 정규 표현식 매개변수가 있어야 한다는 생각이 전혀 들지 않았습니다. -k완전히 명백함에도 불구하고 저는 항상 grep.

다음 버전 dlocate(예: 1.08 이상)에서는 dlocate -k '-4.4.0-'출력 파이핑 없이 이를 지원할 것입니다 grep.

답변2

비슷한 것이 효과가 있을 것 같아요 apt list linux-\*-4.4.0-{40..80}-\*|awk -F '/' '{print $1}' |xargs apt remove.

답변3

설치된 패키지 목록 가져오기( linux-image):

dpkg --list | grep  linux-image | awk '{print $2}' > file

정렬/편집 하고 삭제하려는 항목 file만 유지한 후 다음을 실행하세요.linux-image

file=$(cat file)
echo "$file"
apt remove $file

관련 정보