言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. Linux カーネルの更新

Linux カーネルの更新

『Linux』のカーネルはシステムの中核であり、定期的な更新によってセキュリティ脆弱性の修正や新しいハードウェアサポートが提供されます。Ubuntu では apt upgrade、RHEL / AlmaLinux 系では dnf update kernel でカーネルを更新できます。更新後に needs-restarting コマンドで再起動の要否を判断し、不要になった旧カーネルは apt autoremovednf remove で削除してディスクを節約できます。

構文

# ===============================================
#  Ubuntu / Debian 系
# ===============================================

# -----------------------------------------------
#  パッケージリストの更新
# -----------------------------------------------

# apt update
#   → リポジトリのパッケージリストを最新化します
#   → カーネル更新の前に必ず実行してください
#   例: sudo apt update

# -----------------------------------------------
#  カーネルを含む全パッケージの更新
# -----------------------------------------------

# apt upgrade
#   → インストール済みのすべてのパッケージ(カーネル含む)を更新します
#   → 既存パッケージの削除は行いません

# apt full-upgrade
#   → 依存関係の変化に伴い既存パッケージの削除も許可して更新します
#   → カーネルの大きなバージョンアップ時に使用します

# -----------------------------------------------
#  再起動要否の確認(Ubuntu)
# -----------------------------------------------

# needs-restarting
#   → 更新後に再起動が必要なプロセスや、カーネル再起動の要否を表示します
#   → dnf-utils パッケージに含まれています(Ubuntu では yum-utils 相当は不要)
#   → Ubuntu では /var/run/reboot-required ファイルで再起動要否を確認できます
#   例: cat /var/run/reboot-required

# -----------------------------------------------
#  旧カーネルの削除(Ubuntu)
# -----------------------------------------------

# apt autoremove
#   → 不要になった旧カーネルパッケージをまとめて削除します
#   → 再起動して新しいカーネルで起動していることを確認してから実行してください
#   例: sudo apt autoremove

# dpkg --list 'linux-image-*'
#   → インストール済みのカーネルイメージパッケージを一覧表示します
#   → 削除前に現在起動中のカーネルを確認するために使用します


# ===============================================
#  RHEL / AlmaLinux / CentOS Stream 系
# ===============================================

# -----------------------------------------------
#  カーネルの更新
# -----------------------------------------------

# dnf update kernel
#   → カーネルパッケージのみを更新します
#   例: sudo dnf update kernel

# dnf update
#   → システム全体(カーネル含む)を更新します
#   例: sudo dnf update

# -----------------------------------------------
#  再起動要否の確認(RHEL 系)
# -----------------------------------------------

# needs-restarting -r
#   → システム全体の再起動が必要かどうかを判定します
#   → 終了コード 1 が返れば再起動が必要です
#   例: sudo needs-restarting -r

# needs-restarting -r -v
#   → 再起動要否の判定理由を詳しく表示します
#   例: sudo needs-restarting -r -v

# needs-restarting -s
#   → 再起動が必要なサービスの一覧を表示します
#   例: sudo needs-restarting -s

# -----------------------------------------------
#  デフォルトカーネルの確認
# -----------------------------------------------

# grubby --default-kernel
#   → 次回起動時に使用されるデフォルトカーネルのパスを表示します
#   例: grubby --default-kernel

# grubby --default-index
#   → デフォルトカーネルのエントリ番号を表示します

# -----------------------------------------------
#  旧カーネルの削除(RHEL 系)
# -----------------------------------------------

# dnf remove kernel-{バージョン}
#   → 指定した旧カーネルを削除します
#   → uname -r で現在のカーネルを確認してから削除してください
#   例: sudo dnf remove kernel-5.14.0-362.8.1.el9_3.x86_64

# dnf autoremove
#   → 不要になったカーネル関連パッケージをまとめて削除します

構文一覧

コマンド説明
uname -r現在起動中のカーネルバージョンを表示します。更新前後の比較に使用します。
apt update && apt upgradeUbuntu でパッケージリストを更新してからカーネルを含む全パッケージを更新します。
apt full-upgrade既存パッケージの削除を許可して Ubuntu を全体更新します。メジャーバージョンアップ時に使用します。
apt autoremove再起動後に不要になった旧カーネルパッケージを Ubuntu から一括削除します。
dpkg --list 'linux-image-*'Ubuntu にインストール済みのカーネルイメージパッケージを一覧表示します。削除前の確認に使用します。
cat /var/run/reboot-requiredUbuntu でカーネル更新後に再起動が必要かどうかを確認します。ファイルが存在すれば再起動が必要です。
dnf update kernelRHEL 系でカーネルパッケージのみを更新します。
dnf updateRHEL 系でシステム全体(カーネル含む)を更新します。
dnf autoremoveRHEL 系で不要になった旧カーネル関連パッケージを一括削除します。
needs-restarting -rRHEL 系でシステム全体の再起動要否を判定します。終了コード 1 なら再起動が必要です。
needs-restarting -r -v再起動が必要な理由を詳細表示します。どのパッケージの更新が再起動を必要とするかを確認できます。
needs-restarting -s再起動が必要なサービスを一覧表示します。再起動の代わりにサービス単位で再起動できます。
grubby --default-kernel次回起動時に使用されるデフォルトカーネルのパスを表示します。更新後に正しいカーネルが設定されているか確認します。
grubby --default-indexデフォルトカーネルの GRUB エントリ番号を表示します。
rebootシステムを再起動してカーネルを有効化します。shutdown -r now でも同様に再起動できます。

使用例

Ubuntu のカーネル更新手順
# -----------------------------------------------
#  Ubuntu でカーネルを更新する手順
# -----------------------------------------------

# 更新前のカーネルバージョンを確認しておきます
uname -r

# パッケージリストを最新化します
sudo apt update

# カーネルを含む全パッケージを更新します
sudo apt upgrade

# 再起動が必要かどうかを確認します
# ファイルが存在すれば再起動が必要です
cat /var/run/reboot-required

# 再起動が必要なパッケージの詳細を確認します
cat /var/run/reboot-required.pkgs

# システムを再起動します
sudo reboot
$ uname -r
6.5.0-26-generic

$ sudo apt update && sudo apt upgrade -y
(パッケージ更新が実行されます)

$ cat /var/run/reboot-required
*** System restart required ***

$ sudo reboot
(再起動後)

$ uname -r
6.5.0-28-generic
# -----------------------------------------------
#  再起動後に旧カーネルを削除します
# -----------------------------------------------

# 現在起動中のカーネルを確認します(このバージョンは削除しません)
uname -r

# インストール済みのカーネルパッケージを一覧表示します
dpkg --list 'linux-image-*'

# 不要になった旧カーネルを自動削除します
sudo apt autoremove
$ uname -r
6.5.0-28-generic

$ dpkg --list 'linux-image-*'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                         Version             Architecture Description
+++-============================-===================-============-============================
ii  linux-image-6.5.0-26-generic 6.5.0-26.26         amd64        Linux kernel image for 6.5.0
ii  linux-image-6.5.0-28-generic 6.5.0-28.28         amd64        Linux kernel image for 6.5.0

$ sudo apt autoremove
(linux-image-6.5.0-26-generic などの旧カーネルが削除されます)
RHEL / AlmaLinux のカーネル更新手順
# -----------------------------------------------
#  RHEL 系でカーネルを更新する手順
# -----------------------------------------------

# 更新前のカーネルバージョンを確認しておきます
uname -r

# カーネルパッケージのみを更新します(システム全体を更新する場合は dnf update)
sudo dnf update kernel

# 次回起動時のデフォルトカーネルを確認します
grubby --default-kernel

# システムを再起動してカーネルを有効化します
sudo reboot
$ uname -r
5.14.0-362.8.1.el9_3.x86_64

$ sudo dnf update kernel
Dependencies resolved.
========================================================================
 Package                Arch   Version                    Repository Size
========================================================================
Installing:
 kernel                 x86_64 5.14.0-427.13.1.el9_4      baseos     8.4 M
 kernel-core            x86_64 5.14.0-427.13.1.el9_4      baseos      42 M
 kernel-modules         x86_64 5.14.0-427.13.1.el9_4      baseos      36 M
(中略)
Complete!

$ grubby --default-kernel
/boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64

$ sudo reboot
(再起動後)

$ uname -r
5.14.0-427.13.1.el9_4.x86_64
# -----------------------------------------------
#  再起動要否の確認と旧カーネルの削除(RHEL 系)
# -----------------------------------------------

# needs-restarting コマンドで再起動の要否を確認します
#(dnf-utils パッケージに含まれています)
sudo dnf install dnf-utils

# システム全体の再起動が必要かどうかを判定します
# 終了コード 1 が返れば再起動が必要です
sudo needs-restarting -r

# 再起動が必要な理由を詳細表示します
sudo needs-restarting -r -v

# 再起動が必要なサービスの一覧を確認します
# サービスのみを再起動してシステム再起動を回避できる場合があります
sudo needs-restarting -s
$ sudo needs-restarting -r -v
Core libraries or services have been updated since boot-up:
  * kernel

Reboot is required to fully utilize these updates.

$ sudo needs-restarting -s
auditd.service
NetworkManager.service
sshd.service
# -----------------------------------------------
#  再起動後に旧カーネルを削除します(RHEL 系)
# -----------------------------------------------

# 現在起動中のカーネルを確認します
uname -r

# インストール済みのカーネルパッケージを確認します
dnf list installed kernel

# 旧カーネルを指定して削除します
# ※ uname -r で確認した現在のカーネルは削除しないでください
sudo dnf remove kernel-5.14.0-362.8.1.el9_3.x86_64

# または autoremove で不要パッケージをまとめて削除します
sudo dnf autoremove
$ uname -r
5.14.0-427.13.1.el9_4.x86_64

$ dnf list installed kernel
Installed Packages
kernel.x86_64    5.14.0-362.8.1.el9_3    @baseos
kernel.x86_64    5.14.0-427.13.1.el9_4   @baseos

$ sudo dnf remove kernel-5.14.0-362.8.1.el9_3.x86_64
Dependencies resolved.
========================================================================
 Package           Arch   Version                    Repository    Size
========================================================================
Removing:
 kernel            x86_64 5.14.0-362.8.1.el9_3       @baseos       0
 kernel-core       x86_64 5.14.0-362.8.1.el9_3       @baseos       68 M
(中略)
Complete!

概要

カーネル更新はシステムセキュリティの維持に欠かせない作業です。Ubuntu 系では apt を使ってカーネルを含む全パッケージを定期的に更新し、更新後は /var/run/reboot-required の有無で再起動要否を判断します。RHEL 系では dnf でカーネルを更新し、needs-restarting コマンドで再起動の要否を確認できます。needs-restarting -s でサービス単位の再起動一覧も取得できるため、システム全体の再起動を回避できる場合があります。カーネルを更新しても古いカーネルはそのまま残るため、新しいカーネルで正常に起動したことを確認してから旧カーネルを削除することでディスク容量を節約できます。サービスの起動・停止については systemctl のページも併せて参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。