CLI 基础
CLI 基础
FortiGate CLI 提供命令帮助、自动补全、历史命令、列表编辑和输出过滤功能,可以减少输入错误,并缩小配置或排障信息的查看范围。
命令帮助
- 在提示符下输入
?,列出当前层级可用的命令及说明。 - 输入命令和一个空格后按
?,列出该命令的参数。 - 输入命令及参数后继续按
?,查看后续可用选项。 - 在不完整的命令后直接按
?,查看能够匹配的完整命令。只有一个匹配项时,CLI 会自动补全。
在顶层查看可用命令。
# ? config Configure object. get Get dynamic and system information. show Show configuration. diagnose Diagnose facility. execute Execute static commands. alias Execute alias commands. exit Exit the CLI.逐级查看
get system下的命令。# get ? alertemail Alert email configuration. antivirus AntiVirus configuration. application Application control configuration. authentication authentication automation Automation configuration. ... system System operation configuration. user Authentication configuration. ... # get system ? 3g-modem Configure 3G modem. accprofile Configure access profiles for system administrators. acme Configure ACME client. admin Configure admin users. affinity-interrupt Configure interrupt affinity. ... interface Configure interfaces. ... session System IPv4 session. ... status System status. ...
快捷键
?:列出完整命令或下一层可用命令。Tab:补全当前单词,多次按下可在匹配项之间切换。- 上方向键
↑或Ctrl + P(macOS:Control + P):调出上一条命令。 - 下方向键
↓或Ctrl + N(macOS:Control + N):调出下一条命令。 - 左
←、右→方向键:在当前命令行内移动光标。 Ctrl + A(macOS:Control + A):移到命令行开头。Ctrl + E(macOS:Control + E):移到命令行末尾。Ctrl + B(macOS:Control + B):向前移动一个单词。Ctrl + F(macOS:Control + F):向后移动一个单词。Ctrl + D(macOS:Control + D):删除光标处字符。Ctrl + C(macOS:Control + C):中止当前交互操作。未处于config、edit等交互命令中时,会关闭 CLI 连接。- 反斜杠
\后按回车:将当前命令续写到下一行。
相关信息
- 历史命令只保留在当前会话中。
- 输入多行命令时,需要续行的行末使用
\。最后一行不加续行符,按回车完成输入。
命令树
执行
tree,查看 CLI 命令树。需要保存完整内容时,使用终端软件的日志记录功能。# tree -- -- system |- [datasource] --*name (35) +- type (0,4294967295) |- [timezone] --*name (63) |- <global> -- language |- gui-ipv6 |- gui-replacement-message-groups |- gui-local-out ...在
tree后指定配置路径,可以查看该配置的变量、子命令,以及字段允许的字符串长度或数值范围。例如,查看防火墙地址对象的命令树。# tree firewall address -- [address] --*name (79) |- uuid ... |- subnet ... |- route-tag (1,4294967295) ... |- fqdn (255) |- country (2) ... |- subnet-name (255) ... |- color (0,32) ... +- obsolete (0,4294967295)相关信息
- 字符串字段后的单个数字表示允许的最大字符数。例如,地址对象的
name最多允许 79 个字符,fqdn最多允许 255 个字符。 - 数值字段后的两个数字表示取值范围。例如,
route-tag的范围为1~4294967295,color的范围为0~32。
- 字符串字段后的单个数字表示允许的最大字符数。例如,地址对象的
命令缩写
CLI 允许把命令缩写到不会产生歧义的最短字符。例如,下面两条命令用于查看相同的系统状态。
# get system status
Version: FortiGate-101F v8.0.1,build0245,260909 (GA.F)
...
Operation Mode: NAT
...
Current virtual domain: root
Virtual domain configuration: disable
...
# g sy stat
Version: FortiGate-101F v8.0.1,build0245,260909 (GA.F)
...
Operation Mode: NAT
...
Current virtual domain: root
Virtual domain configuration: disable
...提示
复制配置或编写脚本时,请使用完整命令便于检查。交互操作中使用缩写前,可以通过 ? 确认匹配项。
列表增删
set:用指定值替换整个列表,例如set member user_a user_b user_c user_d。set会替换列表原有的值。例如,用户组已有user_a、user_b、user_c三个成员,执行set member user_d后,列表只剩下user_d。append:在原有列表中追加值,例如append member user_d。select:仅保留指定值,移除其他值,例如select member user_b。unselect:仅移除指定值,例如unselect member user_c。
追加前查询已有用户组
cli_demo_group,当前只有成员user1。# show user group cli_demo_group config user group edit "cli_demo_group" ... set member "user1" next end进入同一个用户组,追加已存在的用户对象
user2。config user group edit "cli_demo_group" append member "user2" next end再次查询该用户组,原成员
user1保留,列表中新增了user2。# show user group cli_demo_group config user group edit "cli_demo_group" ... set member "user1" "user2" next end重要
需要移除成员时使用
unselect,不要用遗漏原有成员的set member命令代替。
环境变量
CLI 支持以下环境变量,变量名区分大小写。
$USERFROM:执行配置的管理员接入方式及 IPv4 地址,例如 SSH 或 GUI CLI 控制台。$USERNAME:执行配置的管理员账户名。$SerialNum:FortiGate 的序列号。
例如,将主机名设置为设备自身的序列号。
config system global
set hostname $SerialNum
end特殊字符
<、>、(、)、#、单引号 '' 和双引号 "" 在多数命令中不能直接作为普通字符串字符使用。字符串包含空格或特殊字符时,可以使用引号包围,或在字符前添加反斜杠转义。
- 字符串中的空格:使用
"CLI Demo"、'CLI Demo'或CLI\ Demo。 - 字符串中的单引号:使用
\'。 - 字符串中的双引号:使用
\"。 - 反斜杠:使用
\\。 - 问号
?:按一次Ctrl + Shift + -(macOS:Control + V),松开组合键后再输入?。这样输入的是字符串中的问号,不会触发命令帮助。每输入一个问号,都需要先按一次该组合键。 - 制表符:按一次
Ctrl + Shift + -(macOS:Control + V),松开后再按Tab,插入实际的 Tab 字符,不触发命令补全。
重要
Ctrl + Shift + -(macOS:Control + V)告诉 FortiGate 将下一次按键作为普通字符输入。该组合键需要传递给设备,如果已被终端绑定为其他操作,应先调整终端的按键设置。- 问号和制表符具有帮助、补全功能,不能依赖复制粘贴输入到 GUI CLI 控制台或部分 SSH 客户端。
字符编码与正则表达式
- 命令和参数名使用英文半角字符,例如
set comment。 - 输入中文备注等内容时,将终端软件的编码设置为 UTF-8,避免乱码。
- 使用正则表达式匹配 HTTP 请求时,表达式与请求内容应使用相同编码,否则可能匹配不到。
输入非 ASCII 字符
打开管理电脑上的终端软件,将发送和接收编码设置为 UTF-8。
登录 FortiGate,例如在地址对象的
comment字段中输入中文“办公网段”。中文属于非 ASCII 字符,命令关键字set comment仍使用 ASCII 字符。config firewall address edit "cli_utf8_test_20261012" set subnet 192.168.10.0 255.255.255.0 set comment "办公网段" next end相关信息
在 CLI 终端输入中文“办公网段”时,命令行会将中文字符显示为由 ASCII 字符组成的转义序列,例如:
set comment "\745\612\636\745\605\654\747\675\621\746\656\665"查询该对象的备注,确认中文完整显示,没有乱码或替换字符。
# show firewall address cli_utf8_test_20261012 config firewall address edit "cli_utf8_test_20261012" ... set comment "办公网段" set subnet 192.168.10.0 255.255.255.0 next end相关信息
如果中文显示异常,先检查终端发送和接收编码是否均为 UTF-8,再重新输入。部分终端对国际字符的支持有限,应先确认终端能力,再决定输入方式。
编辑配置文件
批量修改配置时,可以先备份配置,在外部文本编辑器中修改,再恢复到 FortiGate。
导出设备配置,并另外保留一份未经修改的备份。
相关信息
导出和恢复方法参见系统管理 → 固件与配置管理 → 配置管理 → 配置备份及恢复。
使用支持 UNIX 换行格式的纯文本编辑器(如 Sublime Text)打开配置文件,查找并修改需要调整的配置。
重要
不要修改配置文件第一行,该行包含固件版本和型号信息。型号信息不匹配时,设备会拒绝恢复配置。
#config-version=FG101F-8.0.1-FW-build0245-260909:opmode=0:vdom=0:user=admin #conf_file_ver=6280685297224903 #buildno=0245 #global_vdom=1 #password_hash=PB2CGBQG4JyIxntKU71ceMS863b3CvF0G8uohmb5SY5JRvnzvGOXF1ttJWcnyaTgVp2SOvx81sJDQKKzc4rkwAZROypYWJI4w7gAT27OejjrWI=在维护窗口导入修改后的配置。设备检查型号和命令,有效配置恢复后会重启。
重要
无效命令可能被忽略,不能仅以文件上传成功判断恢复完成。恢复会重启设备并影响业务,应预留 Console 接入和原始备份用于恢复。
重新登录,检查目标配置及相关业务,确认修改结果。