【问题标题】:Okay to call a file core.foo?可以调用文件 core.foo 吗?
【发布时间】:2020-07-17 22:16:54
【问题描述】:

在类 Unix 操作系统上,永远不应调用文件 core,因为它可能会被核心转储覆盖,因此该名称实际上是为操作系统保留的。

但是对于像core.c 这样的扩展名呢?在我看来,这应该完全没问题; corecore.c 是两个不同的名称。

以上是正确的,像core.foo 这样的名字可以吗?还是我错过了什么?

【问题讨论】:

  • 至少在Linux上,系统管理员可以使用/proc/sys/kernel/core_pattern来配置核心文件的名称,可以包括程序名(%e)和/或主机名(%h) ) 在其他替换中。有些人可能会将其设置为core.%e 之类的东西,如果名为foo 的程序崩溃,它会将核心转储到core.foo。也许不太可能,但将文件命名为其他名称可能更安全。

标签: linux unix filenames


【解决方案1】:

在类 Unix 操作系统上,

即。在符合the single UNIX Specification(或仅符合POSIX) 的系统上。或在属于unix family 的系统上。

永远不应该调用文件核心,因为它可能会被核心转储覆盖,因此该名称实际上是为操作系统保留的。

没有。我不认为有一个规范指定核心转储进入一个名为“核心”的文件。都是“定义的实现”,来自posix

3.117 核心文件

进程异常终止时可能生成的未指定格式的文件。

如果创建了 coredump,它是在哪里创建的,内容是什么以及如何创建,这一切都取决于实现。 [Freebsd 创建了一个名为executable_name.core 的文件。所以不是“在类似unix的操作系统上”。您的句子可以通过将开头更改为:

在内核版本低于 2.6 或 2.4.21 的 linux 系统上永远不应该将文件称为“核心”,因为...

内核 2.6 和 2.4.21 已超过 15 年。较新的内核有/proc/sys/kernel/core_pattern,允许指定文件名和位置,甚至是在核心转储上运行的进程。因此,如果您使用的是低于 2.6 或 2.4.21 的过时内核版本(或者 /proc/sys/kernel/core_pattern 的内容被天真地设置为 core),那么是的,在创建名为“core”的文件时应该小心。

在当今世界,这种行为根本无关紧要,在大多数 Linux 发行版上,systemd-coredump 会处理这一问题并在 /var/lib/systemd/coredump 中创建核心转储。

但是对于像 core.c 这样的扩展呢?

没关系 - corecore.c 是不同的文件名。点不是特殊字符,它只是一个和其他字符一样的字符,core.ccore 的不同之处与 core12coreAB 的不同之处...

以上是否正确,

是的。

像 core.foo 这样的名字可以吗?

没事。

还是我错过了什么?

不知道,但如果你是的话,我当然希望你能找到它。

【讨论】:

  • 非常好的文章。
猜你喜欢
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多