Go to main content

手册页部分 8:系统管理命令

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

coreadm(8)

名称

coreadm - 核心文件管理

用法概要

coreadm [-g pattern] [-G content] [-i pattern] [-I content] 
     [-k pattern] [-d option]... [-e option]...
coreadm [-p pattern] [-P content] [-r policy] [pid]...

描述

coreadm 指定异常终止的进程生成的核心文件的名称和位置。请参见 core(5) 手册页。

只有属于“维护和修复”RBAC 配置文件的用户和角色可以执行第一种格式的“用法概要”。该格式配置系统范围的核心文件选项,包括全局核心文件名称模式、内核区域核心文件名称模式以及 init(8) 进程的核心文件名称模式。所有设置都会永久保存,并在引导时应用。

非特权用户可以执行第二种格式的“用法概要”部分。此语法格式可指定操作系统用于生成每进程核心文件的文件名称模式和核心文件内容。

核心文件名称模式是包含以前导字符 % 指定的嵌入变量的常规文件系统路径名。变量基于操作系统生成核心文件时的有效值进行扩展。可能的嵌入变量如下所示:

%d

可执行文件目录名,最多包含 MAXPATHLEN 个字符

%f

可执行文件名,最多包含 MAXNAMELEN 个字符

%g

有效组 ID

%l

采用内部格式的进程安全许可 (atohexlabel "($plabel)")

%m

机器名 (uname –m)

%n

系统节点名 (uname –n)

%p

进程 ID

%t

time(2) 的十进制值

%u

有效用户 ID

%z

执行的进程所在的区域名称 (zonename)

%%

字面值 %

例如,核心文件名称模式 /var/cores/core.%f.%p 对于进程 ID 为 1234foo 命令,将生成核心文件名称 /var/cores/core.foo.1234

通过使用一系列标记来标识进程的二进制图像的各个部分,可以指定核心文件内容说明。

anon

匿名专用映射,包括非主线程栈的线程栈

ctf

装入的目标文件的 CTF 类型信息部分

data

可写的专用文件映射

dism

DISM 映射

heap

进程堆

ism

ISM 映射

osm

OSM 映射

prune

核心转储删改请求,如 memcntl (MC_CORE_PRUNE_IN) 和 memcntl (MC_CORE_PRUNE_OUT) 请求指定的那样

rodata

只读专用文件映射

shanon

匿名共享映射

shfile

文件支持的共享映射

shm

System V 共享内存

stack

进程栈

symtab

装入的目标文件的符号表部分

text

可读且可执行的专用文件映射

此外,可以使用标记 all 来表示核心文件应该包含进程的二进制图像的所有这些部分。可以使用标记 none 来指示将不包含任何映射。default 标记指示包含系统缺省内容 (stack+heap+shm+ism+dism+osm+text+data+rodata+anon+shanon+ctf+symtab+prune)。无论映射内容是什么,核心文件中始终存在 /proc 文件系统数据结构。

可以使用 +- 来串联标记。例如,核心文件内容 default-ism 将生成包含缺省映射集但不含任何锁定共享内存映射的核心文件。

不带参数的 coreadm 命令将报告当前系统配置,例如:

$ coreadm
    global core file pattern: /var/cores/core.%f.%p
kernel zone core file pattern: /var/cores/%z/kzcore.%t
    global core file content: all
      init core file pattern: core
      init core file content: default
           global core dumps: enabled
      kernel zone core dumps: enabled
      per-process core dumps: enabled
     global setid core dumps: enabled
per-process setid core dumps: disabled
    global core dump logging: disabled
            retention policy: summary
       diagnostic core dumps: enabled

仅带进程 ID 列表的 coreadm 命令将报告每个进程的每进程核心文件名称模式,例如:


$ coreadm 278 5678
  278:   core.%f.%p default
  5678:  /home/george/cores/%f.%p.%t all-ism

只有进程所有者或具有 proc_owner 特权的用户才能以这种方式查询进程。

当进程进行核心转储时,最多会生成四个核心文件:一个在每进程的位置,一个在系统范围的全局位置,还有一个在运行的进程所在区域的全局位置(如果该进程在本地区域而非全局区域中运行)。此外,如果启用诊断选项,诊断核心文件将转储到 /var/diag/<process_uuid>。将根据对应位置的有效选项生成每个核心文件。

生成全局核心文件后,该文件将具有 600 模式,并由超级用户拥有。非特权用户不能检查此类文件。如果按照示例 4 中的过程指定了有标签的核心文件,则此类核心文件在 ADMIN_HIGH 标签下维护。

将通过进程凭证在模式 600 下创建普通的每进程核心文件。进程所有者可以检查此类文件。

进程可以使用 memcntl 来请求在生成核心转储时是包括还是排除其地址空间的区域。如前所述,prune 内容标记控制每进程核心文件和全局核心文件是否支持这些请求。有关更多信息,请参见 memcntl(2) 手册页。

诊断核心文件从异常终止的进程进行转储。这种核心文件仅供 coremond 使用,用于收集有用的数据,以便进行进一步调查。

一直是或者自从上一次 exec(2) 之后成为 setuidsetgid 的进程存在与核心转储相关的安全问题。同样,最初具有超级用户特权但因 setuid(2) 失去这些特权的进程也存在与核心转储相关的安全问题。上述任何一种类型的进程都可以在该进程的当前非特权所有者无法访问的地址空间中包含敏感信息。如果启用 setid 核心文件,则生成的文件将处于模式 600 并由超级用户拥有。如果按照示例 5 中的过程指定了有标签的核心文件,则此类核心文件在 ADMIN_HIGH 标签下维护。

选项

支持以下选项:

–d option...

禁用指定的核心文件选项。有关可能的选项的说明,请参见 –e option

–e option...

启用指定的核心文件选项。将 option 指定为以下类型之一:

全局

允许使用全局核心模式的核心转储。

global-setid

允许使用全局核心模式的 set-id 核心转储。

kzone

允许使用内核区域核心模式的内核区域核心转储。

log

尝试生成全局核心文件时,生成 syslog(3C) 消息。

process

允许使用每进程核心模式的核心转储。

diagnostic

允许具有缺省核心内容和模式的诊断核心转储。

alert

指示 FMA 是否应在收到诊断核心数据之后生成警报事件。

proc-setid

允许使用每进程核心模式的 set-id 核心转储。

–g pattern

将全局核心文件名称模式设置为 pattern。模式必须以 / 开头,可以包含“说明”部分介绍的任何特殊 % 变量。

只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。

–G content

将全局核心文件内容设置为 content。必须使用“说明”部分介绍的标记来指定内容。

只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。

–i pattern

将缺省的每进程核心文件名称设置为 pattern。此选项更改每进程模式仍设置为缺省值的任何进程的每进程模式。已设置了每进程模式的进程或从一个已设置每进程模式的进程派生的进程(使用 –p 选项)不受影响。重新引导后仍会保持此缺省值。

只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。

–I content

将缺省的每进程核心文件内容设置为 content。此选项更改每进程内容仍设置为缺省值的任何进程的每进程内容。已设置了每进程内容的进程或从一个已设置每进程内容的进程派生的进程(使用 –P 选项)不受影响。重新引导后仍会保持此缺省值。

只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。

–p pattern

针对每个指定的进程 ID,将每进程核心文件名称模式设置为 pattern。模式可包含“说明”部分所述的任何特殊 % 变量,且需要以 / 开头。如果模式不是以 / 开头,则会相对于进程生成核心文件时使用的目录对其进行评估。

非特权用户只能将 –p 选项应用于该用户所拥有的进程。具有 proc_owner 特权的用户可以将该选项应用于任何进程。受影响进程的未来子进程将继承每进程核心文件名称模式。请参见 fork(2) 手册页。

如果没有指定进程 ID,则 –p 选项将在父进程(通常是运行 coreadm 的 shell)上将每进程核心文件名称模式设置为 pattern

–P content

针对每个指定的进程 ID,将每进程核心文件内容设置为 content。必须使用“说明”部分介绍的标记来指定内容。

非特权用户只能将 –p 选项应用于该用户所拥有的进程。具有 proc_owner 特权的用户可以将该选项应用于任何进程。受影响进程的未来子进程将继承每进程核心文件名称模式。请参见 fork(2) 手册页。

如果没有指定进程 ID,则 –P 选项将在父进程(通常是运行 coreadm 的 shell)上将每进程文件内容设置为 content

–r policy

设置诊断核心保留策略。可以指定以下选项:

summary

缺省选项。生成 json 摘要文件并记录报告后,将删除诊断核心文件。

all

所有诊断核心文件都将保留。

<n>

指定一个数字,将为某个二进制文件最多保留 n 个诊断核心文件。

<n>d

指定一个数字,诊断核心文件将保留 n 天。

–k pattern

将核心区域内核文件名称模式设置为 pattern。模式必须以 / 开头,可以包含“描述”部分介绍的任何特殊 % 变量。

只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。


注 -  可以在命令行上指定多个 –e–d 选项。只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。

操作数

支持下列操作数:

pid

进程 ID

SMF 属性

支持 config_params 属性组中的以下属性。用户可以使用 coreadm 命令设置或更新这些属性,也可以使用这些属性创建 SMF 配置文件以设置或更新值。

global_enabled (boolean)

允许使用全局核心模式的核心转储(如果该属性设置为 true)。

global_content (string)

将全局核心文件内容设置为 global_content 属性。必须使用“说明”部分介绍的标记来指定内容。

global_pattern (string)

将全局核心文件名称模式设置为 global_pattern 属性。模式应以 / 开头,可以包含“说明”部分介绍的任何特殊 % 变量。

global_setid_enabled (boolean)

允许使用全局核心模式的 set-id 核心转储(如果该属性设置为 true)。

global_log_enabled (boolean)

在尝试生成全局核心文件时生成系统日志消息(如果该属性设置为 true)。有关系统日志消息的更多信息,请参见 syslog(3C) 手册页。

process_enabled (boolean)

允许使用每进程核心模式的核心转储(如果该属性设置为 true)。

process_setid_enabled (boolean)

允许使用每进程核心模式的 set-id 核心转储(如果该属性设置为 true)。

init_content (string)

将缺省的每进程核心文件内容设置为 init_content 属性。此选项更改每进程内容仍设置为缺省值的任何进程的每进程内容。

init_pattern (string)

将缺省的每进程核心文件名称设置为 init_pattern 属性。此选项更改每进程模式仍设置为缺省值的任何进程的每进程模式。

kzone_enabled (boolean)

允许使用内核区域核心模式的内核区域核心转储(如果该属性设置为 true)。

kzone_pattern (string)

将核心区域内核文件名称模式设置为 kzone_pattern 属性。模式必须以 / 开头,可以包含“描述”部分介绍的任何特殊 % 变量。

diagnostic_enabled (boolean)

允许具有缺省核心内容和模式的诊断核心转储(如果该属性设置为 true)。

retention_policy (string)

将诊断核心保留策略设置为 retention_policy 属性。策略可以是以下项之一:summaryall、<n> 和 <n>d

diag_alert_enabled (boolean)

如果该属性设置为 true,FMA 将在收到诊断核心数据之后生成警报事件。

示例

示例 1 设置核心文件名称模式

从用户的 $HOME/.profile$HOME/.login 执行时,以下命令将为登录会话期间运行的所有进程设置核心文件名称模式:


example$  coreadm -p core.%f.%p

请注意,由于省略了进程 ID,因此将在当前运行的 shell 中设置每进程核心文件名称模式,且该模式将被所有子进程继承。

示例 2 将用户文件转储至子目录

以下命令将用户的所有核心转储转储至起始目录的 corefiles 子目录中,通过系统节点名称进行区分。该命令对于使用多个不同机器但具有一个共享起始目录的用户非常有用。


example$  coreadm -p $HOME/corefiles/%n.%f.%p 1234

示例 3 选择全局核心文件系统信息库

以下命令将系统设置为仅当从 /usr/bin/usr/sbin 运行可执行文件时,才在全局系统信息库中生成核心文件。


example# mkdir -p /var/cores/usr/bin
example# mkdir -p /var/cores/usr/sbin
example# coreadm -G all -g /var/cores/%d/%f.%p.%n

示例 4 标记全局核心文件

以下命令将系统设置为生成有标签的核心文件。仅限 root 用户访问全局核心文件。要提供额外的保护,可以使用 ADMIN_HIGH 标签来标记这些文件。在模式中指定了一个已创建且标有 ADMIN_HIGH 的多级别目录。

example# zfs create -o multilevel=on rpool/VARSHARE/cores2
example# setlabel ADMIN_HIGH /var/share/cores2
example# coreadm -g /var/share/cores2/%f.%p
示例 5 在每区域目录中启用内核区域核心转储

以下命令将系统设置为在单独的目录中为每个内核区域生成每内核区域核心映像文件。仅限 root 用户访问内核区域核心文件。

example# mkdir /var/cores/zonename1
example# mkdir /var/cores/zonename2
example#     .
example#     .
example#     .
example# mkdir /var/cores/zonenameN
example# coreadm -k /var/cores/%z/%f.%t -e kzone
示例 6 维护有标签的每进程核心文件

以下命令将用户的会话设置为生成核心文件,这些核心文件使用转储的进程的安全许可进行标记。假定用户的起始目录是多级别文件系统。将为用户可使用的每个安全许可创建单独的子目录。

example$ mkdir $HOME/cores
example$ for l in $(labelcfg list|tr \" -|tr ' ' -); do
> lbl=$(atohexlabel "$echo $l|tr - ' ')")
> mkdir $HOME/cores/$lbl
> setlabel $lbl $HOME/cores/$lbl
> done
example$ mkdir $HOME/cores/ADMIN_LOW
example$ coreadm -p $HOME/cores/%l/%f.%p

如果根据 ADMIN_HIGH 限定了用户,则以下附加步骤适用:

example$ mkdir $HOME/cores/ADMIN_HIGH
example$ setlabel ADMIN_HIGH $HOME/cores/ADMIN_HIGH
示例 7 设置诊断核心文件保留策略

以下命令将系统设置为保留诊断核心文件 30 天。

example# coreadm -r all
example# coreadm -r 30d

文件

/var/cores

为全局核心文件存储提供的目录。

/var/diag

为诊断核心文件存储提供的目录。

退出状态

将返回以下退出值:

0

成功完成。

1

获取或修改系统核心文件配置时发生致命错误。

2

指定的命令行选项无效。

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/core-os

另请参见

gcore(1)pfexec(1)svcs(1)exec(2)fork(2)setuid(2)time(2)memcntl(2)syslog(3C)core(5)prof_attr(5)user_attr(5)attributes(7)smf(7)init(8)svcadm(8)

附注

在本地(非全局)区域中,全局设置应用于该区域中运行的进程。此外,全局区域设置还应用于其他任何区域中运行的进程。

内核区域核心转储会捕获正在运行的内核区域的整个机器映像,这与运行 zoneadm savecore 捕获的转储相同。只有设置了内核区域核心模式时才能启用内核区域核心转储。在内核区域核心模式指定中,执行的目录名 (%d) 和进程标签 (%l) 说明符没有意义,将被忽略。此外,执行的文件名 (%f) 将生成字符串 kzcore

术语全局设置指的是应用于系统或区域整体的设置,但并不一定表示这些设置对全局区域有效。

coreadm 服务由服务管理工具 smf(7) 管理,其服务标识符为:

svc:/system/coreadm:default

可以使用 svcadm(8) 来对此服务执行管理操作(如启用、禁用或请求重新启动)。可以使用 svcs(1) 命令来查询服务的状态。

已经获得 solaris.smf.manage.coreadmsolaris.smf.value.coreadm 授权的用户、角色或配置文件也可以使用 –g–G–i–I–k–e–d 选项。