ffx component explore
指令會啟動互動式殼層,讓您探索在目標裝置上執行的 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 元件並啟動互動式殼層,請執行下列指令:
ffx component explore COMPONENT_IDENTIFIER
將 COMPONENT_IDENTIFIER 替換為目標元件的端點、網址或執行個體 ID。這項指令也接受這些 ID 的專屬部分比對。
以下範例指令會啟動互動式殼層 ($
),用於探索 /bootstrap/archivst
元件:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$
在本指南的所有範例中,主機機器終端機的殼層提示都會顯示為 [host]$
,而元件互動殼層中的提示則只代表 $
,不含 [host]
前置字串。以不同的方式講,[host]$
表示指令是在主體機器的終端機上執行,$
則表示指令是在連接至目標元件的互動式殼層上執行。
本指南在大多數範例中,也使用 /bootstrap/archivist
(這是一個別名) 做為目標元件。實際上,這個引數應替換為目標元件的元件 ID。
探索元件可用的功能
如要探索目標元件的功能,請前往元件的互動式殼層中的 /ns
目錄。/ns
目錄包含元件的命名空間,與元件所見的完全相同,例如:
[host]$ ffx component explore /bootstrap/archivist
Moniker: /bootstrap/archivist
$ cd ns
$ ls
config
events
pkg
svc
如果您希望殼層的命名空間與元件命名空間相符,請使用 -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.ArchiveAccessor.feedback
fuchsia.diagnostics.ArchiveAccessor.legacy_metrics
fuchsia.diagnostics.ArchiveAccessor.lowpan
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.ArchiveAccessor.feedback
fuchsia.diagnostics.ArchiveAccessor.legacy_metrics
fuchsia.diagnostics.ArchiveAccessor.lowpan
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
在元件殼層中使用自訂指令列工具
如要在目標元件的殼層環境中新增自訂指令列工具,請使用 --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
在元件的殼層上以非互動方式執行指令
如要在元件裝置端殼層中以非互動方式執行指令,並接收 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 |
包含元件執行元件提供的偵錯資訊。 |
如果 --layout namespace
旗標已在 ffx component explore
中設定,則殼層的命名空間會與元件的命名空間相符。
我可以使用 Dash 殼層存取 Zircon 句柄或發出 FIDL 呼叫嗎?
指令解譯器不直接支援這項功能。
如何提出 ffx 元件探索功能要求?
請透過 ComponentFramework > Tools
Issue Tracker 元件提出所有功能要求。