GRUB4DOS 命令索引

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GRUB4DOS 命令索引
background
用法:
background RRGGBB
描述:
set the background color when in graphics mode. RR is red,GG is green,and BB is blue.Numbers must be in hexadecimal.
设置图形模式下的背景色。

RR 代表红色, GG 代表绿色, BB 代表蓝色。

注意他们都使用十六进制的值。

需配合 foreground 和 unifont 命令共同使用。

unifont 用来加载中文支持,background 为背景色,foreground 为前景色。

blocklist
用法:
blocklist FILE
描述:
print the blocklist notation of the file FILE
输出文件的块清单标记。

boot
用法:
boot
描述:
boot the OS/chain-loader which had been loaded
引导已加载的操作系统或扇区链式加载器。

确定进行启动用,通常和chainloader命令搭配使用,在菜单文件中可以省略,命令行模式下需要。

例:菜单文件中示例:
title boot iso
map --mem /iso.iso (0xff)
map --hook
chainloader (0xff)
命令行中实现同样效果:
grub> map --mem /iso.iso (0xff)
grub> map –hook
grub> chainloader (0xff)
grub> boot
calc
用法:
calc [*INTEGER=] [*]INTEGER OPERATOR [[*]INTEGER]
描述:
(by zhaohj@wuyou)
this is a simple calculator and from left to right only
这是一个简单的计算器,只能从左至右进行计算,从左到右计算,不支持优先级。

操作符: +(加)、 -(减)、 *(乘)、 /(除)、 %(余)、 <<(左移)、 >>(右移)、 &(与)、|(或)、 ^(位异或)
%(余)操作:
7%2=1
<<(左移)操作:
1<<10=1024,相当于2的10次方;左移一位等于*2
>>(右移)操作:
1024>>10=1,右移一位等于/2
1024=2进制10000000000,这样一看就明白了。

&(与)操作:
相同位都为1时为1
1&1=1
1&0=0
0&0=0
^(位异或)操作:
相同位相反时为1
1^1=0
1^0=1
0^0=0
|(或)操作:
相同位有1时为1
1|1=1
1|0=1
0|0=0
例1:内存变量操作
calc *0x8208=*0x82a0
calc *0x8280=*0x829c
0x82a0保存的是当前根所在的驱动器(current root drive)
0x829c保存的是当前根分区号(current root partition)
0x8208保存的是启动分区号(the boot partition)
0x8280保存的是启动驱动器号(boot_drive)
实现了把当前设备保存到启动设备的功能
例2:混合操作
计算物理硬盘数
0x475的低2字节保存的是物理硬盘数,所以要去掉高2字节
calc *0x475&0xff
如果保存到变量hdn,用 set /a hdn=*0x475&0xff
set命令的 /a 参数调用的是calc命令。

另外要注意的是,复合语句,执行时是一次性替换整条命令的变量的;复合语句也算一条语句
set /a m=8
set /a n=2
set /a n=%m%-%n% && set /a m=%n%/2 && set /a n=%n%-%m%
与下面计算结果不同:
set /a m=8
set /a n=2
set /a n=%m%-%n%
set /a m=%n%/2
set /a n=%n%-%m%
call
用法:
call [:]LABLE [%1 %2 (9)
描述:
0.4.5版grub4dos增加批处理支持,call语法和MS-DOS的批处理几乎一模一样。

call 命令可以使批处理执行时跳转到指定的 LABLE 标签执行, LABLE 标签执行后返回原处继续向下执行,
与call命令的差别是,在批处理中使用 goto 命令直接转换 LABLE 标签处执行不会返回原处。

注意: GRUB4DOS的CALL和GOTO是和批处理一样的机制.
此外 call 支持附加参数, goto不支持。

=========GRUB4DOS BATCH SCRIPT START===============================
!BAT #注:文件头!BAT是必须的用于识别这是一个GRUB4DOS批处理脚本
echo %0
echo Your type: %1 %2 %3 %4 %5 %6 %7 %8 %9
call :echo This is a test string
goto :label2
:label1
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof
:label2
echo end of batch script.
=========GRUB4DOS BATCH SCRIPT END===============================
假定此批处理文件名为 test 则
grub> test
test
Your type:
This is a test string
end of batch script.
grub> test this is only a test
test
Your type: this is only a test
This is a test string
end of batch script.
cat
用法:
cat [--hex] [--sikp=S] [--length=L] [--locate=STRINT] [locate-align=A] [--replace=STRING] [--number=N] FILE
描述:
print the contents of the file FILE, or print the locations of the string STRING in FILE
显示指定文件FILE的内容,或显示指定文件FILE中字符串STRING的位置。

参数说明:
--hex :显示16进制
--skip=S :跳过的字节数
--length=L :长度
--locate=STRING :定位,字符串区分大小写,最长16个字节
--locate-align=A :对齐方式
--replace=STRING :替换字符串,最长16个字节
--number=N :搜索的个数
cat 命令既不扩大也不减小目标文件的大小,源文件尾部剩余的部分将被丢弃。

新版本与老版本的区别:新版本在debug off状态下都提供显示输出,老版本(2011.01前)在非debug off下显示输出。

例子:
1:十六进制格式显示 NTLDR 文件内容
cat --hex (hd0,0)/NTLDR
2:十六进制格式显示 MBR 扇区
cat --hex (hd0)+1
3:十六进制格式显示内存起始地址处的1 KB内容(实际上就是实模式的IDT表)
cat --hex (md)+2
4:十六进制格式显示扩展内存的第一个扇区
cat --hex (md)0x800+1
5:十六进制格式显示(hd0,0)分区的第一扇区,通常这个扇区包含操作系统的引导记录cat --hex (hd0,0)+1
6:搜索文本中从指定位置开始指定范围的第一个字符串的位置
cat --skip=0x200 --length=2048 --locate=ABCD --number=1
7:可以用来判断文件 FILE 是否存在。

cat --length=0 /FILE
8:固定用法,获取当前分区偏移。

cat --length=0 ()-1
9: 一个高级用法,配合批处理,搜索文本中指定字符串的段落名%scsi%
以下文本名为(fd1)/OEM,包含下面段落
......
[HardwareIds.scsi.lsi_sas]
id = "PCI\VEN_1000&DEV_0050", "lsi_sas"
id = "PCI\VEN_1000&DEV_0054", "lsi_sas"
id = "PCI\VEN_1000&DEV_0058", "lsi_sas"
id = "PCI\VEN_1000&DEV_005E", "lsi_sas"
id = "PCI\VEN_1000&DEV_0056", "lsi_sas"
id = "PCI\VEN_1000&DEV_005A", "lsi_sas"
id = "PCI\VEN_1000&DEV_0062", "lsi_sas"
......
现在只知道ID是PCI\VEN_1000&DEV_0058,要取出HardwareIds.scsi.lsi_sas
用批处理:
!BAT
set ID=PCI\VEN_1000&DEV_0058
cat --locate=%ID:~-16% --number=1 (fd1)/OEM | set a=
set a && set a=0x%a% ! exit
cat --length=%a% --locate=[ (fd1)/OEM | call :get_last
set /a b=0x%last%+1
cat --length=%a% --locate=] (fd1)/OEM | call :get_last
set /a a=0x%last%-%b%
cat --skip=%b% --length=%a% (fd1)/OEM | set scsi=
......
:get_last
if "%1"=="" exit
shift
if "%1"=="" set last=%0
goto :get_last
________________________________________
cdrom
用法:
cdrom --add-io-ports=P | --init | --stop
描述:
initialise/stop atapi cdroms or set additonal I/O ports for a possible atapi cdromdevice. The high word of P specifies the base register of the control block registers,and the low word of P specifies the base register of the command block registers.
1. 初始化ATAPI接口的CDROM设备:
grub> cdrom --init
显示找到的atapi接口的cdrom光驱的数目:参数为 atapi_dev_count
2. 停止ATAPI接口的CDROM设备:
grub> cdrom --stop
这会设置参数atapi_dev_count为0 。

3. 增加搜索atapi cdrom设备的IO端口。

例如:
grub> cdrom --add-io-ports=0x03F601F0
在执行'cdrom --init'以及'map --hook'命令后,cdrom光驱可以通过(cd0), (cd1), ...等设备号来访问。

注意1:如果系统不完全支持ATAPI CD-ROM 规范,在你试图访问这些(cdX)设备时将遭遇失败。

注意2:在执行一条'cdrom --stop'命令后,你应当使用一条'map --unhook'命令。

当然,你可以再次使用`map --hook'命令,假如还有驱动器被映
射着的话。

注意3:在增加IO端口之后,你应当接着`cdrom --init'执行一条`map --unhook'命令
然后再接着执行一条`map --hook'命令。

默认将使用这些端口来搜索cdrom设备(因此不需要再添加了)
0x03F601F0, 0x03760170, 0x02F600F0,
0x03860180, 0x6F006B00, 0x77007300.
注意4:BIOS可能已经提供了cdrom 的接口。

它的设备号总是(cd)。

在`cdrom --init'
和 `map --hook' 执行后,我们可以有我们自己有效的(cd0), (cd1), ...等设备。

注意5:你可以用块列表的方式去访问(cd)和(cdX) 等设备。

例子:
cat --hex (cd0)16+2
cdrom 扇区是大小为 2048 字节的大扇区。

注意6:我们的iso9660文件系统驱动具有Rock-Ridge扩展支持,但没有Joliet扩展支持。

因此当你试图在一个使用Joliet扩展的光盘上读取文件时,可能遭遇失败。

注意7:现在,(cd)及(cdX)设备可以被引导了。

示例:
chainloader (cd)
boot
chainloader (cd0)
boot
chainloader (cd1)
boot
在chainloader (cd)之前,你必须保证已经可以访问该设备。

CDROM 驱动器上发现的缺陷
似乎 cdrom 应当连接在IDE控制器的主设备通道上。

如果 cdrom 是从设备,读取cdrom扇区的驱动将失败。

chainloader
用法:
chainloader [--force] [--load-degment=LS] [--load-offset=LO]
[--load-length=LL] [--skip-length=SL] [--boot-cd=CS] [--boot-ip=IP]
[--ebx=EBX] [--edx=EDX] [--sdi] [--disable-a20] FILE
描述:
load the chain-loader FILE, if --force is specified, then load it forcibly, whether the boot loader signature is present or not. LS:LO specifies the load address other than 0000:7C00. LL specifies the length of the boot image(between 512 and 640K). CS:IP specifies the address where the boot image will gain control.
EBX:EDX specifies the EBX:EDX register value when the boot image gets
e --sdi if FILE is a System Deployment Image, which is of the Windows XP RAM boot file e --diable-a20 if you wish to turn off A20 when transferring control to the boot image.SL specifies length in bytes at the beginning of the image to be skipped when loading.
加载扇区链式加载器。

若使用了--force参数, 则忽略该扇区的启动标识的有效性,强制启动。

使用0000:7C00地址以外的的启动地址的话,需要使用LS:LO参数指定。

LL 指定引导映像的长度(在512和640K大小之间)。

SL 在启动镜像时,将会忽略文件头指定的字节长度。

CS:IP 指定将获得控制权的引导映像的地址。

EBX:EDX 在引导映像获得控制权后指定EBX:EDX寄存器的值。

如果 FILE 是一个系统部署,即Windows XP RAM启动文件格式,需要使用 --sdi 参数。

使用 --disable-a20 参数,将会在把控制权移交给引导映像时关闭A20总线。

当你使用 chainloader 命令装载一个pxe 设备上的文件时,有一个选项你可以使用:chainloader --raw (pd)/BOOT_FILE
选项 --raw 的执行就和--force一样,但是它是一次性将文件装载执行。

这可以改善一些情况下的执行效率。

例1:
chainloader /ntldr
#加载 ntldr 文件启动
chainloader (hd0,0)+1
#加载启动第一硬盘第一主分的第一扇区
注意:命令行下使用该命令后还需再执行 boot 命令才会真正启动。

例2:
直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及FreeDOS 的KERNEL.SYS.
例如:
chainloader --edx=0xPPYY (hd0,0)/ntldr
boot
chainloader --edx=0xYY (hd0,0)/io.sys
boot
chainloader --ebx=0xYY (hd0,0)/kernel.sys
boot 十六进制的YY 指定了启动驱动器号,十六进制的PP指定了 NTLDR 的启动分区号。

如果启动驱动器是软驱,PP应该是一个十六进制的值ff,即十进制的255.
对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行,请使用--ebx 。

当文件位于它们平常的位置时,选项 --edx (--ebx)可以省略。

但某些情况下,这些选项是必需的。

例如,假设被调用的ntldr文件在ext2分区(hd2,8)中,而你又希望它认为(hd0,7)的 windows 分区是启动分区,那么--edx就是必需的:
chainloader --edx=0x0780 (hd2,8)/ntldr
对于DOS核心(即,IO.SYS和KERNEL.SYS),启动分区号是没有意义的,因此你只需指定恰当的启动驱动器号YY(不过指定了启动分区号也是无害的)。

上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命令来指定。

例如:
chainloader (hd2,6)/kernel.sys
rootnoverify (hd0) <-------- YY=80
boot
chainloader (hd0,0)/ntldr
rootnoverify (hd0,5) <-------- YY=80, PP=05
boot
提示:CMLDR (the ComMan LoaDeR,它被用于加载Windows的故障恢复控制台)可以像NTLDR一样被良好的加载。

Bean 先生成功地解压和启动了WinME的IO.SYS,感谢这个出色的工作。

checkrange
用法:
checkrange RANGE COMMAND
描述:
return ture if the return value of COMMAND is in RANGE and false otherwise.
Checkrang 命令检查一条命令的返回值是否是在指定的值域或排列中。

Usage: checkrange RANGE COMMAND
用法: checkrange 域命令
这里是参数 RANGE 的一些示例:
3 是仅包含数字 3 的值
3:3 等价于 3
3:8 是一个包含数字3, 4, 5, 6, 7, 8的值域
3,4,5,6,7,8 等同于3:8
3:5,6:8 也等同于3:8
3,4:7,8 也等同于3:8
注意:你不能把空格放在值域中。

比如:以下是错误的。

checkrange 1 2 COMMAND
这里用一个示例来演示怎样使用 checkrange 命令:
例一:
checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)
这意谓着:如果 (hd0,1) 不是一个扩展分区,那么执行hide (hd0,1)命令隐藏它。

例二:
checkrange 0x21 read 0x8280 && pxe detect NotExist
判断是否为PXE启动,如果是PXE启动,指定一个不存在的配置文件“NoExist”,
让PXE启动时不去搜索PXE服务器上的其他配置文件,加快启动速度(pseudo 发明的写法)。

checktime
用法:
checktime [[min] [hour] [dom] [month] [dow]]
描述:
check time.
直接执行为输出本地当前时间。

命令格式如下:
checktime * * * * *
checktime后面的五个参数分别表示分钟,小时,日期,月份和星期几。

'*'表示全范围,你也可以使用数字,
用'-'表示某一范围,
用'/'表示每隔一定数字取一个值,具体的用法可以查看一下crontab的语法。

如:
1-4
2,5-6
1-2,4-5,7
*/2
checktime本身只是一个测试函数,它判断当前时间是否符合参数的指定。

但把它和&&相结合,你就可以使得某些命令只有在一定的条件下才会执行,例如:
1、上午使用第一项作为缺省项,下午使用第二项
checktime * 0-12 * * * && default 0
checktime * 13-23 * * * && default 1
2、四季使用不同的背景图片
checktime * * * 1-3 * && splashimage /spring.xpm
checktime * * * 4-6 * && splashimage /summer.xpm
checktime * * * 7-9 * && splashimage /fall.xpm
checktime * * * 10-12 * && splashimage /winter.xpm
clear
用法:
clear
描述:
clear the screen
清屏幕。

另类用法:在菜单中生成一行不可被选中的"空行"。

(并非clear才会有这样的效果,只要该菜单项目中没有启动敏感的命令都会使得菜单不可选择,只不过使用clear命令误操作时不会造成不良后果)
如原菜单:
title boot xp
……
boot
title boot win7
……
boot
新菜单:
title boot xp
……
boot
title
clear
title boot win7
……
boot
这样生成的菜单将会在这两个菜单项中加入一行"空行"
cmp
用法:
cmp [--hex] FILE1 FILE2
描述:
compare the file FILE1 with the FILE2 and inform the different values if any.
比较两个文件, 并且报告两者之间的不同的信息。

使用 --hex 参数时将会以十六进制形式比较两个文件的不同。

color
用法:
color NORMAL [HIGHLIGHT [HELPTEXT [HEADING]]]
描述:
change the menu colors. The lolor NORMAL is used for most lines in the menu, and the color HIGHLIGHT is used to highlight the line where the cursor points.
if you omit HIGHLIGHT, then the inverted color of NORMAL is used for the higlighted line. if you omit HELPTEXT and/or HEADING, then NORMAL is used. The format of a color is "FG/BG". FG and BG are
black,blue,green,cyan,red,magenta,brown,light-gray,dark-gray,
light-blue,light-green,light-cyan,light-red,light-magenta,yellow and white.
you can prefix "blink-" to FG if you want a blinking foreground color.
改变菜单的颜色。

Normal 用于指定菜单项的未选中时的颜色,HIGHLIGHT 则用于指定菜单项的被选中时的颜色。

如果你未指定 HIGHLIGHT 色,那么我们将使用 NORMAL 的反色值。

颜色值的格式是 "FG/BG"。

FG 和 BG 是颜色的名称,如下:black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红),brown(棕), light-gray(亮灰),dark-gray(暗灰),
light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红),
light-magenta(浅红), yellow(黄) 和 white(白)。

注意,BG 的值只能是前八个。

另外,若想使用闪烁的前景色,你在 FG 前使用前缀 "blink-" 即可。

command
用法:
command [--set-path=PATH] FILE [ARGS]
描述:
执行外部命令用。

命令行模式下执行 command 将输出当前指定的外部命令位置(默认为
(bd)/BOOT/GRUB/ )。

可以在菜单文件或命令行下使用 --set-path=PATH 来指定新的外部命令位置,执行外
部命令时将会在 PATH 文件夹寻找,该文件夹下未找到将提示 Waring! No such command : 外部命令名。

注意:iso9660模式下区分文件名大小写!
也可以使用 command FILE 来启动外部命令,例 command /GRUB/WENV
查找外部命令的顺序如下:
如果是以 '(' 或 '/' 开头的FILE认为是一个绝对路径的文件.直接打开。

否则
1.先查找用INSMOD加载的命令。

2.使用默认位置里面的同名文件。

3.使用当前root下的同名文件。

例:
grub> command
#输出当前外部命令所在文件夹,默认 (bd)/BOOT/GRUB/
grub> WENV
#在 /BOOT/GRUB/ 文件夹下寻找名为 WENV 的外部命令,并启动
grub> command WENV
#在 /BOOT/GRUB/ 文件夹下寻找名为 WENV 的外部命令,并启动
grub> command /BOOT/WENV
#在 /BOOT/ 文件夹下寻找名为 WENV 的外部命令,忽略 --set-path 设定的默认路径/BOOT/GRUB/文件夹。

commandline
用法:0
commandline
描述:
进入命令行模式。

configfile
用法:
configfile FILE
描述:
将指定文件作为配置文件予以加载。

configfile 命令执行后,boot device 和 root device 将同时更新为 FILE 文件所在的设备。

如果在预置菜单(内置菜单)的初始化命令组中出现不带任何参数的 configfile 命令,那么控制将转到启动设备上的menu.lst文件。

例:
configfile /MENU.LST
#加载当前设备根目录下的配置文件 /MENU.LST
configfile (md)4+8
#特殊用法,内置菜单的位置是公开的,在内存中的固定地址 0x800 处,长度是 4K,即(md)4+8 处内存块,因此,执行此命令后会重新加载一次内置菜单,可作为进入二级或三级或任意菜单后返回主菜单之用。

dd
用法:
dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE] 描述:
copy file IF to OF. BS is blocksize,default to 512. C is blocks to copy,default is total blocks in IF. IN specifies number of blocks to skip when read, default id 0. OUT specifies number of blocks to skip when write, default os 0. skipped blocks are not touched. both IF and OF must exist. dd can neither enlarge nor readce the size of OF. the leftover tail of IF will be discarded. OF cannot be a gzipped file. if IF is a gzipped file, it will be decompressed automatically when copying. dd is dangerous, use at your own riak. to be on the safe side, you should only use dd to write a file in memory. ADDR and SIZE are used for user-defined buffer.
复制文件的新命令 'dd'
dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]
将 IF(input file 源文件)复制到 OF (output file 目标文件)中。

BS 是以字节计数的一个块的大小,默认值是512 。

C 是复制的块数,默认值是源文件中的总块数。

IN 指定在读取时跳过的块数,默认值是 0 。

OUT 指定在写入时跳过的块数,默认值是0 。

buf 表示dd所用的读写缓存的起始地址。

buflen 表示缓存的长度,即大小。

注:1、已跳过的块不会被改变。

源文件和目标文件必须是存在的。

2、源文件和目标文件必须以设备名开头,即 '(...)' 的格式,对于当前根设备你应该使用'()'。

3、dd 命令既不扩大也不减小目标文件的大小,源文件尾部剩余的部分将被丢弃。

4、目标文件不能是gzip压缩过的文件。

如果源文件是gzip 压缩过的文件,它将在复制时被
自动解压。

注意:1、dd 具有危险性,使用风险由你自己的承担。

作为一种安全方面的考虑,
你应当只使用 dd 来写入一个内存中的文件。

2、某些情况下在写入NTFS 中的文件的时,dd 可能会失败。

3、0.4.5版grub4dos不再限制在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件。

更新:新选项实现了让使用者自定义dd 命令的读写缓存。

默认读写缓存起始于地址0x50000,长度为0x10000 (即64KB)。

你不能指定起始地址ADDR 低于0x100000(即 1 MB)的缓存位置。

此外,你必须指定参数SIZE 大于0x10000(即64K)。

通常,你需要令ADDR大于或等于0x1000000 (16MB),并且 SIZE 也要大于或等于16MB 。

增大 SIZE 的值能够加快 dd 的读写速度。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!! Caution! Both IF and OF can be a device name which stands for !!!! !!!! all the sectors on the device. Take utmost
care! !!!!
!!!!___________________________________________________!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!
警告!IF 和 OF 都可以是一个设备名,即它代表了设备上全部的扇区。

慎之又慎
debug
用法:
debug [on | off | normal | status | INTEGER]
描述:
turn on/off or display/set the debug level
开启/关闭或显示/设置调试级别
0 或者 off 指定为静默模式
1 或者 normal 指定为标准模式
从 2 到 0x7fffffff 或者 on 指定为冗余模式 (调试报告BUG时请使用该模式,可以获得更详细的信息)
default
用法:
default [NUM | 'saved' | FILE]
描述:
set the default entry to entry number NUM (if not specified, it is 0, the first entry), or to the entry number saved by savedefault if the key word 'saved' is specified, or to the entry number previously saved in the specified file FILE. when FILE is specified, all subsequent 'savedefault' commands will save default entry numbers into FILE.
设置默认启动的菜单入口项为 NUM (0 代表第一项),或者由 savedefault 所保存的入口项(如果指定了关键字 saved),或者先前保存在文件 FILE 中的入口项。

当指定了FILE 时,后续的 savedefault 命令都将把入口项保存到 FILE 中。

相对于原来的用法"default NUM"及"default saved "增加的部分,现在有一个新用法"default FILE",象这样:
default (hd0,0)/default
注意参数FILE必须是一个有效的DEFAULT文件格式。

一个简单的DEFAULT文件就包含在发行版中。

你可以复制它到你希望的地方,但是你应该避免手工修改它的内容。

DEFAULT文件可以按以下方法使用:
首先,你要复制一个格式有效的default文件到你运行的系统上。

其次,你要使用GRUB中的"default FILE"命令来表明是使用这个FILE作为我们新的预设文件,以便"savedefault"命令执行时写入它。

然后,你可以使用"savedefault"命令来把想要的入口数字保存到这个新的预设文
件中。

好了,下次启动时,你可以通过使用类似上面第二步骤中的"default FILE"一样的命令来读取已保存的入口数字。

同时,SAVEDEFAULT 命令增加了一个选项 --wait=T ,象这样:
savedefault --wait=5
如果`--wait=T' 选项被指定而且 T 非零,savedefault 命令将在它就要写入磁盘前,给使用者一个提示信息。

这里是一个简单的menu.lst文件:
#--------------------begin menu.lst--------------------------------------- color black/cyan yellow/cyan
timeout 30
default /default
title find and load NTLDR of Windows NT/2K/XP
find --set-root /ntldr
chainloader /ntldr
savedefault --wait=2
title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
fallback 2
find --set-root /cmldr
chainloader /cmldr
#####################################################################
# write string "cmdcons" to memory 0000:7C03 in 2 steps:
#####################################################################
# step 1. Write 4 chars "cmdc" at 0000:7C03
write 0x7C03 0x63646D63
# step 2. Write 3 chars "ons" and an ending null at 0000:7C07
write 0x7C07 0x00736E6F
savedefault --wait=2
title find and load IO.SYS of Windows 9x/Me
find --set-root /io.sys
chainloader /io.sys
savedefault --wait=2
title floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2
title find and boot Linux with menu.lst already installed
find --set-root /sbin/init
savedefault --wait=2
configfile /boot/grub/menu.lst
title find and boot Mandriva with menu.lst already installed
find --set-root /etc/mandriva-release
savedefault --wait=2
configfile /boot/grub/menu.lst
title back to dos
savedefault --wait=2
quit
title commandline
savedefault --wait=2
commandline
title reboot
savedefault --wait=2
reboot
title halt
savedefault --wait=2
halt
#--------------------end menu.lst--------------------------------------- 注意1:预设文件DEFAULT 必须是存在的而且具有和前面所述一样严格的格式。

注意2:在一个确信有MENU.LST 文件的相同目录中的DEFAULT 文件将和MENU.LST 文件一起被联合调用。

注意3:即使没有出现'default'命令,被关联的DEFAULT 文件也将自动生效。

注意4:就在菜单文件(诸如,GRLDR 的关联文件MENU.LST,或是通过'grub.exe
--config-file=(DEVICE)/PATH/YOUR_MENU_FILE'来指定的,或是通过grub的`configfile'命令来指定的)取得控制权之前,它的关联文件DEFAULT只要出现就会被使用,直到遇见了一个明确的`default'命令。

delmod
用法:
delmod modname|*
描述:
卸载已加载至内存的外部命令,与 insmod 命令作用相反。

执行未加参数的 delmode 命令,将输出当前已加载的外部命令。

如果外部命令WENV已加载,可执行 delmode WENV 进行卸载。

执行 delmode * 命令将卸载所有已加载的外部命令。

displaymem
用法:
displaymem
描述:
display what GRUB thinks the system address space map of the machine is, including all regions of physical RAM installed.
显示 GRUB 所判断的当前系统的内存分布,包括所有物理内存区域。

echo
用法:
echo [-e] [-n] STRING
描述:
(by zhaohj@wuyou)
输出指定内容。

用法:echo [-e] [-n] STRING
-e:允许转义
-n:不换行
不带参数的echo,默认不转义、自动输出换行符。

下面是一些转义符:
\NNN (1到3位)八进制值 NNN 表示的字符
\\ 反斜杠
\a 警报(声音)
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\xHH (1到2位)十六进制值为 HH 的字节
增强功能:颜色设置,只支持console模式(文本模式). 使用方法:
echo -P:XXYY $[ABCD]MESSAGE
-P为大写;XX为横坐标,YY为纵坐标。

用$[ABCD]来指定后面显示的字符使用的颜色.
A 值为1时闪烁 (blinking foreground color).
B 值为1时高亮(light)
C [0-7]背景色(background color)
D [0-7]前景色-字体颜色(foreground color)
例子:
1:输出
symmpi
PCI\VEN_1000&DEV_0050
命令:
echo symmpi
echo PCI\VEN_1000&DEV_0050

echo -e symmpi\r\nPCI\\VEN_1000&DEV_0050
#上面\r\n输出回车换行,\\输出\
2:输出
PCI\VEN_1000&DEV_0050 symmpi
#注意:输出前面有2个空格开头的内容
命令:
echo -e \x20\x20PCI\\VEN_1000&DEV_0050 symmpi
#上面\x20转义后为一个空格
errnum
用法:
描述:
return the error number.
返回最后一次命令的错误值。

errorcheck
用法:
errorcheck [on | off | status]
描述:
turn on/off or display the error check mode, or toggle it if no argument. 打开/关闭或显示错误检查模式,没有跟任何参数将切换错误检查开/关。

errorcheck(错误检查)命令控制着错误是否被处理。

默认错误检查是开启的 ,即在错误发生时命令脚本将停止执行。

而假如错误检查是关闭的,那么脚本将一直执行到 boot 命令。

一条 boot 命令可以把错误检查转变为开启。

例:
errorcheck on
#打开错误检查,遇到错误将终止执行。

errorcheck off
#关闭错误检查,执行中遇到错误将忽略,直至执行完毕。

errorechek
#切换错误检查模式。

errorcheck status
#显示当前错误检查模式
exit
用法:
exit
描述:
批处理专用命令。

退出批处理的执行,语法和MS-DOS的批处理几乎一模一样,类似的还有 goto :eof 命令。

如果需要中途停止批处理脚本的运行也可以用 exit 1 命令。

fallback
用法:
fallback NUM
描述:
go into unattended boot mode: if the default boot entry has any errors, instead of waiting for the user to do anything, it immediately starts over using the NUM entry (same numbering as 'default' command). this obviously won`t help if the machine was rebooted by a kernel that GRUB loaded.
如果调用当前的菜单项时出现错误,则转移到 NUM 项,执行 NUM 项菜单。

仅在菜单中使用,进入无人引导模式:如果默认启动项菜单执行出现错误,无需等待用
将立即跳转到 NUM 项菜单执行( NUM 计数方式和 'default' 中 NUM 计数相同)。

类似的命令还有 goto ,两个命令都是只能在菜单中使用,
区别是 fallback 是在菜单执行出错后跳转到指定的菜单执行,即被动跳转;goto则是用于主动跳转。

例:
title fallback test
fallback 0
find --set-root /ntldr
chianloader /ntldr
boot
执行时在查找 ntldr 文件失败后将不会提示用户出错,会直接跳转到 0 项菜单继续执行。

对比 goto 命令,实现同样效果:
title fallback test
find --set-root /ntldr || goto 0
chianloader /ntldr
boot
因为 || 的缘故,查找 ntldr 文件失败后会执行 goto 0 命令,跳转到 0 项菜单执行。

find
用法: find [--set-root[=DIR]] [--devices=DEVLIST] [--ignore-floppies] [--ignore-cd] [FILENAME] [CONDITION]
描述:
search for the filename FILENAME if all of partitions and print the list of the devices which contain the file and suffice CONDITION. CONDITION is a normal grub command, which return non-zero for TRUE and zero for FLASE. DEVLIST specify the search devices and order, the default DEVLIST is upnhcf. DEVLIST must be a combinatiaon of these letters (u, p, n, h, c,f). if the option --set-root is used and FILENAME is found on a device, then stop the find immediately and set the device as new root. if the option --ignore-floppies is present, the search will bypass all floppies.and --ignore-cd will skip (cd).
在所有分区上查找文件名, 并显示包含该文件的设备。

1、如果设置了参数 --set-root,则在找到第一个匹配后马上停止,并且把该设备设为根。

2、如果设置了参数 --ignore-floppies 将忽略软驱,即查找文件时不在软驱设备上查找。

3、如果设置了参数 --ignore-cd 将忽略光驱,即查找文件时不在光驱设备上查找。

4、0.4.5版grub4dos更新:新的find 命令语法允许指定要查找和设备和查找的顺序。

0.4.5新增参数 --devices=DEVLIST,用于指定查找的设备和顺序。

DEVLIST可以下以下的字母组合。

u,p,n,h,c,f -->分别对应 ud,pd,nd,hd,cd,fd,
查找时根据DEVLIST指定的设备顺序进行查找。

默认是upnhcf。

要注意的是若同时使用 --ignore-cd 或 --ignore-floppies 参数将会删除
devices列表中的c或f参数。

5、find 命令的语法允许带条件的查找设备。

find [OPTIONS] [FILENAME] [CONDITION]
选项文件名条件
其中的 CONDITION 是一个返回值是 TRUE 或者 FALSE 的标准 grub 命令。

注意:0.4.5版的find命令有一个改变,查找的时候会优先查找当前设备(如果在列表中的话)。

示例1:
find
这会列举所有的分区,所有的软驱和 (cd) 。

示例2:
find +1
这会列举文件系统已知的所有设备。

示例3:
find checkrange 0xAF parttype
这会列举分区类型为0xAF的所有分区。

示例4:
find /ntldr checkrange 0x07 parttype
这会列举分区类型为 0x07 且根目录存在 ntldr 的所有分区。

示例5:
find --set-root makeactive --status
将会把第一个激活的主分区设为当前根。

示例6:
find --set-root ls /GRUB/
使用 find 和 ls 组合可以用来搜索文件夹,并将查找到的分区设为当前根。

示例7:
find --set-root=/TMP /BOOT/GRUB/MENU.LST
它等同于这一组命令:
find --set-root /BOOT/GRUB/MENU.LST
root ()/TMP
示例8:
find --devices=h /file
只查找硬盘上的文件
示例9:
find --devices=hcf /file
依次查找硬盘、光盘、软盘上的文件
fontfile
用法:
fontfile FILE
描述:
指定中文字体文件,并切换到简体中文显示方式。

注意:需要使用中文版grldr 文件!!
需自行准备中文字库,以字库名为 fonts.gz 为例,使用。

相关文档
最新文档