Console

Console 使用文本终端提供对 MikroTik RouterOS 配置和管理功能的文本访问,可以远程通过串口、telnet、SSH 或 WinBox 内的 console 屏幕,也可以直接使用显示器加键盘。它涵盖在分级菜单层级中执行命令、登录选项、终端定制、横幅消息、快速输入、safe mode 和脚本编写。

Console

概述

Console 用于通过文本终端访问 MikroTik Router 的配置和管理功能,可以远程通过串口、telnet、SSH 或 WinBox 内的 console 屏幕,也可以直接使用显示器加键盘。Console 也用于编写脚本。本手册描述 console 的一般操作原理。有关一些高级 console 命令以及如何编写脚本,请参阅 Scripting Manual。

登录选项

Console 登录选项用于启用或禁用各种 console 功能,例如颜色、终端检测等。

额外的登录参数可以附加在登录名之后,用 '+' 号分隔。

    login_name ::= user_name [ '+' parameters ]
    parameters ::= parameter [ parameters ]
    parameter ::= [ number ] 'a'..'z'
    number ::= '0'..'9' [ number ]

如果参数不存在,则使用默认值。如果数字不存在,则使用该参数的隐式值。

示例:admin+ct80w - 禁用 console 颜色、禁用自动检测,然后把终端宽度设为 80。

参数默认隐式说明
"w"autoauto设置终端宽度
"h"autoauto设置终端高度
"c"onoff禁用/启用 console 颜色
"t"offon禁用终端能力自动检测
"e"onoff启用 "dumb" 终端模式

横幅与消息

登录过程在验证用户名和密码后显示 MikroTik 横幅和简短帮助。

  MMM      MMM       KKK                          TTTTTTTTTTT      KKK
  MMMM    MMMM       KKK                          TTTTTTTTTTT      KKK
  MMM MMMM MMM  III  KKK  KKK  RRRRRR     OOOOOO      TTT     III  KKK  KKK
  MMM  MM  MMM  III  KKKKK     RRR  RRR  OOO  OOO     TTT     III  KKKKK
  MMM      MMM  III  KKK KKK   RRRRRR    OOO  OOO     TTT     III  KKK KKK
  MMM      MMM  III  KKK  KKK  RRR  RRR   OOOOOO      TTT     III  KKK  KKK

  MikroTik RouterOS 7.23.2 (c) 1999-2026       https://www.mikrotik.com/

Press F1 for help

横幅之后可以打印其他重要信息,例如由另一位管理员设置的 /system/note、最后几条关键日志消息、demo 版本升级提醒,以及默认配置说明。

例如,会打印 demo 授权提示和最后几条关键消息:

UPGRADE NOW FOR FULL SUPPORT
----------------------------
FULL SUPPORT benefits:
- receive technical support
- one year feature support
- one year online upgrades
    (avoid re-installation and re-configuring your router)
To upgrade, register your license "software ID"
on our account server www.mikrotik.com

Current installation "software ID": ABCD-456

Please press "Enter" to continue!

2007-12-10 10:40:06 system,error,critical login failure for user root from 10.0.0.1 via telnet
2007-12-10 10:40:07 system,error,critical login failure for user root from 10.0.0.1 via telnet
2007-12-10 10:40:09 system,error,critical login failure for user test from 10.0.0.1 via telnet

命令提示符

在成功登录序列的末尾,登录过程会打印显示命令提示符的横幅,并把控制权交给用户。

默认命令提示符由用户名、系统 identity 和当前命令路径组成。

例如,把当前路径从根目录切换到 interface,然后回到根目录:

  [admin@MikroTik] > interface [enter]
  [admin@MikroTik] /interface> / [enter]
  [admin@MikroTik] >

使用 <kbd>↑</kbd> 从命令历史中调出之前的命令(添加了敏感数据(如密码)的命令不会出现在历史中)。如果调出的是多行命令,按 <kbd>F8</kbd> 展开它。使用 <kbd>Tab</kbd> 自动补全命令并查看可用选项——按两次 <kbd>Tab</kbd> 会显示所有可能的补全。按 <kbd>Enter</kbd> 执行命令,<kbd>Control</kbd>+<kbd>C</kbd> 中断当前正在运行的命令并返回提示符,<kbd>F1</kbd> 显示内置帮助。

登出 console 最简单的方式是在命令行为空时在命令提示符处按 <kbd>Control</kbd>+<kbd>D</kbd>(你可以用 Control-C 取消当前命令并得到空行,因此在大多数情况下 Control-C 后接 <kbd>Control</kbd>+<kbd>D</kbd> 会把你登出)。

可以编写由多行组成的命令。当输入的行不是完整命令且预期有更多输入时,console 会显示续行提示符,列出所有未闭合的圆括号、花括号、方括号和引号,如果上一行以反斜杠加空白结尾,还会显示一个尾部反斜杠。

    [admin@MikroTik] > {
    {... :put (\
    {(\... 1+2)}
    3

当你编辑这类多行输入时,提示符会显示当前行号和总行数,而不是通常的用户名和系统名。

line 2 of 3> :put (\

有时命令会要求用户提供额外输入。例如,/password 命令会要求输入旧密码和新密码。在这种情况下,提示符会显示所请求值的名称,后跟一个冒号和一个空格。

    [admin@MikroTik] > /password
    old password: ******
    new password: **********
    retype new password: **********

层级结构

Console 允许使用文本命令配置路由器的设置。由于可用命令很多,它们被分成组织成层级菜单级别的组。某个菜单级别的名称反映了相关章节中可访问的配置信息。

例如,你可以执行 /ip/route/print 命令:

[admin@MikroTik] > /ip/route/print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
 # DST-ADDRESS PREF-SRC G GATEWAY DIS INTE... 
 0 A S 0.0.0.0/0 r 10.0.3.1 1 bridge1 
 1 ADC 1.0.1.0/24 1.0.1.1 0 bridge1 
 2 ADC 1.0.2.0/24 1.0.2.1 0 ether3 
 3 ADC 10.0.3.0/24 10.0.3.144 0 bridge1 
 4 ADC 10.10.10.0/24 10.10.10.1 0 wlan1 
[admin@MikroTik] >

与其在每条命令前输入 /ip/route 路径,不如只输入一次路径以进入菜单层级的这个特定分支。因此,上一个示例也可以这样执行:

[admin@MikroTik] > /ip/route 
[admin@MikroTik] /ip/route> print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
 B - blackhole, U - unreachable, P - prohibit # 
DST-ADDRESS PREF-SRC G GATEWAY DIS INTE... 
 0 A S 0.0.0.0/0 r 10.0.3.1 1 bridge1 
 1 ADC 1.0.1.0/24 1.0.1.1 0 bridge1 
 2 ADC 1.0.2.0/24 1.0.2.1 0 ether3 
 3 ADC 10.0.3.0/24 10.0.3.144 0 bridge1 
 4 ADC 10.10.10.0/24 10.10.10.1 0 wlan1 
[admin@MikroTik] /ip/route>

路径中的每个词都可以用空格或 / 分隔。

请注意提示符会变化,以反映你当前位于菜单层级中的位置。要再次移到顶层,请输入 /

[admin@MikroTik] > /ip/route 
[admin@MikroTik] /ip/route> /
[admin@MikroTik] >

要上移一个命令级别,请输入 ..

[admin@MikroTik] /ip/route> .. 
[admin@MikroTik] /ip>

你也可以使用 / 和 .. 从其他菜单级别执行命令而不改变当前级别:

[admin@MikroTik] /ip/route> /ping 10.0.0.1 
10.0.0.1 ping timeout 
2 packets transmitted, 0 packets received, 100% packet loss 
[admin@MikroTik] /ip/firewall/nat> ../service-port/print
Flags: X - disabled, I - invalid 
# NAME PORTS 
0 ftp 21 
1 tftp 69 
2 irc 6667 
3 h323 
4 sip 
5 pptp 
[admin@MikroTik] /ip/firewall/nat>

条目名称与编号

许多命令级别操作条目数组:接口、路由、用户等。这类数组会以相似的列表形式显示。列表中的所有条目都有一个条目编号,后跟标志和参数值。

要更改条目的属性,你必须使用 set 命令并指定条目的名称或编号。

条目名称

有些列表的每个条目都分配有特定名称。例如 /interface 或 /user 级别。在这些地方你可以使用条目名称代替条目编号。

在按名称访问条目之前,你不必使用 print 命令,因为与编号不同,名称不是由 console 内部分配的,而是条目的属性。因此,它们不会自行改变。但是,当多个用户同时更改路由器配置时,可能会出现各种难以预料的情况。一般来说,条目名称比编号更“稳定”,也更具信息性,因此在编写 console 脚本时,你应优先使用名称而非编号。

条目编号

条目编号由 print 命令分配,并非固定不变——两次连续的 print 命令可能以不同顺序排列条目。但最后一次 print 命令的结果会被记住,因此一旦分配,即使经过 add、remove 和 move 操作,条目编号仍可使用。条目编号按会话分配;在你退出 console 或执行下一次 print 命令之前,它们保持不变。此外,编号为每个条目列表单独分配,因此例如 /ip/address/print 不会改变 /interface 列表的编号。

可以在不运行 print 命令的情况下使用条目编号。编号的分配就如同执行了 print 命令一样。

你可以为某些命令指定多个条目作为目标。几乎在你可以写条目编号的所有地方,你都可以写一组编号。

[admin@MikroTik] > /interface/print 
Flags: X - disabled, D - dynamic, R - running 
# NAME TYPE MTU 
0 R ether1 ether 1500 
1 R ether2 ether 1500 
2 R ether3 ether 1500 
3 R ether4 ether 1500 
[admin@MikroTik] > /interface/set 0,1,2 mtu=1460 
[admin@MikroTik] > /interface/print
 Flags: X - disabled, D - dynamic, R - running 
# NAME TYPE MTU 
0 R ether1 ether 1460 
1 R ether2 ether 1460 
2 R ether3 ether 1460 
3 R ether4 ether 1500 
[admin@MikroTik] >

警告

不要在脚本中使用条目编号。在 scheduler、scripts 等中编辑条目时,这不是一种可靠的方式。请改用 find 命令。更多信息请参阅脚本编写文档。另请参阅脚本示例。

通用命令

有些命令几乎对所有菜单级别都通用,即:add、edit、find、move、print、remove、set、reset、export、get、enable、disable 和 comment。这些命令在不同菜单级别中的行为相似。详细描述和参数请参阅 Scripting Commands 参考。

信息

你可以组合命令。以下是同一命令的两种变体,通过查找注释来放置一条新的防火墙过滤器条目:

/ip/firewall/filter/add chain=forward place-before=[find where comment=CommentX]
/ip/firewall/filter/add chain=forward place-before="CommentX"

编辑模式

Console 行编辑器以多行模式或单行模式工作。

在多行模式下,行编辑器显示完整输入行,即使它长于单个终端行。它还使用全屏编辑器编辑大型文本值,例如脚本。

在单行模式下,仅使用一个终端行进行行编辑,长行在光标附近被截断显示。此模式下不使用全屏编辑器。

模式的选择取决于检测到的终端能力。

输入模式

可以在多种输入模式之间切换:

  • Normal 模式 - 由普通命令提示符指示。
  • Safe 模式 - 由命令提示符后的单词 SAFE 指示。
  • Hot-lock 模式 - 由额外的黄色 > 指示。自动补全命令。

Safe Mode(安全模式)

有时可能以某种方式更改路由器配置,导致路由器无法访问(本地 console 除外)。这通常是意外造成的,但当与路由器的连接已被切断时,无法撤销上一次更改。Safe mode 可用于最小化这种风险。

WinBox GUI 中的 "Safe Mode" 按钮允许你进入 Safe Mode,而在 CLI 中,你可以使用键盘快捷键 <kbd>F4</kbd> 或按 <kbd>Control</kbd>+<kbd>X</kbd> 访问它。要在不保存 CLI 中所做更改的情况下退出,请按 <kbd>Control</kbd>+<kbd>D</kbd>。

[admin@MikroTik] /ip/route>[CTRL]+[X] 
[Safe Mode taken] 
[admin@MikroTik] /ip/route<SAFE>

会显示消息 Safe Mode taken,且提示符会变化以反映会话现在处于 safe mode。当路由器处于 safe mode 时所做的所有配置更改(也包括来自其他登录会话的更改),如果 safe mode 会话异常终止,都会被自动撤销。你可以在系统历史中看到所有这类被自动撤销的更改,并带有 F 标志:

[admin@MikroTik] /ip/route> 
[Safe Mode taken]
[admin@MikroTik] /ip/route<SAFE>/add
[admin@MikroTik] /ip/route<SAFE> /system/history/print
Flags: U, F - FLOATING-UNDO
Columns: ACTION, BY, POLICY
  ACTION                 BY     POLICY
F route 0.0.0.0/0 added  admin  write

现在,如果 telnet 连接(或 WinBox 终端)被切断,那么一段时间后(TCP 超时为 9 分钟),在 safe mode 中所做的所有更改都会被撤销。通过 <kbd>Control</kbd>+<kbd>D</kbd> 退出会话也会撤销所有 safe mode 更改,而 /quit 则不会。

如果另一个用户尝试进入 safe mode,他们会收到以下消息:

[admin@MikroTik] > 
Hijacking Safe Mode from someone - unroll/release/don't take it [u/r/d]:
  • [u] - 撤销所有 safe mode 更改,并把当前会话置于 safe mode。
  • [r] - 保留所有当前 safe mode 更改,并把当前会话置于 safe mode。safe mode 的前任所有者会收到通知:
[admin@MikroTik] /ip/firewall/rule/input 
[Safe mode released by another user]
  • [d] - 保持一切原样。

如果在 safe mode 中做的更改太多,历史中没有空间容纳它们全部(目前历史最多保留最近 100 个操作),那么会话会自动退出 safe mode,且不会自动撤销任何更改。因此,在 safe mode 中最好以小步更改配置。按两次 <kbd>Control</kbd>+<kbd>X</kbd> 是清空 safe mode 操作列表的简单方法。

警告

由于 "Safe Mode" 在用户会话内运行并存储配置更改,对于需要重启的命令(例如重置配置或从备份恢复),它会被忽略。

HotLock 模式

启用 HotLock 模式后,命令会被自动补全。

要进入/退出 HotLock 模式,请按 <kbd>F7</kbd>。

[admin@MikroTik] /ip/address> [F7]
[admin@MikroTik] /ip/address>>

双 >> 表示 HotLock 模式已启用。例如,如果你输入 "/in et",它会被自动补全为:

[admin@MikroTik] /ip/address>> /interface/ethernet/

Lock 模式

:lock 命令会锁定屏幕。

[admin@MikroTik] > :lock
...
  MMM      MMM       KKK                          TTTTTTTTTTT      KKK
  MMMM    MMMM       KKK                          TTTTTTTTTTT      KKK
  MMM MMMM MMM  III  KKK  KKK  RRRRRR     OOOOOO      TTT     III  KKK  KKK
  MMM  MM  MMM  III  KKKKK     RRR  RRR  OOO  OOO     TTT     III  KKKKK
  MMM      MMM  III  KKK KKK   RRRRRR    OOO  OOO     TTT     III  KKK KKK
  MMM      MMM  III  KKK  KKK  RRR  RRR   OOOOOO      TTT     III  KKK  KKK

  MikroTik RouterOS 7.16rc1 (c) 1999-2024       https://www.mikrotik.com/

Session is locked       (Ctrl-D to Quit)

 password for admin: 

快速输入

Console 中有两个功能可以帮助更快速、更容易地输入命令——<kbd>Tab</kbd> 键补全和命令名缩写。补全的工作方式与 UNIX 中的 bash shell 类似。如果你在某个词的一部分之后按 <kbd>Tab</kbd> 键,console 会尝试在当前上下文中查找以该词开头的命令。如果只有一个匹配项,它会自动追加该词,后跟一个空格:

/inte <kbd>Tab</kbd> 变为 /interface/

如果有多个匹配项,但它们都有一个共同的开头,且比你已输入的更长,则该词会被补全到这个共同部分,并且不会追加空格:

/interface/set e <kbd>Tab</kbd> 变为 /interface/set ether

如果你只输入了共同部分,按一次 <kbd>Tab</kbd> 没有效果。但是,第二次按下会以紧凑形式显示所有可能的补全:

[admin@MikroTik] > /interface/set e[Tab]_ 
[admin@MikroTik] > /interface/set ether[Tab]_ 
[admin@MikroTik] > /interface/set ether[Tab]_ 
ether1 ether5 
[admin@MikroTik] > interface set ether_

<kbd>Tab</kbd> 键几乎可以用在任何 console 可能知道可能值的上下文中——命令名、参数名、只有几个可能值的参数(例如某些列表中条目的名称,或防火墙和 NAT 规则中协议的名称)。你无法补全数字、IP 地址和类似的值。

另一种减少按键次数的方式是缩写命令名和参数名。你可以只输入命令名的开头,如果它没有歧义,console 会把它当作完整名称接受。因此,输入:

[admin@MikroTik] > pin 10.1 c 3 si 100

等同于:

[admin@MikroTik] > ping 10.0.0.1 count 3 size 100

不仅可以补全开头,还可以补全名称中任何有辨识度的子串:如果没有精确匹配,console 会开始查找把正在补全的字符串作为多词名称首字母的词,或只是按相同顺序包含该字符串字母的词。如果找到唯一这样的词,它会在光标位置被补全。例如:

[admin@MikroTik] > /interface/x[TAB][TAB]_ 
dot1x  vxlan  export
[admin@MikroTik] > /interface/mt[TAB]_
[admin@MikroTik] > /interface/monitor-traffic _

Console 搜索

Console 搜索允许在 RouterOS 菜单列表和历史记录中执行关键词搜索。搜索提示符可通过 <kbd>Control</kbd>+<kbd>R</kbd> 快捷键访问。

内部聊天系统

RouterOS console 有一个内置的内部聊天系统。这允许身处不同位置的管理员直接在 RouterOS CLI 中互相交谈。要开始对话,请在消息前加上 # 符号。消息发送时所有已登录的人都会看到它。

[admin@MikroTik] > # ready to break internet?
[admin@MikroTik] > 
fake_admin: i was born ready
[admin@MikroTik] > 
[fake_admin@MikroTik] > 
admin: ready to break internet?
[fake_admin@MikroTik] > # i was born ready
[fake_admin@MikroTik] > 

设置

在 /console/settings 菜单中,可以启用一个选项,把文件名中的保留字符替换为下划线。

内置帮助

Console 有内置帮助。按 <kbd>F1</kbd> 获取常规 console 用法帮助。一般规则是,帮助会显示你在按下 <kbd>F1</kbd> 的位置可以输入什么(类似于按两次 <kbd>Tab</kbd> 键,但形式更详细并带有解释)。

按键列表

按键说明
<kbd>F1</kbd>显示上下文相关帮助
<kbd>F3</kbd> 或 <kbd>Control</kbd>+<kbd>R</kbd>搜索命令历史
<kbd>F4</kbd> 或 <kbd>Control</kbd>+<kbd>X</kbd>切换 safe mode
<kbd>F5</kbd> 或 <kbd>Control</kbd>+<kbd>L</kbd>重置终端并重绘屏幕
<kbd>F7</kbd>切换 hot-lock 模式
<kbd>F8</kbd>打印整个多行输入
<kbd>Tab</kbd>执行行补全。第二次按下时,显示可能的补全。
<kbd>Control</kbd>+<kbd>C</kbd>中断当前操作
<kbd>Control</kbd>+<kbd>D</kbd>终止会话(在空提示符处)
<kbd>Control</kbd>+<kbd>K</kbd>删除到行尾
<kbd>Control</kbd>+<kbd>U</kbd>删除到行首
<kbd>Control</kbd>+<kbd>T</kbd>切换到后台任务
<kbd>Control</kbd>+<kbd>\</kbd>在光标处拆分行。在光标位置插入换行。
<kbd>Control</kbd>+<kbd>B</kbd> 或 <kbd>←</kbd>光标向后移动一个字符
<kbd>Control</kbd>+<kbd>F</kbd> 或 <kbd>→</kbd>光标向前移动一个字符
<kbd>Control</kbd>+<kbd>P</kbd> 或 <kbd>↑</kbd>移到上一行。如果这是输入的第一行,则从历史中调出上一条输入。
<kbd>Control</kbd>+<kbd>N</kbd> 或 <kbd>↓</kbd>移到下一行。如果这是输入的最后一行,则从历史中调出下一条输入。
<kbd>Control</kbd>+<kbd>A</kbd> 或 <kbd>Home</kbd>把光标移到行首。如果光标已在开头,则移到当前输入第一行的开头。
<kbd>Control</kbd>+<kbd>E</kbd> 或 <kbd>End</kbd>把光标移到行尾。如果光标已在末尾,则把它移到当前输入最后一行的末尾。
<kbd>Delete</kbd>移除光标处的字符
<kbd>Control</kbd>+<kbd>H</kbd> 或 <kbd>Backspace</kbd>移除光标前的字符并把光标回移一个位置
<kbd>#</kbd>向内部聊天系统发送消息
/移到基础级别
..上移一级
/command在基础级别使用命令

<kbd>Up</kbd>、<kbd>Down</kbd> 和拆分键会把光标留在行尾。