그래도 조금 더 깁니다. 내가 당신을 위해 그것을 분해합니다 :
dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}'
Malte가 제안한 것처럼. 관련 커널 파일을 나열합니다.
egrep '[0-9]+\.[0-9]+\.[0-9]+'
Malte는 버전 번호를 찾아 커널 파일 만 선택하는보다 안전한 방법으로 제안했습니다.
이제 이미지와 헤더 패키지를 모두 나열 할 수 있으므로 패키지 이름이 다를 수 있으므로 정렬에 필요한 해결 방법 awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}'
이 있습니다. 결과는 다음과 같이 원래 패키지 이름 앞에 버전 번호가있는 새 열입니다.
$ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}'
3.11.0-23 linux-headers-3.11.0-23
3.11.0-23 linux-headers-3.11.0-23-generic
3.11.0-24 linux-headers-3.11.0-24
3.11.0-24 linux-headers-3.11.0-24-generic
3.11.0-26 linux-headers-3.11.0-26
3.11.0-26 linux-headers-3.11.0-26-generic
3.11.0-23 linux-image-3.11.0-23-generic
3.11.0-24 linux-image-3.11.0-24-generic
3.11.0-26 linux-image-3.11.0-26-generic
3.8.0-35 linux-image-3.8.0-35-generic
3.11.0-23 linux-image-extra-3.11.0-23-generic
3.11.0-24 linux-image-extra-3.11.0-24-generic
3.11.0-26 linux-image-extra-3.11.0-26-generic
3.8.0-35 linux-image-extra-3.8.0-35-generic
이제 현재 실행중인 이미지보다 최신 이미지가 제거되지 않도록 목록을 정렬해야합니다. sort -k1,1 --version-sort -r
우리에게 이것을 제공 :
$ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r
3.11.0-26 linux-image-extra-3.11.0-26-generic
3.11.0-26 linux-image-3.11.0-26-generic
3.11.0-26 linux-headers-3.11.0-26-generic
3.11.0-26 linux-headers-3.11.0-26
3.11.0-24 linux-image-extra-3.11.0-24-generic
3.11.0-24 linux-image-3.11.0-24-generic
3.11.0-24 linux-headers-3.11.0-24-generic
3.11.0-24 linux-headers-3.11.0-24
3.11.0-23 linux-image-extra-3.11.0-23-generic
3.11.0-23 linux-image-3.11.0-23-generic
3.11.0-23 linux-headers-3.11.0-23-generic
3.11.0-23 linux-headers-3.11.0-23
3.8.0-35 linux-image-extra-3.8.0-35-generic
3.8.0-35 linux-image-3.8.0-35-generic
현재 및 최신 커널 파일을 제거하십시오. sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"`
을 제공하십시오.
$ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"`
3.11.0-23 linux-image-extra-3.11.0-23-generic
3.11.0-23 linux-image-3.11.0-23-generic
3.11.0-23 linux-headers-3.11.0-23-generic
3.11.0-23 linux-headers-3.11.0-23
3.8.0-35 linux-image-extra-3.8.0-35-generic
3.8.0-35 linux-image-3.8.0-35-generic
이제 추가 한 첫 번째 열을 제거하십시오. awk '{print $2}'
원하는 것을 정확히 얻으십시오.
$ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}'
linux-image-extra-3.11.0-23-generic
linux-image-3.11.0-23-generic
linux-headers-3.11.0-23-generic
linux-headers-3.11.0-23
linux-image-extra-3.8.0-35-generic
linux-image-3.8.0-35-generic
이제 이것을 패키지 관리자에 공급하여 모든 것을 자동으로 제거하고 grub을 재구성 할 수 있습니다.
드라 이런을 먼저하는 것이 좋습니다 (스크립팅 목적으로 사용하기에는 환경이 크지 않을 경우 실용적이지 않을 수 있습니다)
dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}' | xargs sudo apt-get --dry-run remove
이제 모든 것이 좋아 보인다면 실제로 다음과 같이 제거하십시오.
dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}' | xargs sudo apt-get -y purge
이것이 어떻게 작동하는지, 개선 할 수 있는지 알려주십시오.