ffx component explore
命令会启动一个交互式 shell,让您可以探索在目标设备上运行的 Fuchsia 组件的内部结构。
概念
ffx component explore
命令会启动一个范围限定为目标组件的 Dash 进程。通过这个 Dash 流程,您可以:
- 使用熟悉的 POSIX 命令,例如
ls
、cat
和grep
。 - 探索组件的传入和传出功能。
Dash 是 Fuchsia 项目中其他工具(例如 fx shell
、串行控制台、终端窗口和 virtcon
)之前使用的命令解释器。Dash 为开发者提供了 ffx component explore
的熟悉体验,例如 cd
和 ls
,以便在 Fuchsia 组件中浏览聊天室,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ ls
exposed
ns
out
runtime
svc
$
不过,与 fx shell
不同的是,命名空间仅包含组件的传入和传出功能。这意味着,您可以在与组件看到的环境几乎完全相同的环境中进行探索。
探索组件
如需连接到 Fuchsia 组件并启动交互式 shell,请运行以下命令:
ffx component explore COMPONENT_IDENTIFIER
将 COMPONENT_IDENTIFIER 替换为您的目标组件的名称、网址或实例 ID。该命令还接受对这些标识符的唯一部分匹配。
以下示例命令会启动交互式 shell ($
),以便探索 /bootstrap/archivst
组件:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$
在本指南的所有示例中,主机终端的 shell 提示符都表示为 [host]$
,而组件的交互式 shell 的提示符仅表示为 $
,不带 [host]
前缀。也就是说,[host]$
表示该命令在主机的终端上运行,而 $
表示该命令在连接到目标组件的交互式 shell 上运行。
本指南在大多数示例中还使用 /bootstrap/archivist
(一个标识名)作为目标组件。在实践中,此参数应替换为目标组件的组件标识符。
探索组件可用的功能
如需探索目标组件的功能,请在组件的交互式 Shell 中前往 /ns
目录。/ns
目录包含组件的命名空间,与组件看到的完全一样,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd ns
$ ls
config
events
pkg
svc
如果您希望 shell 的命名空间与组件命名空间匹配,请使用 -l
(或 --layout
)标志,例如:
[host]$ ffx component explore /bootstrap/archivist -l namespace
Moniker: /bootstrap/archivist
$ ls
config
events
pkg
svc
如需详细了解这些目录,请参阅 ffx 组件探索中的命名空间根是什么?。
探索组件公开的功能
/exposed
目录包含从目标组件向其父级组件公开的功能,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd exposed
$ ls
diagnostics
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.FeedbackArchiveAccessor
fuchsia.diagnostics.LegacyMetricsArchiveAccessor
fuchsia.diagnostics.LoWPANArchiveAccessor
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log
fuchsia.logger.LogSink
探索组件提供的功能
如果目标组件在设备上运行,则 /out
目录包含该组件当前提供的所有功能,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd out
$ ls
diagnostics
svc
$ cd svc
$ ls
fuchsia.diagnostics.ArchiveAccessor
fuchsia.diagnostics.FeedbackArchiveAccessor
fuchsia.diagnostics.LegacyMetricsArchiveAccessor
fuchsia.diagnostics.LoWPANArchiveAccessor
fuchsia.diagnostics.LogSettings
fuchsia.logger.Log
探索组件的调试运行时数据
如果目标组件在设备上运行,则 /runtime
目录包含组件运行程序提供的调试信息,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd runtime/elf
$ ls
job_id
process_id
process_start_time
$ cat process_id
2542
在组件的 shell 中使用自定义命令行工具
如需将自定义命令行工具添加到目标组件的 shell 环境中,请使用 --tools
标志向 ffx component explore
命令提供工具软件包的网址,例如:
[host]$ ffx component explore /core/network --tools fuchsia-pkg://fuchsia.com/net-cli
Moniker: /core/network
$ net help
Usage: net <command> [<args>]
commands for net-cli
Options:
--help display usage information
Commands:
filter commands for packet filter
if commands for network interfaces
log commands for logging
neigh commands for neighbor tables
route commands for routing tables
dhcp commands for an interfaces dhcp client
dhcpd commands to control a dhcp server
dns commands to control the dns resolver
在组件的 shell 上以非交互方式运行命令
如需在组件的设备端 shell 中以非交互方式运行命令并接收 stdout
、stderr
和退出代码,请使用 -c
(或 --command
)标志,例如:
[host]$ ffx component explore /bootstrap/archivist -c "cat /runtime/elf/process_id"
Moniker: /bootstrap/archivist
2542
附录
为什么我看不到父级的子组件?
Fuchsia 不允许直接从父级访问子组件。以前,使用对组件拓扑的了解访问子组件的功能会使工具变得脆弱,并且依赖于对系统拓扑进行编码的硬编码路径。
我们建议您改用以下替代方案:
- 将功能从子组件明确路由到父组件。
- 探索子组件本身。
这与 ffx 组件运行有何不同?
ffx component run
命令会在组件拓扑内的指定集合中创建并启动组件。不过,ffx component run
不提供任何互动功能。另一方面,ffx component explore
允许以交互方式探索拓扑中的任何现有组件。总而言之,您可以使用 ffx component explore
了解刚刚使用 ffx component run
创建的组件。
ffx 组件探索中的命名空间根是什么?
默认情况下,ffx component explore
命令会在命名空间根目录 (/
) 中创建一个虚拟文件系统,其中包含以下目录:
目录 | 说明 |
---|---|
/.dash |
包含 Dash 所需的二进制文件。 |
/exposed |
包含所有公开的功能。 |
/ns
|
包含组件的命名空间,这个命名空间与组件的命名空间完全相同。 |
/svc |
包含 Dash 所需的功能。 |
如果目标组件在设备上运行,还会显示以下目录:
目录 | 说明 |
---|---|
/out |
包含组件当前提供的所有功能。 |
/runtime |
包含组件运行程序提供的调试信息。 |
如果在 ffx component explore
中设置了 --layout namespace
标志,则 shell 的命名空间将与组件的命名空间匹配。
我可以使用 Dash shell 访问 Zircon 句柄或进行 FIDL 调用吗?
命令解释器无法直接支持此功能。
如何提交 ffx 组件探索功能请求?
请在 ComponentFramework > Tools
问题跟踪器组件下提交所有功能请求。