LoginSignup
2
2

More than 5 years have passed since last update.

Ubuntuで最新のカーネル以外をアンインストールする

Last updated at Posted at 2017-05-13

目的

Ubuntuカーネルを自動で最新バージョン以外をアンインストールしたい。

検証環境

Ubuntu 16.04.2

手順

インストールされているカーネルを調べる

dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic"

これにより、以下のような結果が得られる。

$ dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic"
linux-image-4.8.0-36-generic
linux-image-4.8.0-51-generic

バージョンのみを抽出する

dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq
$ dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq
4.8.0-36
4.8.0-51

最新のバージョンを抽出する

自然数化して降順ソートした結果の先頭を取得する。

dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq | sort -n -r | head -1

以下のような結果となる。

$ dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq | sort -n -r | head -1
4.8.0-51

最新以外のカーネルバージョンを抽出する

grep-v オプションに最新のバージョンを指定して除外する。

dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq |
$(dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq | sort -n -r | head -1)

抽出した最新以外のカーネルバージョンに関連するパッケージを削除する

linux-headers-linux-image- から始まるパッケージを autoremove --purge オプションを付けて apt (apt-getでもaptitudeでも可) コマンドで削除する

apt autoremove --purge -y linux-headers-<上記までで抽出した最新以外のバージョン>*
apt autoremove --purge -y linux-image-<上記までで抽出した最新以外のバージョン>*

シェルスクリプト化してみる

USER=$(whoami)

if [ ! ${USER} = "root" ]
then
  echo "Please use with sudo"
  exit 1
fi

LATEST=$(dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq | sort -n -r | head -1)

TARGETS=$(dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq | grep -E -v ${LATEST})

for pkg_ver in ${TARGETS}
do
  for pkg_prefix in linux-headers- linux-image-
  do
    apt autoremove --purge -y ${pkg_prefix}${pkg_ver}*
  done
done

update-grub

dpkg --list | grep -E -o "linux-image-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-generic" | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" | uniq を先に実行して共通化したい。。。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2