如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Linux 中内核崩溃(kernel panic)设置是否处于激活状态。本实验将指导你使用 sysctl 命令来检查并临时修改 kernel.panic 设置,该设置决定了系统在发生严重错误后的行为。

你还将探索如何通过检查 /etc/sysctl.conf 文件来验证 sysctl 配置,并查看 /proc/sys/kernel 目录中的内核参数,以了解这些设置如何影响系统行为。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/InputandOutputRedirectionGroup(["Input and Output Redirection"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/InputandOutputRedirectionGroup -.-> linux/tee("Output Multiplexing") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/ls -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/cat -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/tee -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/service -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/sudo -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} linux/env -.-> lab-558866{{"如何检查 Linux 中的内核崩溃(Kernel Panic)设置是否生效"}} end

使用 sysctl kernel.panic 检查崩溃(panic)设置

在这一步中,我们将探讨如何使用 sysctl 命令检查内核的崩溃(panic)设置。kernel.panic 设置决定了内核在发生崩溃时的行为。内核崩溃(kernel panic)是一种系统无法恢复的严重错误,通常会导致系统停机或重启。

sysctl 命令是一个强大的工具,用于在运行时读取和修改内核参数。这些参数控制着系统行为的各个方面。

要检查 kernel.panic 设置的当前值,请打开终端并输入以下命令:

sysctl kernel.panic

此命令将显示 kernel.panic 设置的当前值。你应该会看到类似以下的输出:

kernel.panic = 0

0 表示系统在发生内核崩溃后不会自动重启。如果该值大于 0,则表示内核在自动重启前将等待的秒数。

现在,让我们尝试更改 kernel.panic 的值。要将其设置为 10 秒,请使用以下带有 sudo 的命令:

sudo sysctl kernel.panic=10

系统会提示你输入密码。输入密码后,该命令会将 kernel.panic 的值设置为 10。

要验证更改是否成功,请再次运行 sysctl 命令:

sysctl kernel.panic

你现在应该会看到:

kernel.panic = 10

这证实了 kernel.panic 设置已成功修改。

需要注意的是,使用 sysctl 所做的更改是临时的,重启后将会丢失。要使更改永久生效,你需要修改 /etc/sysctl.conf 文件,我们将在下一步中介绍。

使用 cat /etc/sysctl.conf 验证 sysctl 配置

在上一步中,我们学习了如何使用 sysctl 命令临时更改 kernel.panic 设置。然而,这些更改不是持久的,重启后将会丢失。要使更改永久生效,我们需要修改 /etc/sysctl.conf 文件。

/etc/sysctl.conf 文件是 sysctl 的主要配置文件。它包含了一系列内核参数及其期望的值。系统启动时,会读取该文件并应用指定的设置。

要查看 /etc/sysctl.conf 文件的内容,请打开终端并使用 cat 命令:

cat /etc/sysctl.conf

此命令将显示文件的内容。你可能会看到一些注释(以 # 开头的行)和一些现有的设置。

## /etc/sysctl.conf - Configuration file for setting system variables
## See /etc/sysctl.d/ for additional system variables.
## See sysctl.conf (5) for more information.

现在,让我们将 kernel.panic 设置添加到这个文件中。我们将使用 echo 命令将该设置追加到文件末尾。

echo "kernel.panic = 10" | sudo tee -a /etc/sysctl.conf

以下是该命令的详细解释:

  • echo "kernel.panic = 10":这部分创建了我们要添加到文件中的文本。
  • |:这是一个管道符号,它将 echo 命令的输出作为输入传递给 tee 命令。
  • sudo tee -a /etc/sysctl.conftee 命令从标准输入读取内容,并将其同时写入标准输出和一个或多个文件。
    • sudo:允许我们写入需要管理员权限的文件。
    • -a:将文本追加到文件末尾,而不是覆盖文件内容。
    • /etc/sysctl.conf:我们要修改的文件。

运行此命令后,让我们验证该设置是否已添加到文件中。再次使用 cat 命令:

cat /etc/sysctl.conf

你现在应该会在文件末尾看到 kernel.panic = 10 这一行。

## /etc/sysctl.conf - Configuration file for setting system variables
## See /etc/sysctl.d/ for additional system variables.
## See sysctl.conf (5) for more information.
kernel.panic = 10

要应用这些更改,你可以重启系统,也可以运行以下命令:

sudo sysctl -p

此命令告诉 sysctl 读取 /etc/sysctl.conf 文件并应用其中的设置。

现在,kernel.panic 设置在重启后将保持不变。

检查 /proc/sys/kernel 中的内核参数

在这一步中,我们将探索另一种查看内核参数的方法:/proc/sys/kernel 目录。该目录为内核变量提供了一个虚拟文件系统接口。此目录中的每个文件都代表一个内核参数。

/proc 目录是 Linux 中的一个特殊目录,它提供有关正在运行的进程和内核的信息。它是一个虚拟文件系统,这意味着其中的文件和目录实际上并不存在于磁盘上,而是在访问时由内核动态创建的。

要列出 /proc/sys/kernel 目录中的文件,请打开终端并使用 ls 命令:

ls /proc/sys/kernel

此命令将显示一个文件列表,每个文件代表一个内核参数。你会看到像 hostnamedomainnameosreleaseversion 等文件。

acpi_video_flags  ctrl-alt-del  dmesg               hostname       modules_disabled  osrelease  powersave-nap  pty  random  realtime-max-usleep  shmmax  shmall  shmmni  sysrq  tainted  threads-max  unknown_nmi_panic  version  yama

要查看特定内核参数的值,你可以对相应的文件使用 cat 命令。例如,要查看系统的主机名,请使用以下命令:

cat /proc/sys/kernel/hostname

这将显示系统的当前主机名。

labex

同样,要查看内核版本,请使用以下命令:

cat /proc/sys/kernel/osrelease

这将显示内核版本。

5.15.0-76-generic

正如我们在第一步中看到的,你也可以使用 sysctl 命令来查看这些参数。例如,以下命令等同于 cat /proc/sys/kernel/hostname

sysctl kernel.hostname

/proc/sys/kernel 目录提供了大量有关内核配置和状态的信息。对于需要了解和监控系统行为的系统管理员和开发人员来说,这是一个宝贵的资源。

需要注意的是,虽然你可以查看这些文件,但通常需要 root 权限才能直接修改它们。不过,使用 sysctl 是修改内核参数的首选方法,因为它提供了更可控和一致的接口。

总结

在本次实验中,我们探索了如何使用 sysctl 命令在 Linux 中检查并临时修改 kernel.panic 设置。我们了解到,kernel.panic 决定了内核在遇到严重错误时的行为,值为 0 表示不自动重启,大于 0 的值表示重启前的延迟秒数。

我们使用 sysctl kernel.panic 查看当前设置,并使用 sudo sysctl kernel.panic=10 临时更改该设置。本次实验还强调了使用 sysctl 所做的更改在重启后不会保留,若要进行永久配置,需要修改 /etc/sysctl.conf 文件,后续步骤将对此进行介绍。