在本章里,我们列出所有在GRUB中可用的命令。
命令属于不同的组。少数只能被用于配置文件(或菜单)的全局部分;它们中的大多数可以在命令行上输入,并可以在菜单各处或特别是菜单项中可用。
在救援模式里,通常只有命令insmod(参考14.3.22节【insmod】,41页),ls(参考14.3.29节【ls】,42页),set(参考14.3.42节【set】,47页),及unset(参考14.3.44节【unset】,48页)可用。如果你最终进入救援模式,又不知道如何做,那么参考18.1节【GRUB只提供一个救援shell】,52页。
用于解析配置文件的语义如下:
这些命令仅能用于菜单中:
menuentry title [‘--class=class’. . . ] [‘--users=users’] [Command]
[‘--hotkey=key’] { command; . .. }
这定义了一个名为title的GRUB菜单项。当这个项被菜单选中时,GRUB将把环境变量chosen设置为title,执行在括号中给出的命令列表,如果列表中最后一个命令成功返回,并且一个内核已经载入,将执行boot命令。
选项‘--class’可能被任意使用来把菜单项组合为类别。菜单主题可能使用不同的样式显示不同的类别。
选项‘--users’授权特定的用户访问特定的菜单项。参考第15章【安全】,48页。
选项‘--hotkey’把一个热键与一个菜单项关联。Key可能是一个字母,或是‘backspace’,‘tab’,或‘delete’之一。
submenu title [‘--class=class,’.. . ] [‘--users=users’] [Command]
[‘--hotkey=key’] { menu entries. . . }
这定义了一个子菜单。一个称为title的项将被加入菜单中;当该项被选中时,一个新菜单将被显示,示现这个子菜单中的所有项。
所有的选项与menuentry命令相同(参考14.1.1节【menuentry】,36页)。
可用于菜单及命令行的命令。
serial [‘--unit=unit’][‘--port=port’] [‘--speed=speed’] [Command]
[‘--word=word’] [‘--parity=parity’] [‘--stop=stop’]
初始化一个串行设备。unit是一个0-3的数字,指定了使用哪个串行口;缺省值是0,对应通常被称为COM1的口。port是找到UART的I/O端口;如果指定了,它优先于unit。Speed是传输速度;缺省为9600。word及stop是数据位及停止位的值。数据位必须在5-8范围内,而停止位必须是1或2。数据位缺省为8,停止位为1.parity是‘no’,‘odd’,‘even’之一,缺省为‘no’。
串行口不被用作一个通信通道,除非使用了命令terminal_input或terminal_output(参考14.2.2节【terminal_input】,37页,14.2.3节【terminaloutput】,37页)。
亦参考第8章【串行终端】,24页。
terminal_input [‘—append’|’—remove’] [terminal1] [terminal2] . . . [Command]
列出或选择一个输入终端。
不带参数,列出活跃、可用的输入终端。
使用‘--append’,把一个具名终端加入活跃输入终端列表;这些可能被用于向GRUB提供输入。
使用‘--remove’,从活跃列表移除该具名终端。
不带参数但一组终端名,仅使这些列出的终端为活跃终端。
terminal_output [‘—append’|’—remove’] [terminal1] [terminal2] . .. [Command]
列出或选择一个输出终端。
不带参数,列出活跃、可用的输出终端。
使用‘--append’,把一个具名终端加入活跃输出终端列表;所有这些终端将从GRUB接受输入。
使用‘--remove’,从活跃列表移除该具名终端。
不带参数但一组终端名,仅使这些列出的终端为活跃终端。
terminfo [-a|-u|-v] [term] [Command]
通过给定在terminfo数据库中一个项的名字,定义终端的能力,它大致对应于Unix中的环境变量‘TERM’。
当前可用的终端类型有:‘vt100’,‘vt100-color’,‘ieee1275’,及‘dumb’。如果你需要其它终端类型,请联系我们,讨论在GRUB中包括这些支持的最好方式。
选项‘-a’(‘--ascii’),‘-u’(‘--utf8’),及‘-v’(‘--visual-utf8’)控制如何显示非-ASCII文本。‘-a’指定一个ASCII终端;‘-u’指定逻辑有序(logically-ordered)UTF-8;而‘-v’指定视觉有序(visually-ordered)UTF-8(换而言之,如此安排使得一个不支持双向文本的终端模拟器a,以正确的次序,显示从右到左的文本,这不是真正正确的UTF-8,只是一个变通方法)。
如果没有指定选项或终端类型,打印出当前终端2类型。
这些命令可用于命令行及菜单项中。如果你忘记了一个命令,你可以运行help命令(参考14.3.19节【help】,41页)。
acpi [‘-1’|’-2’] [Command]
[‘--exclude=table1,...’|‘--load-only=table1,...’][‘--oemid=id’]
[‘--oemtable=table’] [‘--oemtablerev=rev’]
[‘--oemtablecreator=creator’] [‘--oemtablecreatorrev=rev’]
[‘--no-ebda’] filename . . .
现代BIOS系统通常实现了先进配置及电源接口(Advanced Configuration and Power Interface)(ACPI),并定义了各种表来描述一个ACPI兼容的操作系统与固件间的接口。在某些情形下,缺省提供的表仅能与某些操作系统能很好地工作,可能需要替换它们中的部分。
通常,这个命令将,在BIOS扩展数据中,替换根系统描述指针(Root System Description Pointer)(RSDP)指向新的表。如果使用了选项‘--no-ebda’,新表将仅为GRUB所知,不过可能被GRUB的EFI模拟器使用。
badram addr,mask[,addr,mask...] [Command]
滤掉坏的RAM。
这个命令通知内存管理器指定区域的RAM应该被滤掉(通常,因为它们被破坏了)。在一个内核被GRUB载入后,这仍然起作用,只要这个载入的内核从GRUB获得其内存地图。支持这个命令的内核包括Linux,GNU Mac,FreeBSD的内核及一般的多重启动内核。
语法与Memtest86+ utility所提供的相同:一组地址/掩码对。给定一个页对齐的地址及一个基准地址/掩码对,如果这个页对齐地址被掩码所激活的比特位与这个基准地址匹配,这意味着这个页要被滤掉。这个语法使得表示通常的内存损坏样式(pattern)容易,这归究于内存单元的物理分布性。
blocklist file [Command]
打印一个文件的块列表(参考11.3节【块列表语法】,29页)。
boot [Command]
启动已经被载入的OS或链式载入器。如果运行完整的交互式命令行(在一个菜单项结束时是隐含的)才是需要的。
cat [‘—dos’] file [Command]
显示文件file的内容。这个命令对于提醒你你的OS的根分区可能是有用的:
grub>cat /etc/fstab
如果使用了选项‘--dos’,那么回车/换行符对将被显示了一个简单的换行符。否则,回车将被显示为一个控制符(‘<d>’),这使得在由一个DOS样式行结尾的文件导致启动问题更容易被发现。
chainloader [‘—force’] file [Command]
把file载入作为一个脸上载入器。像被这个文件系统载入的其它文件,它可以使用块列表记法)参考11.3节【块列表语法】,29页)使用‘+1’来攫取当前分区的第一个扇区。如果你指定了选项‘--force’,那么强制载入文件,不管它是否有正确的签名。当你希望载入一个有缺陷的启动载入器,例如SCO UnixWare 7.1,是要求这样做的。
cmp file1 file2 [Command]
把文件file1与文件file2比较。如果它们的大小不同,像这样打印其大小:
Differin size: 0x1234 [foo], 0x4321 [bar]
如果大小相同,但在某个偏移位置上的字节不同,那么像这样打印出这些字节:
Differat the offset 777: 0xbe [foo], 0xef [bar]
如果它们完全相同,不做任何打印。
configfile file [Command]
把file载入作为一个配置文件。如果file定义了菜单项,那么立即显示一个包含它们的菜单。
cpuid [-l] [Command]
检查CPU特性。这个命令仅在x86系统上可用。使用选项‘-l’,如果CPU支持长模式(64位),返回true。如果不带任何选项调用,这个命令当前行为是,如同使用了‘-l’调用。这在将来可能会改变。
crc file [Command]
显示文件的CRC32检验和。.
date [[year-]month-day] [hour:minute[:second]] [Command]
不使用参数,打印当前时间日期。
否则,获取当前时间日期,修改由参数指定的元素,并把结果设置为新的时间日期。例如,‘date 01-01’将被把当前时间日期设置为1月1,但不改变年,时,分秒。
drivemap ‘-l’|‘-r’|[‘-s’] from_drive to_drive [Command]
没有选项,把设备from_drive映射到设备to_drive。当你链式载入某些操作系统,比如DOS,如果这样的一个OS不是驻留在第一个硬盘时,这是需要的。出于方便的原因,启动的任意分区后缀被忽略,因此你可用安全地使用${root}作为一个驱动描述。
使用选项‘-s’,执行反向映射,交换这两个硬盘。
使用选项‘-l’,列出当前的映射。
使用选项‘-r’,把映射重置为默认值。
例如:
drivemap-s (hd0) (hd1)
echo [‘-n’] [‘-e’] string . . . [Command]
显示所要求的文本以及,除非使用了选项‘-n’,一个换行符。如果有多个字符串,在输出中它们由空格分隔。照例,在GRUB命令中,可使用‘${var}’来替代 变量。
选项‘-e’激活对反斜杠转义符的解释。以下序列被识别:
\\ 反斜杠(backslash)
\a 蜂鸣(alert (BEL))
\c 按下换行符
\f 进纸(form feed)
\n 新行(new line)
\r 回车(carriage return)
\t 水平制表符(horizontal tab)
\v 垂直制表符(vertical tab)
当解释反斜杠转义符时,跟在反斜杠后的其它字符将打印出这个字符。
export envvar [Command]
导出环境变量envvar。导出的变量对于使用configfile载入的附属配置文件是可见的。
false [Command]
不成功地不做任何事。这主要用在控制构造中,比如if及while(参考5.2节【类Shell脚本】,15页)。
gettext string [Command]
把string翻译为当前语言。
当前语言编码保存在GRUB环境中的变量‘lang’里(参考13.1.12节【lang】,33页)。MO格式的翻译文件从‘locale_dir’(参考13.1.13节【locale dir]】,33页)读入,通常是‘/boot/grub/locale’。
gptsync device [partition[+/-[type]]] . . . [Command]
使用GUID分区表(GPT)的硬盘同样有一个传统主启动记录(MBR)分区表,来与BIOS及更旧的操作系统兼容。传统的MBR可以仅表示GPT分区项的一个有限子集。
这个命令使用device上指定的partition项来填充传统的MBR。最多可以使用3个分区。
Type是一个MBR分区类型编码;如果你想以十六进制输入它,使用前缀‘0x’。partition及type之间的分隔符,可以是‘+’来激活这个分区,或‘-’来使这个分区不活跃;仅有一个分区可以是活跃的。如果忽略了分隔符及类型,成为不活跃。
halt ‘--no-apm’ [Command]
这个命令暂停计算机。如果指定选项‘--no-apm’,不执行APM BIOS调用。否则,计算机使用APM关闭。
help [pattern . . . ] [Command]
显示内建命令的有用消息。如果你不指定pattern,这个命令显示所有可用命令的简短描述。
如果你指定了pattern,它显示名字以这些pattern开头的命令的详细消息。
initrd file [Command]
为一个Linux内核映像载入一个initial ramdisk,并在内存里的Linux设置区域内设置合适的参数。这只能在命令linux(参考14.3.24节【linux】,41页)运行后使用。亦可参考4.2.2节【GNU/Linux】,10页。
initrd16 file [Command]
为一个以16位模式启动的Linux内核映像载入一个initial ramdisk并在内存里的Linux设置区域内设置合适的参数。这只能在命令linux16(参考14.3.25节【linux16】,42页)运行后使用。亦可参考4.2.2节【GNU/Linux】,10页。
这个命令仅可用于x86系统。
insmod module [Command]
插入名为module的动态GRUB模块。
keystatus [‘—shift’] [‘—ctrl’] [‘—alt’] [Command]
根据选项的要求,如果按下键Shift,Control或Alt,返回true。在脚本中这是有用的,它允许某些用户不需要等待一个按键来控制行为。
检查修饰键(key modifier )状态仅在某些平台上支持。如果不使用任何选项调用,当且仅当支持检查修饰键状态时,命令keystatus返回true。
linux file . . . [Command]
从file载入一个Linux内核映像。余下的行被逐字传入作为该内核的命令行。任意initrd必须在使用了这个命令后载入(参考14.3.20节【initrd】,41页)。
在x86系统上,内核将使用32位启动协议启动。注意这意味着启动选项‘vga=’将不能工作;如果你希望设置一个特殊的视频模式,你将需要使用诸如‘set gfxpayload=1024x768’或‘set gfxpayload=keep’(保持与在GRUB中使用的相同模式)的GRUB命令。GRUB可以自动地检测某些‘vga=’的使用,并把它们翻译为合适的‘gfxpayload’设置。命令linux16(参考14.3.25节【linux16】,42页)避免了这个限制。
linux16 file . . . [Command]
从file以16位模式载入一个Linux内核映像余下的行被逐字传入作为该内核的命令行。任意initrd必须在使用了这个命令后载入(参考14.3.20节【initrd16】,41页)。
这个内核将使用传统的16位启动协议启动。同时绕开了在14.3.24节【linux】,41页所描述的使用‘vga=’的问题,这允许启动某些出于便利,实现了Linux启动协议的其它程序。
这个命令仅在x86系统上可用。
list_env [‘-f’ file] [Command]
列出在环境块中的所有变量。参考13.2节【环境块】,35页。
选项‘-f’改写环境块的缺省位置。
load_env [‘-f’ file] [Command]
环境块文件中的所有变量载入环境中。参考13.2节【Environment block】,35页。
选项‘-f’改写环境块的缺省位置。
loopback [‘-d’] device file [Command]
构建名为device,与file中的文件系统映像对应的设备。例如:
loopbackloop0 /path/to/image
ls(loop0)/
使用选项‘-d’删除先前使用这个命令创建的设备。
ls [arg . . . ] [Command]
列出设备或文件。
不使用参数,打印出所有对GRUB已知的设备。
如果参数是包含在括号内的一个设备名(参考11.1节设备语法),28页),那么列出该设备根目录下的所有文件。
如果参数是以绝对文件名(参考11.2【文件名语法】,28页)给出的目录,那么列出这个目录的内容。
normal [file] [Command]
进入普通模式,并显示GRUB菜单。
在普通模式中,命令,文件系统模块,及加密模块被自动载入,并且可使用完整的GRUB脚本解析器。其它模块可以使用insmod(参考14.3.22节【insmod】,41页)显式地载入。
如果给定一个文件,那么命令将从这个文件读入。否则,它们将被从‘$prefix/grub.cfg’读入,如果它存在的话。
Normal可能在普通模式里调用,构建一个嵌入的环境。更通常的是使用configfile(参考14.3.8节【configfile】,39页)。
normal_exit [Command]
退出普通模式(参考14.3.30节【normal】,42页)。如果这个普通模式实例不是嵌入在另一个普通模式里,那么就返回到救援模式。
parttool partition commands [Command]
对分区表项进行各种修改。
每个命令要么是一个布尔类型选项,在这个情形下,它必须跟在‘+’或‘-’(之间没有空格)后面来激活或禁止这个选项,或者它以‘command=value’形式来获取一个值。
当前,parttool仅可用在DOS分区表里(也被称为主启动记录,或MBR)。在这些分区表中,可使用以下命令:
‘boot’ (boolean)
当使能时,这使得选定的分区成为其所在硬盘上的活跃(启动)分区,清除其它分区的激活标记。这个命令仅限于主分区。
‘type’ (value)
修改一个现存分区的类型。其值必须是0-0xFF(使用‘0x’以十六进制输入)范围内的值。
‘hidden’ (boolean)
当使能时,通过在选定分区的分区类型编码中设置隐藏位,隐藏这个分区;当禁止时,通过清除隐藏位,取消选定分区的隐藏。仅当启动DOS或Windows并且在一个硬盘上存在多个主FAT分区时,这才有用。参考4.2.3节【DOS/Windows】,11页。
password user clear-password [Command]
定义一个口令为clear-password,名为user的用户。参考第15章【安全】,48页。
password_pbkdf2 user hashed-password [Command]
定义一个哈希口令为hashed-password,名为user的用户。使用grub-mkpasswdpbkdf2(参考第21章【调用grub-mkpasswd-pbkdf2】,54页)来产生口令哈希值。参考第15章【安全】,48页。
play file | tempo [pitch1 duration1] [pitch2 duration2] ... [Command]
播放一首曲子
如果参数是一个文件名(参考11.2节【文件名语法】,28页),播放文件中记录的曲子。这个文件的格式是,首先是一个32位无符号little-endian数字tempo,然后若干16位无符号little-endian的pitch及duration对。
如果参数是一系列数字,播放在线的曲子。
Tempo是所有声调持续时间的基准。60给出一个1秒的基准,120给出一个半秒基准,等。Pitche是Hz.。设置pitch为0产生一个静音。
pxe_unload [Command]
卸载PXE环境(参考第7章【网络】,24页)。这个命令仅可用在PC BIOS系统上。
read [var] [Command]
从用户读入一行输入。如果给定一个环境变量var,把这个环境变量设置为所读入的行,不带结尾的换行符。
reboot [Command]
重启计算机。
save_env [‘-f’ file] var . . . [Command]
把具名变量从环境保存入环境块文件中。参考13.2节【环境块】,35页。
选项‘-f’覆盖环境块的缺省位置。
search [‘—file’|‘—label’|‘--fs-uuid’] [‘—set’ [var]] [Command]
[‘--no-floppy’] name
通过文件(‘-f’,‘--file’),文件系统标签(‘-l’,‘--label’),或文件系统UUID(‘-u’,‘--fs-uuid’)来查找设备。
如果使用了选项‘--set’,设置第一个找到的设备为环境变量var的值。缺省变量是 ‘root’。
选项‘--no-floppy’阻止查找软盘设备,这些设备可以很慢。
命令‘search.file’,‘search.fs_label’,及‘search.fs_uuid’分别是‘search --file’,‘search --label’,及‘search --fs-uuid’的别名。
sendkey [‘—num’|‘—caps’|‘—scroll’|‘—insert’| [Command]
‘—pause’|‘--left-shift’|‘--right-shift’|
‘—sysrq’|‘—numkey’|‘—capskey’|‘—scrollkey’|
‘—insertkey’|‘--left-alt’|‘--right-alt’|
‘--left-ctrl’|‘--right-ctrl’ ‘on’|‘off’].. . [‘no-led’] keystroke
在启动时,在键盘输入缓存插入键值。有时一个操作系统或链式启动载入器要求按下特定的键:例如,可能要求按下一个特定的键进入“安全模式”;或当链式载入另一个启动载入器时,可能要按键进行菜单导航。
你可以提供最多16个键值(BIOS键盘缓存的长度)。按键名可以是大写或小写字母,或取自下表:
名称 键
escape Escape
exclam !
at @
numbersign #
dollar $
percent %
caret ^
ampersand &
asterisk *
parenleft (
parenright )
minus -
underscore _
equal =
plus +
backspace 退格
tab Tab
bracketleft [
braceleft {
bracketright ]
braceright }
enter Enter
control 按下及释放Control
semicolon ;
colon :
quote ’
doublequote "
backquote ‘
tilde ~
shift 按下及释放左Shift
backslash \
bar |
comma ,
less <
period .
greater >
slash /
question ?
rshift 按下及释放右Shift
alt 按下及释放Alt
space 空格
capslock 大写锁
F1 F1
F2 F2
F3 F3
F4 F4
F5 F5
F6 F6
F7 F7
F8 F8
F9 F9
F10 F10
F11 F11
F12 F12
num1 1 (数字键盘)
num2 2 (数字键盘)
num3 3 (数字键盘)
num4 4 (数字键盘)
num5 5 (数字键盘)
num6 6 (数字键盘)
num7 7 (数字键盘)
num8 8 (数字键盘)
num9 9 (数字键盘)
num0 0 (数字键盘)
numperiod . (数字键盘)
numend End (数字键盘)
numdown Down (数字键盘)
numpgdown PageDown (数字键盘)
numleft Left (数字键盘)
numcenter 5 不打开Num Lock (数字键盘)
numright Right (数字键盘)
numhome Home (数字键盘)
numup Up (数字键盘)
numpgup Page Up (数字键盘)
numinsert Insert (数字键盘)
numdelete Delete (数字键盘)
numasterisk * (数字键盘)
numminus - (数字键盘)
numplus + (数字键盘)
numslash / (数字键盘)
numenter Enter (数字键盘)
delete Delete
insert Insert
home Home
end End
pgdown PageDown
pgup PageUp
down Down
up Up
left Left
right Right
除了按键,sendkey命令采用多个选项影响BIOS键盘状态标记。这些选项采用一个 ‘on’或‘off’参数,指定是否设置或取消设置对应的状态标记;省略一个给定状态标记的选项,将把这个标记保留为启动时的初始状态。选项‘--num’,‘--caps’,‘--scroll’,及‘--insert’模拟设置对应的模式,而选项‘--numkey’,‘--capskey’,‘--scrollkey’,及‘--insertkey’模拟持续按下对应的键。其它状态标记选项是不言自明的。
如果给定了选项‘--no-led’,状态标记选项将不会影响键盘的LED。
如果sendkey命令给出了多次,那么仅最后一次调用起作用。
因为sendkey操控BIOS的键盘输入缓存,在某些系统中它可能导致挂起,重启,或其它不当行为。在GRUB之后运行的操作系统或启动载入器如果使用自己的键盘驱动,而不是BIOS的键盘功能,那么sendkey将不起作用。
这个命令仅可用在PC BIOS系统上。
set [envvar=value] [Command]
把环境变量envvar设置为value。如果调用没有参数,打印所有的环境变量及其值。
true [Command]
成功地不做任何事。这主要用在控制构造中,比如if及while(参考5.2节【类Shell脚本】,15页)。
unset envvar [Command]
取消环境变量envvar的设置。
这个命令尚未对GRUB 2实现,虽然它在计划中。