设置 Linux 核心转储位置设置 Linux 核心转储位置设置 Linux 核心转储位置设置 Linux 核心转储位置
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

设置 Linux 核心转储位置

Linux 中的“核心转储”是什么?

当进程意外退出时,它经常会在系统中留下“核心转储”。其中包含一条相关消息。内核充当调试工具,并且是还包含调试信息的内存映像。如果你是一个不想调试程序的用户,你可以直接删除核心:

$ rm core

您也可以保持不变,因为如果转储新核心,旧核心将被覆盖。您还可以使用以下命令停用核心转储:

$ ulimit -c 0

我们可以根据需要生成核心转储(例如,通过调试器),也可以在终止时自动生成它们。由于程序突然退出,内核会启动核心转储。这些可能会发送到其他程序(例如 systemd-coredump)以进行其他操作。

通常情况下,为了更好的稳定性和故障排除而收集数据与从调试数据中泄露敏感信息的风险之间需要权衡。

我们将涵盖什么?

在本文中,我们将了解如何在 Ubuntu 20.04 操作系统上设置核心转储的位置。我们现在就开始吧。

生成核心转储

让我们首先看看如何生成核心转储。为此,我们使用 Linux Kill 命令。首先,找到进程的PID,然后发送kill信号。例如,让我们启动睡眠进程,然后用它的 PID 杀死它:

$ sleep 500

$  kill -s SIGTRAP $(pgrep sleep)

现在您已经了解了如何生成核心转储,您可以在后续部分中使用它。

他们去哪里?

核心转储文件默认命名为 core.pid,并在应用程序的工作目录中创建。这里,pid是进程ID。

使用 ulimit 工具,您可以获取或更改当前 shell 及其之后的任何 shell 的系统资源限制。要验证或配置核心文件大小限制,请使用以下命令:

$ ulimit -c

为了避免分隔或截断核心文件,请确保限制全局设置为“无限制”[1]。这可以通过在 /etc/security/limits.conf 中添加以下行来完成:

root - core unlimited

* - core unlimited

现在,只需注销并重新登录即可将限制应用于您的会话。

自定义核心转储的位置

“sysctl kernel.core_pattern”命令或“/proc/sys/kernel/core_pattern”通常用于设置核心转储的位置。

输入以下命令以查看当前核心模式的设置:

$ cat /proc/sys/kernel/core_pattern

通常,您会发现这里列出的默认值是“core”。

使用“/proc/sys/kernel/core_pattern”设置核心转储位置

让我们使用“/proc/sys/kernel/core_pattern”文件将核心转储临时重定向到新位置,例如 /tmp/dumps/core [2] [3]。现在,请按照以下步骤操作:

第 1 步。首先,创建一个目录来存储核心转储:

$ mkdir -p /tmp/dump/cores/

第 2 步。授予该目录所需的权限:

$ chmod a+x  /tmp/dump/cores/

第 3 步。现在,临时设置核心转储路径:

$ echo '/tmp/dump/cores/core' | sudo tee /proc/sys/kernel/core_pattern

再次将 ulimit 全局设置为无限制。

在这里,我们可以在文件名中附加一些其他信息,如下所示:

$ echo '/tmp/dump/cores/core_%e.%p_%t' | sudo tee /proc/sys/kernel/core_pattern

这里使用的每个参数可以定义如下:

%e: for executable file name

%p: for process id or pid.

%t: for adding a timestamp

第 4 步。接下来,我们必须更改“/etc/sysctl.conf”文件以永久应用以前的设置。打开这个文件:

$ sudo nano /etc/sysctl.conf

现在,将以下行添加到该文件中:

kernel.core_pattern = /tmp/dump/cores/core

另外,您可以添加以下内容来代替此行:

kernel.core_pattern='/tmp/dump/cores/core_%e.%p_%t'

这就是我们需要做的。现在,按照“生成核心转储”部分中所述生成核心转储。之后,我们可以检查我们的核心文件是否生成:

$ ls -l /tmp/dump/cores/

使用“Sysctl”命令设置核心转储位置

正如前面提到的,我们也可以使用 sysctl 命令来达到同样的目的。让我们更改核心转储位置和核心文件的格式:

第 1 步。创建一个新目录并授予所需的权限:

$ mkdir -p /tmp/mydumps

$ chmod a+rwx /tmp/mydumps

第 2 步。现在,只需运行以下命令:

$ sudo sysctl -w kernel.core_pattern=/tmp/mydumps/core_%e.%p_%t

第 3 步。现在,再次像我们之前那样生成核心转储。之后,检查core文件是否生成:

$ ls -l /tmp/mydumps/

在 Ubuntu 系统上,核心转储通常发送到 Apport。对于基于 Red Hat 的系统,它可能会被转发到自动错误报告工具 (ABRT)。最初,我在配置核心转储位置时遇到了问题,因此我不得不在 Ubuntu 20.04 上完全禁用 Appport。或许,红帽等公司也可能存在这种情况。

结论

在本文中,我们了解了如何在 Ubuntu 20.04 操作系统上自定义核心转储的位置。核心转储可以帮助您找出问题所在,但它们对于泄露敏感数据来说非常糟糕。不需要时应禁用核心转储,并且仅在绝对必要时才启用。在这种情况下,请确认文件已安全存储,以便普通用户无法访问数据。此外,无论您做出什么决定,您都应该始终测试您的配置以确保其按预期运行。

不同操作系统对核心转储和默认配置的处理方式不同。最近,大多数Linux系统都采用了systemd,这带来了一些小的规则调整。根据系统的配置方式,您可能需要搜索核心转储。

©2015-2025 艾丽卡 support@alaica.com