基础命令
busctl
:可用于内省与监视D-Bus总线。
调试格式:busctl
[选项][命令][名称]
命令:
list: 显示总线上的所有peer,busctl未指定命令时默认调用list。
—show-machine: 显示总线上的所有peer,额外显示一个“MACHINE”列。
—unique: 仅显示类似“:1.1”格式的唯一名(UniqueName)。
—acquired:与—unique选项相反,仅显示易读名(well-know name)。
—activatable:仅显示当前未被激活并且可以在被访问时自动激活的peer。
status: 如果SERVICE是一个总线服务的唯一名或易读名,那么显示该服务的进程信息及凭证信息。如果SERVICE是一个进程的PID,那么显示该进程的进程信息及凭证信息。如果未指定SERVICE参数,那么显示总线所有者的进程信息及凭证信息。
monitor: 监视已交换的消息,可使用Ctrl-C中断监视。如果未指定SERVICE参数,那么显示总线上的所有消息。如果指定了SERVICE参数(唯一名或易读名),那么仅显示到达此peer或者从此peer发出的消息。
—match=MATCH:在使用monitor命令监视已交换的消息时,仅显示与MATCH匹配的消息。
capture: 与monitor命令类似,不同之处在于以pcap格式输出。
—size=:指定允许捕获的最大消息尺寸,默认值是4096字节。
tree: 显示服务的对象树。如果给出了SERVICE参数,那么仅显示指定服务的对象树,否则显示总线上所有具有易读名服务的对象树。
—list:不以树形缩进显示,而是以平铺列表的格式显示。
introspect: 显示SERVICE服务上OBJECT对象(以路径表示)的interface,method,property, signal值。如果指定了INTERFACE参数,那么仅输出指定接口上的成员。
call: 调用一个方法并显示应答。必须指定服务名称(SERVICE)、对象路径(OBJECT)、接口名称(INTERFACE)、方法名称(METHOD)。如果要给方法传递参数, 那么必须使用类型标记(SIGNATURE)后跟一个参数字符串(ARGUMENT)。可以使用“—quiet”选项抑制输出。
—quiet:禁止显示应答消息。注意:错误消息依然会被显示出来,并且依然可以用返回值判断成败。
—allow-interactive-authorization=BOOL:设置服务在执行操作时,是否应该强制进行交互式授权(在安全策略已配置的时候)。 默认是“yes”。
—timeout=SECS:设置等候方法完成的最大秒数。 注意,此处的超时设置对—expect- reply=no无效。可使用明确的时间单位后缀:us,ms,s,min,h,d,w,month,y。
get-property: 显示对象属性的当前值。必须指定服务名称(SERVICE)、对象路径(OBJECT)、接口名称(INTERFACE)、属性名称(PROPERTY)。如果同时指定了多个属性名称,那么将按照每行一个,依次显示每个属性的当前值。
set-property: 设置对象属性的当前值。必须指定下列参数:服务名称(SERVICE)、对象路径(OBJECT)、接口名称(INTERFACE)、属性名称(PROPERTY)、类型标记(SIGNATURE)、参数字符串(ARGUMENT)。
help: 显示语法帮助。
其他选项:
—verbose:与call或get-property命令连用,表示以详细模式显示输出。
—augment-creds=BOOL:设置list/status命令报告的凭据数据是否应该被扩展为包含来自/proc的数据。若设为“yes”(默认值),那么显示的数据可能会不一致,因为/proc中的数据可能会更新。
—user:与当前调用用户的用户服务管理器通信,而不是默认的系统服务管理器。
—system:与系统服务管理器通信,这是默认值。
-H, —host=:操作指定的远程主机。可以仅指定一个主机名(hostname),也可以使用 “username@hostname”格式。hostname后面还可以加上容器名(以冒号分隔),也就是形如“hostname:container”的格式,以表示直接连接到指定主机的指定容器内。操作将通过SSH协议进行,以确保安全。可以通过“machinectl -H HOST”命令列出远程主机上的所有容器名称。
-M, —machine=:在本地容器内执行操作,必须明确指定容器的名称。
—no-pager:不将程序的输出内容管道给分页程序。
—no-legend:不输出列标题,也就是不在输出列表的头部和尾部显示字段的名称。
-h, —help:显示帮助信息。
—version:显示版本信息。
参数格式
call与set-property命令都接收一个类型标记(SIGNATURE)与多个参数字符串(ARGUMENT)。对于简单类型(Basic types),类型标记(SIGNATURE)后面的每个参数(ARGUMENT)都必须是参数值的字符串表示。布尔类型真值可以表示为“true”,“yes”,“on”,“1”;布尔类型假值可以表示为“false”,“no”,“off”,“0”。对于数组,先是一个表示数组项数的数字,然后跟着数组中的每一项。对于变量,先是一个表示变量类型的字符,然后跟着变量的值。对于字典与结构,直接指定其内容即可。
例如:
“s jawoll”:是一个简单的字符串“jawoll”,“s”是类型标记,“jawoll”是参数字符串。
“as 3 hello world foobar”:是一个字符串数组,包含3个成员,分别是“hello”,“world”,“foobar”。
“a{sv} 3 One s Eins Two u 2 Yes b true”:是一个字典数组,该字典将字符串映射为变量,包含3个成员,分别是:字符串“One”映射到字符串“Eins”,字符串“Two”映射到32位无符号整数“2”,字符串“Yes”映射到布尔真值。
注意,call,get-property,introspect命令在输出应答时也同样是这个格式。由于这个格式过于精简不易理解,所以call与get-property命令提供—verbose选项用于输出详细的、易于理解的多行输出格式。
调试示例
例一 读写属性
下面的两个命令,首先写入一个属性,然后再读取它。 该属性位于 “org.freedesktop.systemd1”服务的“/org/freedesktop/systemd1”对象中, 属性名是“org.freedesktop.systemd1.Manager”接口上的“LogLevel”,此属性是一个简单的字符串。
(busctl命令支持TAB键补全,在输入“busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager”后,按TAB键可列出所有属性。)
例二 精简输出与详细输出
下面的两个命令,两次读取同一个属性(字符串数组类型), 第一次以精简格式显示, 第二次以详细格式显示:
故障库
参见sysmnt的dbus模块介绍篇