【Linux】修改 core 文件大小和路径

发布于:2025-02-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

在 Linux 系统中,默认情况下,核心转储文件(core dump)会生成在当前工作目录下。为了将核心转储文件生成在指定路径下,可以通过以下方法进行配置。


1. 设置核心转储文件路径

Linux 系统提供了两种方式来指定核心转储文件的生成路径:

  1. 通过 /proc/sys/kernel/core_pattern 文件:定义核心转储文件的命名规则和存储路径。
  2. 通过 ulimit 命令:设置核心转储文件的大小限制。

2. 方法一:修改 /proc/sys/kernel/core_pattern

/proc/sys/kernel/core_pattern 文件定义了核心转储文件的命名规则和存储路径。可以通过修改该文件来指定生成路径。

(1)查看当前配置
cat /proc/sys/kernel/core_pattern

默认输出可能是:

core

表示核心转储文件会生成在当前工作目录下,文件名为 core

(2)修改配置

编辑 /proc/sys/kernel/core_pattern 文件,指定核心转储文件的路径和命名规则。例如:

echo "/var/coredump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  • /var/coredump/:指定核心转储文件的存储路径。
  • core-%e-%p-%t:定义核心转储文件的命名规则:
    • %e:可执行文件名。
    • %p:进程 ID。
    • %t:时间戳。
(3)创建目标目录

确保目标目录存在并具有写权限:

sudo mkdir -p /var/coredump
sudo chmod 777 /var/coredump
(4)永久生效

修改 /proc/sys/kernel/core_pattern 是临时生效的,重启后会恢复默认配置。为了永久生效,可以将配置写入 /etc/sysctl.conf 文件:

echo "kernel.core_pattern=/var/coredump/core-%e-%p-%t" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

3. 方法二:设置 ulimit

ulimit 命令用于设置核心转储文件的大小限制。如果未设置或限制过小,核心转储文件可能无法生成。

(1)查看当前限制
ulimit -c
  • 如果输出为 0,表示核心转储文件生成被禁用。
  • 如果输出为 unlimited,表示没有大小限制。
(2)设置核心转储文件大小限制

将核心转储文件大小限制设置为 unlimited

ulimit -c unlimited
(3)永久生效

将以下内容添加到 /etc/security/limits.conf 文件中:

* soft core unlimited
* hard core unlimited

4. 验证配置

(1)触发核心转储

运行一个测试程序并触发核心转储。例如:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = NULL;
    *ptr = 10;  // 触发段错误
    return 0;
}

编译并运行:

gcc -o test test.c
./test
(2)检查核心转储文件

在指定的路径下检查是否生成了核心转储文件:

ls /var/coredump

输出示例:

core-test-12345-1698765432

5. 总结

  • 修改 /proc/sys/kernel/core_pattern:指定核心转储文件的路径和命名规则。
  • 设置 ulimit:确保核心转储文件的大小限制足够。
  • 永久生效:将配置写入 /etc/sysctl.conf/etc/security/limits.conf

通过以上方法,你可以将核心转储文件生成在指定路径下,便于管理和调试。