linux下core文件被系统转存而不能直接找到

原因大概率是被系统转存了

1. 查看core_pattern

cat /proc/sys/kernel/core_pattern
 
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

2. 使用coredumpctl命令列出core的进程信息

3. 使用coredumpctl取出文件

coredumpctl -o 自定义文件名 dump Pid

 

<think>好的,用户之前问了关于`kill`命令的所有选项,现在又想知道转储文件默认保存到哪里。看起来用户可能是在处理程序崩溃或调试的问题,需要生成core dump文件来分析问题。我需要详细解释core dump的默认路径以及相关配置。 首先,我需要确认用户的操作系统,因为不同系统的默认路径可能不同。比如,在Ubuntu上,core文件通常保存在应用程序的工作目录,而CentOS可能放在`/var/lib/systemd/coredump`。不过,用户可能不知道这些差异,所以我应该提到常见系统的默认路径,并建议检查`/proc/sys/kernel/core_pattern`文件来确定确切位置。 另外,用户可能不了解如何配置core dump的生成,比如使用`ulimit -c unlimited`。需要解释这个命令的作用,以及如何永久修改限制。可能还需要提到`sysctl`和`systemd`的配置,特别是如果用户使用的是较新的系统,这些信息会更相关。 用户可能遇到的问题包括找不到core文件,这可能是因为没有设置ulimit,或者core文件被重定向到了其他位置。我应该列举常见原因,比如权限问题、路径不存在,或者core文件被自动清理工具删除。此外,如何自定义core文件的保存路径和格式也是有用的信息,可以通过修改`core_pattern`来实现。 需要确保语言简洁明了,避免使用过多技术术语,但又要足够详细,帮助用户解决问题。可能还需要提醒用户注意系统安全,因为core文件可能包含敏感信息,特别是在生产环境中。</think>### **转储文件Core Dump)默认保存路径详解** 转储文件Core Dump)是程序崩溃时生成的内存快照文件,用于调试分析崩溃原因。其默认保存路径和命名规则因操作系统和配置不同而有所差异,以下是详细说明: --- #### **1. 默认保存位置** - **Linux 系统**: - **默认路径**:程序崩溃时的 **当前工作目录**(即运行程序时所在的目录)。 - **系统级路径**:某些系统(如 CentOS/RHEL)通过 `systemd` 管理时,可能默认保存到 `/var/lib/systemd/coredump/`。 - **特殊配置**:通过 `/proc/sys/kernel/core_pattern` 文件可定义全局保存路径和命名规则(见下文)。 - **macOS 系统**: - **默认路径**:`/cores/` 目录,文件名为 `core.<PID>`(如 `core.1234`)。 - **权限要求**:需通过 `sudo chmod 1777 /cores` 赋予目录写入权限。 --- #### **2. 查看当前系统的核心转储配置** - **检查核心转储路径规则**: ```bash cat /proc/sys/kernel/core_pattern ``` 输出示例: - `core`:默认保存到程序当前目录,文件名为 `core`。 - `|/usr/share/apport/apport %p %s %c %d %P %E`:Ubuntu 系统使用 `apport` 工具处理崩溃,转储文件可能被压缩或转存到 `/var/crash/`。 - `/var/coredumps/core.%e.%p`:自定义路径,文件名包含程序名(`%e`)和进程 PID(`%p`)。 - **检查核心转储是否启用**: ```bash ulimit -c ``` - 输出 `0` 表示禁用,`unlimited` 表示无限制(可生成任意大小的转储文件)。 --- #### **3. 配置核心转储的生成** - **临时启用核心转储**: ```bash ulimit -c unlimited # 允许生成任意大小的转储文件 ``` - **永久启用核心转储**: 1. 编辑 `/etc/security/limits.conf`,添加: ``` * soft core unlimited ``` 2. 重新登录或重启生效。 - **自定义转储路径**(需 root 权限): 1. 修改 `/proc/sys/kernel/core_pattern`(临时生效): ```bash echo "/tmp/core-%e-%p" | sudo tee /proc/sys/kernel/core_pattern ``` 2. 永久生效(编辑 `/etc/sysctl.conf`): ```bash kernel.core_pattern = /var/coredumps/core.%e.%p ``` 保存后执行 `sysctl -p` 生效。 --- #### **4. 常见问题与解决** - **找不到转储文件**的可能原因: - **未启用核心转储**:`ulimit -c` 返回 `0`。 - **权限不足**:程序运行用户对目标目录无写入权限。 - **路径不存在**:`core_pattern` 中定义的目录未创建。 - **文件被覆盖**:同一目录下多次崩溃生成同名 `core` 文件。 - **系统工具拦截**:如 Ubuntu 的 `apport`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值