近两天一直在折腾启动优盘程序,然后再度娘的时候发现了这个好东西。对于命令的用法和参数介绍的还算详细,转载自360doc。
GRUB4DOS 命令索引: |
background | 设置图形模式下的背景色。 |
blocklist | 输出文件的块清单标记。 |
boot | 引导已加载的操作系统或扇区链式加载器。 |
calc | 简单的计算器。 |
call | 批处理专用命令,跳转到指定标签执行,语法与MS-DOS中 call 语法几乎相同。 |
cat | 显示指定文件的内容。 |
cdrom | CDROM设备命令。 |
chainloader | 加载扇区链式加载器。 |
checkrange | 检查一条命令的返回值是否是在指定的值域或排列中。 |
checktime | 输出当前时间。 |
clear | 清屏幕。 |
cmp | 比较两个文件, 并且报告两者之间的不同的信息。 |
color | 改变菜单的颜色。 |
command | 声明外部命令位置。 |
commandline | 进入命令行模式。 |
configfile | 将指定文件作为配置文件予以加载。 |
dd | 复制文件。 |
debug | 打开/关闭除错模式。 |
default | 把 NUM 项菜单设为缺省值。 |
delmod | 删除已加载至内存的外部命令。 |
displaymem | 显示 GRUB 所判断到的当前系统的内存分布,包括所有物理内存区域。 |
echo | 输出指定内容。 |
errnum | 返回错误值。 |
errorcheck | 打开/关闭或显示错误检查模式。 |
exit | 批处理专用命令,中断批处理的执行,推出批处理,语法与MS-DOS中 call 语法几乎相同。 |
fallback | 如果调用当前的菜单项时出现错误,则转移到 NUM 项后重试。 |
find | 在所有分区上查找文件名, 并显示包含该文件的设备。 |
fontfile | 指定中文字体文件,并切换到简体中文显示方式。 |
foreground | 设置图形模式下的前景色。 |
fstest | 切换文件系统的试验模式。 |
geometry | 输出驱动器的相关信息。 |
gfxmenu | 使用 FILE 中的图形菜单。 |
goto | 跳转到指定标签执行,语法与MS-DOS中 goto 语法几乎相同。 |
graphicsmode | 改变图形模式,默认的是640×480模式,可改800×600模式。 |
halt | 关闭系统。 |
help | 显示内部命令的帮助信息。 |
hiddenflag | 分区隐藏标记。 |
hiddenmenu | 隐藏菜单。 |
hide | 通过在分区类型上置隐藏标志,隐藏指定分区。 |
if | 用于判断,同MS-DOS下的if。 |
initrd | 加载Linux格式的初始化虚拟盘, 并设置必要的参数。 |
insmod | 加载外部命令至内存,无需再读取源文件。 |
is64bit | 检测CPU 64位支持。 |
kernel | 尝试载入主引导影像文件。 |
lock | 如果用户未被认证,则终止命令的执行。 |
ls | 列表文件或目录。 |
makeactive | 将 root 设备置为活动分区。 |
map | 对设备进行映射。 |
md5crypt | 产生一个 MD5 格式的密码。 |
module | 对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。 |
modulenounzip | 与 ‘module’ 类似, 但是自动禁用了解压缩。 |
outline | 图形模式下为了避免字符被背景图片淹没,给字符加上轮廓,使字符容易与背景区分。 |
pager | 没有参数时,切换满屏暂停显示方式。 |
partnew | 创建一个新的主分区。 |
parttype | 改变指定分区(PART)的分区类型(TYPE)。 |
password | 设置密码。 |
pause | 暂停命令的运行,并给出一段信息。任意键按下后,将继续。 |
pxe | pxe设备命令。 |
quit | 从grub4dos退回到DOS。只有从DOS执行grub.exe进入grub 环境时才能使用该命令。 |
read | 从内存的指定位置读取一个 32-bit 的值,并以十六进制形式显示出来。 |
reboot | 重启系统。 |
root | 设置根分区。 |
rootnoverify | 类似’root’指令, 但不测试该分区文件格式是否被支持。 |
savedefault | 将当前项设置为默认的引导项。 |
serial | 初始化一个串口设备。 |
set | 设定变量。 |
setkey | 改变键盘映射关系。 |
setvbe | 在系统核心运行前被用来改变视频模式。 |
splashimage | 图形模式下载入背景图片文件。 |
terminal | 选择一个终端。 |
terminfo | 指定终端的功能。 |
testvbe | 测试所指定(MODE)的 VBE 模式。 |
timeout | 设置在自动启动缺省菜单前所等待的秒数。 |
title | 命名菜单项。 |
tpm | 初始化TPM(可信赖平台模块)的缓存。 |
unhide | 通过清除隐藏标志,解除指定分区(PARTITION)的隐藏。 |
uuid | 显示设备的 uuid 号。 |
vbeprobe | 侦测 VBE 的信息。 |
write | 将字符串写入设备或文件中。 |
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 control.Use –sdi if FILE is a
System Deployment Image, which is of the Windows XP RAM boot file format.Use
–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 命令才会真正启动。
例二:
直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及FreeDOS 的 KERNEL.SYS.
例如:
chainloader –edx=0xPPYY (hd0,0)/ntldr
bootchainloader –edx=0xYY (hd0,0)/io.sys
bootchainloader –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
bootchainloader (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
……
boottitle boot win7
……
boot
新菜单:
title boot xp
……
boottitle
cleartitle 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
用法: commandline
描述:
进入命令行模式。
configfile
用法: configfile FILE
描述:
将指定文件作为配置文件予以加载。
configfile 命令执行后,boot device 和 root device 将同时更新为 FILE 文件所在的设备。
如果在预置菜单(内置菜单)的初始化命令组中出现不带任何参数的 configfile
命令,那么控制将转到启动设备上的menu.lst文件。
例:
configfile /MENU.LST
#加载当前设备根目录下的配置文件
/MENU.LSTconfigfile (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
用法: 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 为例,使用
fontfile /grub/fonts.gz
进行加载。同时可以配合 splashimage 命令来加载背景图支持。
注意:使用fontfile方式加载中文支持,菜单文件需使用 ANSI 文本编码模式,否则中文会显示为乱码。
其他加载中文还有 unifont 方式和 gfxmenu 方式。unifont 是外部命令,但不能加载背景图。
使用unifont方式加载中文支持,菜单文件需使用 UTF-8 文本编码模式,否则中文会显示为乱码。
gfxmenu 方式制作较麻烦,但显示效果最好,菜单文件需使用 UTF-8 文本编码模式,否则中文会显示为乱码。
foreground
用法: foreground
RRGGBB
描述:
sets the foreground color when in graphics mode. RR
is read, GG is green, and BB is blue. Numbers must be in hexadecimal.
设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。
需配合 foreground 和 unifont 命令共同使用。unifont 用来加载中文支持,background 为背景色,foreground
为前景色。
fstest
用法: fstest [on | off | status]
描述:
turn on/off or display the fstest mode, or toggle it if no
argument.
切换文件系统的试验模式。
例:
fstest on
#打开文件系统的试验模式。fstest off
#关闭文件系统的试验模式。fstest
#切换文件系统的试验模式。fstest status
#显示当前文件系统的试验模式
geometry
用法: geometry [–tune] [–bios]
[–sync] [DRIVE]
描述:
print the information
for drive DRIVE of the current root device if DRIVE is not specified. if –tune
is specified, the geometry will change to the tuned value.if –bios is
specified, the geometry will change to BIOS reported value. if –sync is
specified, the C/H/S values in partiton table of DRIVE and H/S values in BPB of
each primary partition of DRIVE(or BPB of floppy DRIVE) will be updated
according to the current geometry of DRIVE in use.
输出驱动器的相关信息。在grub壳程序中, 你可以用这条命令设置驱动器参数为任意值。如果你省略了总扇区数,
则该值缺省有其它参数决定。
分支式驱动器
一些机器在 CHS 和 LBA
模式之间对驱动器实施不同的动作。当你使用标准的BIOS调用int13/AH=02h来读取扇区时,你可能会发现这个驱动器是一个软盘,但是当你用扩展的BIOS调用(EBIOS)int13/AH=42h来读取扇区时,你会发现是一个光盘。这样的驱动器被叫做分支式的。
一个分支式的驱动器拥有两个驱动器号:
一个是标准的 BIOS
驱动器号十六进制的 00或FF ,并且这个驱动器只使用 CHS 模式的磁盘访问(标准的BIOS int13/AH=02h);
另一个是标准的 BIOS
驱动器号(按位与)0x100 (即十进制的256),并且这个驱动器只使用 LBA 模式的磁盘访问(EBIOS int13/AH=42h)。
例如,驱动器0x00(即,第一软驱)是分支式的.
那么驱动器(0x00)使用 CHS 模式来访问它的扇区
而驱动器(0x100)则使用LBA 模式来访问它的扇区。
geometry 命令会用 BIF 代替常见的 CHS 和 LBA
来报告分支式驱动器的磁盘访问模式已知的分支式驱动器。发现虚拟机Virtual
PC和一些真实机器当它们引导一个软盘模拟模式的可启动光盘时会建立一个分支式的软驱。
命令”geometry (fd0)”将显示:
drive 0x00(BIF): C/H/S=…Sector Count/Size=…/512
而”geometry (0x100)”将显示
drive 0x100(BIF): C/H/S=…Sector Count/Size=…/2048
实际上(0x100) 可以访问整个光盘。
你可以执行”ls (0x100)/”
显示光盘上文件(不是那个被引导的软盘映像中的文件),当然 “ls
(fd0)/”可以列举那些在被引导的软盘映像中的文件。
注意:仅仅是某些(真实的或虚拟的)机器有这样的行为,其他的机器不会产生分支式驱动器。
磁盘几何参数的修正和同步
当一个USB 存储设备被连接到一台(或者是不同的)机器上时,分区表中或 BPB
中的磁盘几何参数值可能是无效的,并且这个机器可能在启动时死机。因此你需要为驱动器找到一个正确的磁盘几何参数(使用 ‘geometry –tune’
命令),然后更新分区表或 BPB 中的磁盘几何参数(使用 ‘geometry –sync’
命令)。
假如你想启动到DOS,那上面的步骤是必要的,因为 DOS 要求有正确的磁盘几何参数在分区表和BPB 中。Windows 及
Linux 应该也需要,因为引导程序运行在实模式中。
gfxmenu
用法: gfxmenu
FILE
描述:
使用 FILE 中的图形菜单。
使用它,你首先需要找到一个你需要的mesage文件,然后在menu.lst中用类似这样的命令来装载它:
gfxmenu /message
这是一个全局命令,也就是说,不能放入任何的菜单项中。
同时,它只能被使用于配置文件中,而在控制台模式中执行它是无效的。
注意: 1、 gfxmenu 不能与全局密码保护功能同时使用,且配置文件需要使用 UTF-8 编码格式。
2、 若使用 gfxmenu 后造成 default 命令和 timeout 命令失效,可以尝试将default 命令和
timeout 命令
放在 gfxmenu 命令前执行。
在 gfxmenu 之后可以运行其它 menu.lst,下面是在 GFXMENU 之后使用 CONFIGILE 的示例:
# The menu.lst file for gfxmenu
default=0
timeout=5
gfxmenu /message
configfile
/another.lst
title 0……….
…………….
title
1……….
…………….
title
2……….
…………….
# End of menu.lst
# Begin another.lst
default=0
timeout=5
title
0……….
…………….
title
1……….
…………….
title
2……….
…………….
# End of another.lst
会首先尝试执行 gfxmenu 命令。当它退出时(或者失败时)控制会转到 another.lst 菜单。
goto
用法: goto NUM (菜单中使用)
goto [:]LABLE (批处理中专用)
描述:
goto 命令有两种,一种是菜单中使用的 goto
,类似fallback命令,可以在执行某项菜单失败后无需用户干预跳转到指定的 NUM 项菜单执行,与fallback区别为主动跳转和被动跳转。fallback是出错后才能进行跳转,goto则是可以根据条件判断来进行跳转(fallback实际也可以,但是会很麻烦)。
另一种是批处理中使用的 goto 命令,语法和MS-DOS的批处理几乎一模一样,跳转到指定的 LABLE 标签执行。类似 call 命令,区别是 call
跳转执行时可以另外附加参数,goto不可以。
例:
菜单中使用:
title goto test
find –set-root /bootmgr || goto
0
chainloader /bootmgr
boot
#在所有设备下查找 bootmgr 文件,找不到则跳转到 菜单0
继续执行。
在批处理中使用:
=========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.
graphicsmode
用法: graphicsmode [0x12 |
0x6A]
描述:
display/set the graphics mode
number for the next graphics init.return the currentgraphics mode
setting.
现在有两2种可选的图形模式,默认的是640×480模式。新的是800×600模式(对一些机子支持不是很好,有可能会死机)。
使用以下方法可以切换图形显示模式。
1. 确定目前是在控制台模式,你可以执行命令 “terminal console” 进行切换。
2. 使用命令”graphicsmode 0x6a” 设置图形模式为0x6A。
3.
进入图形模式,你可以使用命令”terminal graphics”.
如果在切换之前不是图形模式,那该命令无效,你可以使用splashimg或fontfile命令。
注: 1. 如果想换回默认的640×480,把上面的第2步改成”graphicsmode
0x12“.
2. 经过改进,更新的版本,可以直接改变,只要上面第2步一条命令就可以搞定。
例子:
在默认图形模式中(使用splashimage或fontfile命令都会进入图形模式).
输入以下命令可以直接切换到800×600.
graphicsmode
0x6a
halt
用法: halt [–no-apm]
[–no-acpi]
描述:
halt the system using ACPI
and APM. if –no-acpi is specified, only APM is to be tried. if –no-apm is
specified, only ACPI is to be tried. if both option are specified, return to
grub4dos with failure.
可以使用ACPI或APM模式关闭系统。
halt –no-apm
当使用 –no-apm 参数时,只有 ACPI 关机代码才起作用。
halt –no-acpi
当使用 –no-acpi 参数时,只有 APM 关机代码才起作用。
halt –no-apm –no-acpi
当同时使用 –no-apm 和 –no-acpi 参数时,halt 给出失败信息,然后返回 grub4dos。
halt –force-sci
–force-sci 是ACPI关机方式中的一种。
关闭系统命令还有 zw2312914 编写的 g4d_off 外部命令,当使用 halt 关闭系统失败时可以尝试使用 g4d_off
关闭系统。
g4d_off 下载见 http://code.google.com/p/grubutils/downloads/list
help
用法: help [–all] [PATTERN
…]
描述:
display helpful information about builtin commands.Not
all commands aren`t shown without the option ‘–all’
显示内部命令的帮助信息。要查看所有命令的帮助,请使用 `–all’ 参数。
hiddenflag
用法: hiddenflag [–set |
–clear] [PARTITION]
描述:
hide/unhide
PARTITION by setting/clearing the “hidden” bit in its parition type code, or
report the hidden status. The default partition is the current root
device.
通过更改分区类型来隐藏/显示分区,默认分区是当前根设备。
类似命令 hide 和 unhide
例:
hiddenflag
#输入当前跟设备的分区显/隐状态。hiddenflag –set
(hd1,0)
#将第二硬盘第一主分区设置为隐藏(即若原分区类型为0x07,现在分区类型为0x17)。
对当前根设备的分区操作时可以省略 PARTITION, 即 hiddenflag –set
hiddenflag –clear
(hd1,0)
#显现第二硬盘第一主分(即若原分区类型为0x17,现在分区类型为0x07)。
对当前根设备的分区操作时可以省略 PARTITION, 即 hiddenflag –clear
hiddenmenu
用法: hiddenmenu [–chkpass]
NUM
描述:
隐藏启动菜单,不会产生启动菜单,使用指定的 NUM 项菜单启动,可以按esc看到主菜单。
–chkpass参数
功能: 在隐藏菜单的时候按Esc键要输入正确的密码才可以显示菜单。
注意:1.该功能启用之后,如果按了其它按键则直接启动默认菜单。
默认的Esc按键可以自由设置。使用–chkpass=KEY
2.菜单初始化有password命令时才需要输入密码。
3.按键代码如果不清楚可以使用 pause –test-key 命令来获取功能。
例子: hiddenmenu –chkpass=0x8500 按F11键才可以显示菜单。
hiddenmenu –chkpass 按Esc键才可以显示菜单。
hiddenmenu –chkpass=0x2200 按Alt+G显示菜单。
hide
用法: hide
PARTITION
描述:
hide PARTITION by setting the
“hidden” bit in its partition type code.the default partition is the current
root device.
通过在分区类型上置隐藏标志,隐藏指定分区。与 hiddenflag 命令类似,
但 hide
命令只能用来隐藏分区,且可以省略 PARTITION 参数,此时认为 PARTITION 是当前的 root 设备。
例:
hide (hd0,0)
#隐藏第一硬盘第一主分区
if
用法: if [/I] [NOT] STRING1==STRING2 [COMMAND]
if [NOT] exist VARIABLE|FILENAME [COMMAND]
描述:
1.如果 STRING1==STRING2 字符串匹配,执行后面的COMMAND(如果有指定的话)。否则返回TRUE。
2. /I 参数指写不区分大小写匹配。
3.[NOT] 相反,如果STRING1==STRING2不匹配。
4.exist 用于判断变量VARIABLE或文件FILENAME是否存在(filename必须以”/“或”(“开头)。
例子:
1.判断字符串是否相等,并且不区分大小写。
if /i test==%myvar% echo this is a
test
2.判断字符是否为空。
if %myvar%#==# echo variable myvar not
defined.
注:我们使用了一个#不防止空操作,当然也可以使用其它字符,如
if “%myvar%”==”” echo variable myvar not
defined.
使用方法举例:
1.显示一个包括变量的串。
echo myvar = %myvar%
2.使用一个变量代替命令。
set print=echo
%print% This a
test.
3.你可以使用一个”^“来阻此被变被扩展,例子
echo %myvar^%
或
echo
%my^var%
将会显示 %myvar%而不是扩展myvar之后的字符。总之,只要出现了^那就不会扩展这个变量。
注:我们只处理在%%之间的^符号。
initrd
用法: initrd FILE
[FILE…]
描述:
load an initial ramdisk FILE
for a Linux format boot image and set the appropriate parameters in the Linux
setup area in memory. for Linux 2.6+ kernels, multiple cpio files can be loaded.
加载Linux格式的初始化虚拟盘, 并设置必要的参数。
指定在系统启动访问真正的根文件系统前,访问的ramdisk映象。
insmod
用法: insmod MODFILE|FILE.MOD
描述:
FILE.MOD is MODFILE
package, it has multiple MODFILE
将外部命令加载到内存,使得执行外部命令时直接从内存读取,而不是从源设备读取,加快执行速度。
FILE.MOD 是使用 makemod 程序生成的外部命令合集,免去多次使用insmod加载外部命令的麻烦。
也可以使用Fbinsttool工具来制作 FILE.MOD 文件。
例:
insmod /GRUB/WENV
#将WENV加载至内存
is64bit
用法: is64bit
描述:
return true if CPU is 64-bit and false if not.
如果CPU支持 64 位的话返回true,否则返回false
kernel
用法: kernel [–no-mem-option]
[–type=TYPE] FILE [ARG …]
描述:
attempt to
load the primary boot image from FILE. the rest of the line is passed verbatim
as the “kernel command line”. any modules must be reloaded after using this
command.TYPE must be either of “netbsd”,”freebsd”,”openbsd”,”linux”,”biglinux”
and “multiboot”. the option –no-mem-option tells GRUB not to pass a Linux`s mem
option automatically.
尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。
使用此命令以前,内核所用到的模块应该被重新载入。
参数 –type 用于说明内核的类型,包括 “netbsd”,
“freebsd”, “openbsd”, “linux”, “biglinux” 和 “multiboot”。
参数 –no-mem-option 用于说明不必自动传递 Linux
的内存参数。
lock
用法: lock
描述:
break a
command execution unless the user is authenticated.
如果用户未被认证,则终止命令的执行。
在menu.lst的全局设置里用password选项指定一个密码,然后在菜单项的title的下一行
加上一个’lock’命令,这样在开机引导该菜单项时,就要用p命令解锁,并输入密码,才能引导该系统。
例:
password 123
title boot xp
lock
find –set-root
/ntldr
chainloader /ntldr
ls
用法: ls [FILE_OR_DIR]
描述:
list
file or directory.
列表文件或目录。
例:
ls
#列出当前设备根目录下的文件和目录
可以用来判断文件夹或文件是否存在。使用 cat –length=0 FILE 只能判断文件是否存在。
注意: 若文件夹下无任何文件,对 ls 命令而言则认为该文件夹不存在。
makeactive
用法: makeactive [–status]
[PART]
描述:
activate the partition PART. PART
defaults to the current root device.this command is limited to _primary_ PC
partitions on a hard disk.
将 root 设备置为活动分区。当然,此命令只对 PC 的硬盘主分区有效。
例:
makeactive –status (hd0,0)
#查看第一硬盘第一主分区是否为活动状态。makeactive
(hd0,0)
#将第一硬盘第一主分区设置为活动。
map
用法: map [–status] [–mem[=RESERV] [–top]] [–hook] [–unhook]
[–unmap=DRIVES] [–rehook]
[–floppies=M] [–harddrives=N] [–memdisk-raw=RAW]
[–a20-keep-on=AKO]
[–safe-mbr-hook=SMH] [–int13-scheme=SCH] [–ram-drive=RD]
[–rd-base=ADDR][–rd-size=SIZE]
[[–read-only] [–fake-write] [–unsafe-boot]
[–disable-chs-mode] [–disable-lba-mode] [–heads=H]
[–sectors-per-track=S] TO_DRIVE_FROM_DRIVE]
描述:
map the drive FROM_DRIVE to the drive TO_DRIVE. this is necessary
when you chain-load some operating systems, such as DOS, if such an OS resides
at a non-first drive. TO_DRIVE can be a disk file, this indicates a disk
emulation. if –fake-write is given, any write operations to the emulated drive
are allowed but the data written will be discarded. the –unsafe-boot switch
enables the write to the Master and DOS boot sectors of the emulated disk. if
–disable-chs=mode is given, CHS access to the emulated drive will be refused.
if –disable-lba-mode is given, LBA access to the emulated drive will be
refused. if RAW=1, all memdrives will be accessed without using int15/ah=87h. if
RAW=0, then int15/ah=87h will be used to access memdrives. if one of
–status,–hook,–unhook,–rehook,–floppies,–harddrives,–memdisk-raw,
–a20-keep-on,–safe-mbr-hook,–int13-scheme,–ram-drive,–rd-base or –rd-size
is given, then any other command-line arguments will be ignored. the –mem
option indicates a drive in memory. if RESERV is used and <=0, the minimum
memory occupied by the memdrive is (-RESERV) in 512-byte-sectors. if RESERV is
used and >0 , the memdrive will occupy the mem area starting at absolute
physical address RESERV in 512-byte-sectors and ending at the end of this mem
block(uaually the end of physical mem).
对设备进行映射。这对于扇区链式引导是很有用的功能,比如 DOS。
这里,目的驱动器(TO_DRIVE)可以是一个磁盘文件,即使用磁盘虚拟功能。注意,这要求磁盘文件是连续存放于分区中的。
在map命令行中,(hdm,n)+1式的写法被解释成代表整个(hdm,n)分区,而不仅仅是此分区的第一扇区。
这样的形式
map … (fd?)
是一个软盘仿真,而下面的形式
map … (hd?)
是一个硬盘仿真。
1、使用 –mem 参数表示把要仿真的镜像先加载到内存后再进行仿真。
不加此参数时要求镜像存放在连续的扇区中。只有加了–mem参数才能使用firadisk或winvblock等第三方驱动。
例一: map –mem=-2880 (hd0,0)/floppy.img
(fd0)
这个内存驱动器(fd0)将占用至少1440 KB的内存。这个用法对那些小于1440 KB的1.44M 软盘镜像很有用。
例二: map –mem –read-only (hd0,0)/hd.img
(hd1)
这个内存驱动器成为了一个硬盘驱动器,并且是只读的。这表示你不能向这个(hd1)中写入数据。
注:当使用–mem时,甚至是在进入Windows的时候,它看来都相当安全。Win98可以正常运行内存驱动器。
Windows NT/2000/XP不能识别仿真的驱动器,不管是否使用了–mem选项。
2、0.4.5新增参数 –top ,配合 –mem 参数使用,可以将镜像加载至高端内存,如 map –mem –top
(hd0,0)/hdimg.img (hd1) 。
注意:把镜像加载到高位内存就不能使用gzip压缩,两者不能同时实现。
在grub4dos中,内存在3.25G处被分成了高端内存和低端内存两端,镜像不能跨3.25G这个点。
比如4G内存的机器,高端内存大概为4.0G-3.25G=0.75G,即750M左右。
要注意的是,高端内存和低端内存是不能被同一个镜像同时使用的,比如4G内存,不能将800M体积的镜像加载到高端内存,
因为高端内存只有750M左右,多余部分不会写入低端内存中,使用时要注意。
3、使用 –hook 参数表示仿真立即生效,即使是在GRUB的命令行模式中。
4、参数 –unmap用法:
map –unmap=RANGE
其中的 RANGE 是一个已被映射的 BIOS 驱动器域。BIOS 驱动器号 0 表示第一软驱,1 表示第二软驱;
0x80 表示第一硬盘,0x81 表示第二硬盘,等等;
虚拟光盘(hd32) 对应于BIOS 驱动器号 0xA0 ,(hd33) 对应于0xA1 ,等等。
示例 1:
map –unmap=0,0×80,0xff
这将反映射虚拟软驱 (fd0),虚拟硬盘(hd0)和虚拟光盘(0xff)。
示例 2:
map –unmap=0:0xff
这将反映射所有的虚拟软驱,所有的虚拟硬盘和所有的虚拟光盘。
注意 1:通常,一条’map’命令将在驱动器映射表中为虚拟驱动器增加一个表项。
而’–unmap’意味着在驱动器映射表中(具体是指虚拟驱动器)的表项会被删除。
注意 2:–unhook 选项仅仅是断开 INT13 的挂钩(在中断矢量表中)。它不会影响到驱动器映射表。
而且在执行了一个’boot’命令之后,即使是它已经被反映射了的时候,
INT13磁盘仿真程序也会在需要的时候(即,驱动器映射表非空时)自动建立挂钩。
注意 3:通常你需要在已经改变了驱动器映射表之后执行一条`map –rehook’命令。
5、若使用了 –read-only 参数,该功能将使`磁盘’处于只读;
6、若使用了 –fake-write 参数,该功能将使`磁盘’处于假写,即可以”写入”数据,但是却并未记录到真实磁盘上;
7、若使用了 –unsafe-boot 参数,该功能将使`磁盘’处于真实可写;
8、若使用了 –disable-chs-mode 参数,CHS 访问功能将被禁用;
9、若使用了 –disable-lba-mode 参数,LBA访问功能将被禁用;
10、 H 和 S 指定了虚拟磁盘的物理参数。
11、若使用了 –status, –hook, –unhook,–rehook 诸参数之一, 那么其它的命令行参数将被忽略。
12、参数–safe-mbr-hook=SMH以及–int13-scheme=SCH 都和Win9x环境下(尽可能稳定的)使用磁盘仿真有关。
SMH参数可以是0或1这个两个值之一。作为默认,SMH参数为1 。如果你在Win9x中遇到磁盘仿真的问题,
你可以插入这样一行到`boot’命令之前,
map –safe-mbr-hook=0
然后再试一次。
SCH在使用时,也可以取0或1之一的值。作为默认,SCH为1 。如果你在Win9x中遇到磁盘仿真的问题,
你可以插入这样一行到`boot’命令之前,
map –int13-scheme=0
然后再试一次。
顺便提醒一下。类似于–safe-mbr-hook和–int13-scheme ,MAP命令中有几个其他选项可被用以设置全局变量。
13、 map –floppies=M
其中的M 可以是0 , 1 或者2 。MAP 将把一个恰当的M 值设置在地址0040:0010 处。
map –harddrives=N
其中的N 可以是从0到127之间的值。MAP将把N 值设置在0040:0075处。
注意: 1、BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真实的软驱时,
你通常应该专门使用诸如’map –floppioes=’以及 ‘ map –harddrives=’来设置它们。
如果不这样做,DOS可能会启动失败。
2、’map –floppies=’和’map –harddrives=’需要在没有执行映射前单独使用。
14、 map –memdisk-raw=RAW
其中的RAW值默认为1 ,以防BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷。
如果RAW=0,将通过int15/ah=87h访问内存驱动器,用以模拟和内存驱动器类似的原生模式。
15、 map –ram-drive=RD
其中RD默认是0x7F的软驱号。如果随机内存驱动器是一个硬盘驱动器镜像(第一扇区含有分区表),
那么你可以将 RD 设置为大于或等于0x80并且小于0xA0之间的值。
如果是一个光盘镜像,那需要设置为大于或等0xA0并且小于0xFF之间的值。
map –rd-base=ADDR
map –rd-size=SIZE
其中的 ADDR 指定出内存映像的物理基地址。SIZE指定出内存映像的字节数大小。ADDR 默认为0 。
SIZE的默认值也是0 ,但是值为0 表示4 GB ,而不是零字节长的磁盘。
随机内存驱动器可以在 GRUB 环境中通过使用 (rd) 设备来访问。
16、参数–in-situ被使用于硬盘驱动器映像或者是硬盘驱动器分区。
通过–in-situ ,我们可以把一个逻辑分区象征性的作为一个主分区来使用。
–in-situ 的映射是整个驱动器的映射。它只虚拟出分区表和 DBR 上的BPB里的隐藏扇区数。
尽管磁盘仿真在 win9x 中可能会遇到的各种问题,但在win9x中,in-situ的映射却运行得很好。
注意 –in-situ 的映射不会改变真实的分区表。
示例: map –in-situ (hd0,4)+1 (hd0)
17、参数 –a20-keep-on ,它跟内存驱动器扇区访问后的A20 地址线控制有关
map –a20-keep-on=0
它必须被使用于”map –hook”命令之前。
作为默认,在INT13 对随机内存的扇区访问之后 A20 将一直开启。
如果”map –a20-keep-on=0″ 被使用,那么在INT13 中断调用后的 A20 的状态将和在INT13中断调用前相同。
18、常用例子:
grub> map –status
#输出当前映射状态,可以报告出一些有价值的东西grub> map /ADD.ISO (0xff)
grub> map –hook
grub> chainloader
(0xff)
grub> boot
#将根目录下的 ADD.ISO
直接映射为(0xff)号设备(光驱),并启动grub> map –mem /PE.ISO (0xff)
grub> map –hook
grub> chainloader
(0xff)
grub> boot
#将根目录下的 PE.ISO
先加载至内存,再映射为(0xff)号设备(光驱),并启动grub> map –mem /DGDOS.IMG (fd0)
grub> map –hook
grub> rootnoverify
(fd0)
grub> chainloader ()+1
grub> boot
#加载软盘镜像IMG文件
md5crypt
用法: md5crypt
描述:
generate a password in MD5 format
产生一个 MD5 格式的密码。
注意: 即使 密码明文 相同,使用 md5crypt 产生的 MD5密码 也会不同。
module
用法: module FILE [ARG
…]
描述:
load a boot module FILE for a
Multiboot format boot image (no interpretation of the file contents is made, so
users of this command must know what the kernel in question expects). the rest
of the line if passed as the “module command line”, like the ‘kernel’
command.
对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。
剩余参数作为`模快命令行`传递, 象’kernel’命令一样。
modulenounzip
用法: modulenounzip FILE
[ARG …]
描述:
the same as ‘module’, expect that automatic
decompression is disabled.
与 ‘module’ 类似, 但是自动禁用了解压缩。
outline
用法: outline [on | off |
status]
描述:
turn on/off or display the outline mode, or toggle
it if no argument.
打开/关闭 或 显示 图形模式下的字符轮廓显示模式。
pager
用法: pager [on | off |
status]
描述:
turn on/off or display the pager mode, or toggle it
if no argument.
没有参数时,切换满屏分页显示模式。如果使用了 FLAG 参数,那么它为`on’ 时为开启, 为 `off’ 时为关闭。
partnew
用法: partnew [–active] PART TYPE
START [LEN]
描述:
create a primary patition at
the starting address START with the length LEN, with the type TYPE. START and
LEN are in sector units.if –active is used, the new partition will be active.
START can be a contiguous file that will be used as the content/data of the new
partition, in which case the LEN parameter is ignored, and TYPE can be either
0x00 for auto or 0x10 for hidden-auto.
创建一个新的主分区。START 为起始扇区号,LEN 为其包含的扇区数,TYPE 为其分区类型。
可以使用 PARTNEW 来建立一个新的主分区。PARTNEW可以为逻辑分区生成一个新的主分区项(在分区表中)。
例1:
partnew (hd0,3) 0x07 (hd0,4)+1
这里的(hd0,4)+1 代表了整个(hd0,4)分区。这条命令将建立一个分区类型为 0x07 的新的主分区(hd0,3),
并且它的内容(即数据)和逻辑分区(hd0,4)一样。
例2:
就像整个逻辑分区时的情况一样,一个连续的分区映像文件也可以用在PARTNEW 命令中
partnew (hd0,3) 0x00 (hd0,0)/my_partition.img
#这个 0x00 类型表示这个 MY_PARTITION.IMG
映像文件的分区类型由自动检测确定。上面的命令将建立一个类型恰当的新的主分区(hd0,3),并且使用这个连续的(hd0,0)/my_partition.img
文件中的全部内容(数据)作为它的内容(数据)。
注意:PARTNEW 将自动修正 BPB 中的”隐藏扇区数”并且这个修改是永久的。而且PARTNEW修改分区表也是永久的。
例3:
除了建立分区表项外,PARTNEW也可以用来删除(抹掉,擦除)一个分区表项。例如,
partnew (hd0,3) 0 0 0
这样,主引导记录中最后一个分区表项将被清空。通常,你可以用”partnew PARTITION 0 0
0″的格式来抹掉其分区表项,但是已经存储在这个分区中的数据不被影响。
parttype
用法: parttype PART
[TYPE]
描述:
change the type of the partition
PART to TYPE. if TYPE is omitted,return the partition type of the specified
device (instead of changing it). PART default to the current root device.
改变指定分区(PART)的分区类型(TYPE)。 不能无参数执行,至少需 PART 参数指定分区。
例:
grub> parttype (hd0,0)
#输出第一硬盘第一分区的分区类型。grub> parttype (hd0,0) 0x17
#将第一硬盘第一分区的分区类型改为
0x17。
password
用法: password [–md5] PASSWD
[FILE]
描述:
if used in the first section of a
menu file, disable all interactive editing control (menu entry editor and
command line). if the password PASSWD is entered, it loads the FILE as a new
config file and restarts the GRUB Stage 2. if you omit the argument FILE, then
GRUB just unlocks privileged instructions. you can also use it in the script
section,in which case it will ask for the password, before continuing. the
option –md5 tells GRUB that PASSWD is encrypted with md5crypt.
设置密码。
当其处于菜单文件的首项时,将禁用所有的交互式菜单编辑功能,包括编辑菜单项(‘e’)/进入命令行(‘c’)。
当正确输入密码 (由PASSWD指定)后,载入新的菜单文件(由FILE指定)。
如果你没有指定 FILE 项,那么上述被禁用的功能将被启用了。当然,你也可以将此命令用到某
个菜单项里,用以提高系统安全性。可用–md5指定一个密码,启用grub的密码保护。
为安全起见,一般使用md5值,这个值可以使用 md5crypt 命令生成。
例:
default 0
timeout 10
password 123 /MENU2.LSTtitle boot xp
password 456
chainloader
/ntldr
boot
…………
#加载菜单后,只有 ‘p’ 和 ‘b’ 和两个快捷键可以起作用。可以按 ‘p’ 输入密码, 或按 ‘b’
来启动高亮选中的菜单。本菜单加载后按 ‘p’ 并输入正确的密码(123)后,会加载根目录下的MENU2.LST菜单文件。若选择 boot xp
项菜单启动,需要输入密码 456
后才能继续向下执行,密码错误将返回原菜单。在menu.lst的全局设置里用password选项指定一个密码,然后在菜单项的title的下一行加上’lock’命令,这样在开机引导该菜单项时,就要用p命令解锁,并输入密码,才能引导该系统。
pause
用法: pause [–wait=T] [–test-key]
[MESSAGE…]
描述:
print MESSAGE, then wait until a key is
pressed or T seconds has passed.
暂停命令的运行,并给出一段信息。任意键按下后,将继续。
–test-key参数,显示按键扫描码。
例1:
grub> pause This is a test.
This
is a test.
#按任意键后
grub>
例2:
grub> pause –wait=2 Second test.
Second test.
#倒计时2秒后,将自动返回命令行
grub>
例3:
grub> pause –test-key
#按 数字键1 后
0231
grub>#即数字键1的扫描码是 0231
pxe
用法: pxe [cmd]
[parameters]
描述:
在预置菜单中可以使用 ‘pxe
detect‘ 命令
pxe detect [BLOCK_SIZE] [MENU_FILE]
包大小选项 菜单文件选项
BLOCK_SIZE 选项指定出 pxe 包的大小。如果它没有被指定或者是被指定为 0
,那么grub4dos将通过一个侦测过程来获取数据传送包的一个恰当的的值。
MENU_FILE 选项指定出 PXE 服务器上的配置文件。如果它被省略,在
menu.lst 子目录中的标准配置文件将获得控制。关于menu.lst 子目录中的配置文件的描述,请看下文。
如果MENU_FILE
是以”/”开始的,那么PXE 服务器上的 MENU_FILE
将获得控制,否则(如果MENU_FILE不是以”/”开始)将没有菜单被执行。
在你的系统用 512
字节的默认包大小不能运行时,通常你应该在访问(pd)设备之前使用一条 “pxe blksize …” 或 一条 “pxe detect
…”命令。
GRLDR 作为 PXE 启动文件
GRLDR 可以被用作远程或网络服务器的 PXE 启动文件。(pd) 设备被用于访问服务器上文件。当 GRLDR
已经通过网络启动后,它将使用预设菜单作为配置文件。不过,你可以使用”pxe detect”命令,它的表现是和pxelinux一样的方式。
*
首先,它将使用设备类型(使用它的 ARP 类型码)和地址来搜索配置文件,全部用破折号分割的十六进制;例如,对一个以太网(ARP
类型是1)的88:99:AA:BB:CC:DD 地址,它会用文件名01-88-99-AA-BB-CC-DD 来搜索。
*
其次,它将使用它本地的IP 地址大写字母的十六进制格式(即192.0.2.91
转换为C000025B)来搜索配置文件。如果文件没有找到,它将去掉一个十六进制数字后再试一次。最后,它会尝试寻找一个名为 default
(小写字母)的文件。
PXE 设备
如果使用PXE启动,GRUB4DOS 将建立一个虚拟设备
(pd),可能通过它来访问tftp服务器上的文件。你可以使用下面的步骤来设置一个无盘启动环境:
客户端:
你需要从 PXE ROM 上启动。
服务器端:
你需要配置一个dhcp服务器和一个tftp服务器。在dhcp服务器上,使用grldr作为引导文件。
配置文件:
你可能希望为不同的客户端加载一个不同的menu.lst 。GRUB4DOS将在以下位置查找配置文件:
[/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
[/mybootdir]/menu.lst/C000025B
[/mybootdir]/menu.lst/C000025
[/mybootdir]/menu.lst/C00002
[/mybootdir]/menu.lst/C0000
[/mybootdir]/menu.lst/C000
[/mybootdir]/menu.lst/C00
[/mybootdir]/menu.lst/C0
[/mybootdir]/menu.lst/C
[/mybootdir]/menu.lst/default
如果/mybootdir/menu.lst 文件存在,将会优先使用,这样可以加快引导速度.
这里,我们假设客户端的网卡mac地址是 88:99:AA:BB:CC:DD ,而ip地址是192.0.2.91 (C000025B)。
/mybootdir 是引导文件所在目录,例如,如果引导文件是 /tftp/grldr ,那么mybootdir=tftp 。
如果上面的文件都未出现,grldr将使用它的内置的menu.lst 。
这是一个如何访问tftp服务器上文件的menu.lst文件流程。
title Create ramdisk using map
map –mem (pd)/floppy.img
(fd0)
map –hook
rootnoverify (fd0)
chainloader (fd0)+1title Create ramdisk using memdisk
kernel
(pd)/memdisk
initrd (pd)/floppy.img
chenall注: 你也可以省略 (pd)/ 或者使用 (bd)/ 或 ()/
,这样可以使得一个菜单可以不经过修改就可以用于其它地方的启动,你可以看到这个 menu.lst 和在普通磁盘上引导的是相似的,你只是需要把象(hd0,0)
这样的设备用 (pd) 来代替。
磁盘设备和 pxe 设备有一些不同点:
1. 不能把pxe设备上的文件直接列表显示。如要列表,要求服务器上有dir.txt文件,
使用以下命令可以创建一个dir.txt文件
dir /b>dir.txt
也可以直接使用TFTPD32的服务器,选择自动生成DIR.TXT文件.
2.blocklist 命令不能用于 pxe 设备上的文件。
3.如果你想映射一个pxe服务器上的文件,你必须使用–mem 选项 。
当你使用 chainloader 命令装载一个pxe 设备上的文件时,有一个选项你可以使用:
chainloader –raw (pd)/BOOT_FILE
选项 –raw 的执行就和–force一样,但是它是一次性将文件装载执行。
这可以改善一些情况下的执行效率。
使用 pxe 命令来控制 pxe 设备。
1. pxe
如果没有使用任何参数,pxe 命令将显示当前设置。
2. pxe blksize N
设置tftp packet size (传输包)大小。最小值是 512 ,最大值是 1432 。
这个参数主要使用在那些不支持远大于 512 字节包大小的tftp 服务器上。
3. pxe basedir /dir
为tftp 服务器上的文件设置基本目录。如
pxe basedir /tftp
那么在pxe 设备上的所有文件都和目录 /tftp 相关。
例如,(pd)/aa.img 对应于服务器上的 /tftp/aa.img 。
基本目录的默认值是引导文件所在目录,例如,如果引导文件是 /tftp/grldr,
那么默认的基本目录就是 /tftp 。
4. pxe keep
保持 pxe stack。GRUB4DOS的默认退出时自动卸载pxe strack。
如果你希望在引导后继续使用PXE功能,比如用于RIS安装,这时必须使用这个选项。
5. pxe unload
立即卸载 PXE stack。pxe占用了大量的常规内存,某些引导程序可能会无法正常引导。
这时你可以先卸载然后再引导。一个例子:
title Linux memtest
map –mem /memtest.bin (rd)
pxe
unload
kernel (rd)+1
如果在PXE启动时直接kernel /memtest.bin可能会失败。
quit
用法: quit
[–disable-a20]
描述:
go back to DOS if GRUB was previously
launched from DOS
如果是从DOS环境进入GRUB环境中,使用本命令可以退回到DOS环境中。
read
用法: read ADDR
描述:
read a
32-bit value from memory at address ADDR and display it in hex format.
从内存的指定位置读取一个 32-bit 的值,并以十六进制形式显示出来。
附:在固定位置访问的一些内部变量
也可见 其他相关 中 在固定位置访问一些内部变量 部分
地址 长度
说明
========= ==============
==============================================
0000:8208
4字节(即双字) 启动分区号 install_partition (the boot partition)
0000:8280
4字节(即双字) 启动驱动器号(boot_drive)
0000:8284 4字节(即双字) pxe 客户端 ip
(即本地ip)
0000:8288 4字节(即双字) pxe 服务器 ip
0000:828C
4字节(即双字) pxe 网关 ip
0000:8290 8字节(即四字) 最后访问的文件的大小(是执行”cat
–length=0″后的文件大小)
0000:8298 4字节(即双字) 可用的扩展内存大小(以 KB
为单位)
0000:829C 4字节(即双字) 当前根分区号(current root partition)
0000:82A0
4字节(即双字) 当前根所在的驱动器(current root drive)
0000:82A4
4字节(即双字) 解压标志 (gzip非自动解压),非0时不自动解压
0000:82A8
8字节(即四字) 最后访问的分区的起始扇区号
0000:82B0
8字节(即四字) 最后访问的分区的扇区总数
0000:8278 4字节(即双字) GRUB4DOS编译的日期十进制数.
例一,
checkrange 20101230 read
0x8278
可用于判断当前使用的GRUB是否在2010-12-30日或之后(如2011-01-11日)编译的。
例二,
checkrange 0x21 read 0x8280
可用于判断当前是否为 pxe
启动环境。
例三,(by zhaohj)
相关知识:
512*1024=524288=0x80000
1024*1024=0x100000
判断当前物理内存大小:
checkrange 0:0x80000 read 0x8298
… 0-512 MBcheckrange 0x80001:0x100000 read 0x8298 …
512~1024 MBcheckrange 0x100001:-1 read 0x8298 …
1024 MB 以上
例四,
内存变量 0x4cb00 ,可以获取变量值的长度(不依赖WENV)。
如:set a=123456 && set /a
len_a=*0x4cb00
变量 len_a 的值即为 变量 a 的长度(此处值为6)。
例五,
内存变量 0x475 的低位保存的是硬盘数,获取硬盘(包含usb-hdd)数量:
set /a x=*0x475&0xff
x的值即为硬盘数量,如x=1表示一块硬盘,x=2表示二块硬盘
reboot
用法: reboot
描述:
重启系统。
root
用法: root [DEVICE
[HDBIAS]]
描述:
set the current “root device” to the device
DEVICE, then attempt to mount it to get the partition size (for passing the
partition descriptor in ‘ES:ESI’, used by some chain-loaded bootloaders), the
BSD drive-type (for booting BSD kernels using their native boot format), and
correctly determine the PC partition where a BSD sub-partition is located. the
optional HDBIAS parameter is a number to tell a BSD kernel how many BIOS drive
numbers are on controllers before the current one.for example, if there is an
IDE disk and a SCSI disk, and you FreeBSD root partition is on the SCSI disk,
then use a ‘1’ for HDBIAS.
设置根分区。设置根分区为指定设备(DEVICE),然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递,扇区链式启动方式要求这样)。BSD
驱动类型用于启动 BSD 的核心启动, 和确定 BSD 子分区所在的 PC 分区。
可选的磁盘偏移参数, 用于 BSD
核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在 SCSI盘上, 那么磁盘偏移就为1。
例如:
root (hd0,0)/boot/grub
这就指定了当前工作目录是(hd0,0)/boot/grub
因此所有继”/…”之后的文件名将实际提交到(hd0,0)/boot/grub/…
也就是说:
cat /menu.lst
将等同于
cat (hd0,0)/boot/grub/menu.lst
另类用法:
root endpart
切换到当前磁盘最后一个可用分区(注意仅对磁盘有效)
rootnoverify
用法: rootnoverify [DEVICE
[HDBIAS]]
描述:
similar to ‘root’, but don`t
attempt to mount the partition. this is for when an OS is outside of the arer of
the disk that GRUB can read, but setting the correct root device is sitll
desired. note that the items mentioned in ‘root’ which derived from attempting
the mount will NOT work correctly.
类似 ‘root’ 指令, 但不测试安装该分区。这用于有些系统装在 GRUB 能访问的磁盘区之外,
但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。可参见 root 示例。
savedefault
用法: savedefault [–wait=T]
[NUM | ‘fallback’]
描述:
save the current
entry as the default boot entry if no argument is specified. if a number is
specified, this number is saved.if ‘fallback’ is used, next fallback entry is
saved. if T is not 0, prompt the user to confirm the write operation by pressing
the Y key, and if no key-press detected within T seconds, the write will be
discarded.
将当前项设置为默认的引导项。 菜单中使用。如果没有指定参数的话将当前项菜单保存为默认项。
如果选择了这个启动
项,那么下次启动时就用此项作为默认项。在前面设置为 default saved 时有效。
serial
用法: serial [–unit=UNIT] [–port=PORT]
[–speed=SPEED] [–word=WORD] [–parity=PARITY] [–stop=STOP]
[–device=DEV]
描述:
initialize a serial
device.UNIT is a digit that specifies which serial device is used (e.g. 0 ==
COM1). if you need to specify the port number, set it by –port. SPEED is the
DTE-DTE speed. WORD is the word length, PARITY is the type of partity, which is
one of ‘no’, ‘odd’ and ‘even’.STOP is the length of stop bit(s). the option
–device can be used only in the grub shell, which specifies the file name of a
tty device. the default values are COM1, 9660, 8N1.
初始化一个串口设备。
UNIT 用于指定要使用的串口设备 (如,0 == COM1);
PORT 用于指定端口号;
SPEED 用于指定通讯的数率;
WORD 为字长;
PARITY 为奇偶类型(取 ‘no’, ‘odd’ 和 ‘even’ 之一的值。);
STOP 是停止位的长度值;
选项 –device 仅用于命令行模式,用以指定 tty 设备的文件名。
默认值是这样的,COM1, 9600, 8N1。
set
用法: SET [variable=[string]]
描述:
(by zxw@wuyou)
set 命令主要用于显示、设置或删除变量
set设置变量的基本形式:SET [variable=[string]]
variable 指定变量名(最长8个字符)。
string 指定要指派给变量的一系列字符串(最长512个字符)。
1、不带参数的 SET 命令会显示当前变量。
2、要删除某个变量,只需要让=后面为空就可以
set myvar=
#将会删除变量myvar
3、显示已使用的名称的所有变量的值。例如:
set A
#会显示所有以A开头的变量,如果没有任何匹配返回0.
注:1.使用和MSDOS一样的处理方法,一整行的命令会在执行前先进行变量替换。
2.变量名不允许使用非字母或_开头。否则你将无法访问你的变量。
3.长度限制请看前面说明。
4.输入”set *“可以清除所有已设置的变量。
使用set设置变量是批处理中一个重要的部分,一定好好把握。
set设置的变量要用双%括起来引用,如要取消之前变量直接set
变量名=
set 的参数
/a /A 常用以计算赋值,/A 使用16进制数保存变量,/a
使用十进制数保存变量.
注意:目前只支持简单的整型数,只能从左至右进行计算。如果变量是字母或符号则错误。
目前支持的运算符(也可参见 calc 命令 部分):
1.基本运算符:
+ 加法运算符。如 set /a a=3+7 的值为10, set /A a=3+7 的值为0xA
– 减法运算符。如 set /a a=3-5 的值为-2
* 乘法运算符。如 set /a a=3*5 的值为15
/ 取整运算符。如 set /a a=3/5 的值为0, set /a a=7/2 的值为3
% 求余运算符,或模运算符。如 set /a a=7%2 的值为1
2.位运算符,位运算仅限于以二进制位为单位的整数运算。
按位与 运算符 (
& )
(1) 运算规则 运算的两个二进制位值都为 1,结果才为1
(2) 举例
set /a a=3&5的值为1
按位或 运算符 ( | )
(1) 运算规则
运算的两个二进制位值有一个为 1,结果就为1
(2) 举例
set /a a=3|5的值为7
按位异或 运算符 ( ^ )
(1) 运算规则
运算的两个二进制位值不同,结果为 1,否则结果为0
(2) 举例
set /a a=3^5的值为6
按位左移 运算符 ( << )
(1)
运算规则
整体左移,右补 0,左移出的高位丢弃
左移
1位,相当于乘2(高位未移出时)
左移 n位,相当于乘2的n方(高位未移出时)
(2)
举例
set /a a=1<<1的值为2
按位右移 运算符 ( >> )
(1)
运算规则 整体右移,左补 0/1,右移出的低位丢弃右移 1位,
相当于除2(低位未移出时)右移
n位,相当于除2的n方(低位未移出时)
(2) 举例
set /a a=5>>2的值为1
/P 设置与用户的交互输入开关:
set /p var=Please input:
::提示 Please
input,暂停执行等待用户输入
echo %var%
::
“提示”不作变量的值,var的值为用户输入
pause
/l /u 将变量中的字母转换为小写或大写。
如set /l a=Abcd,a的值为abcd.
setkey
用法: setkey [TO_KEY
FROM_KEY]
描述:
change the keyboard map. the
key FROM_KEY is mapped to the key TO_KEY.a key must be an alphabet, a digit, or
one of these:escape, exclam, at, numbersign, dollar, percent, catet, ampersand,
asterisk, parenleft, parenright, minus, underscore, equal, plus, backspace, tab,
bracketleft, braceleft, bracketright, braceright, enter, control, semicolon,
colon, quote, doublequote, backquote, tilde, shift, backslash, bar, comma, less,
period, greater, slash, question, alt, space, capslock, FX (X is a digit), and
delete. if no argument is specified, reset key mapping.
改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键:
escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) ,
caret(^),
ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_),
equal(=),
parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({),
bracketright(]),
braceright(}), enter(回车), control(控制), semicolon(;), colon(:), quote(‘),
doublequote(“),
slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,),
less(<),
period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写),
Fx(功能键)
和 delete(删除)。
setvbe
用法: setvbe
[MODE_3D]
描述:
set the VBE mode MODE_3D(which
is of the form 1024*768*32) for each subsequentkernel command-line. if no
argument is specified, clear(nullify, incalidate) the video option string setup
by the previous setvbe command.
setvbe 是一个新的命令,它可以在系统核心运行前被用来改变视频模式。
例如,你可以执行
setvbe 1024x768x32
这会扫描出其可用模式的列表并设置它,并且自动在随后的每个kernel命令行中增加一个选项’video=‘。
增加的选项’video=’类似于:
video=1024x768x32@0xf0000000,4096
这里的0xf0000000是vbe报告的视频模式的帧缓存地址,而4096是扫描线的字节大小。
如果你想在你的操作系统上获得一些图形支持,但是除了只写一个像素点到视频内存而外,你却不想使用任何视频功能,这确实有用。
shift
用法: shift
描述:
批处理专用。语法和MS-DOS几乎相同。
注意:grub4dos中可以使用 %1~%9 参数,但 %9 参数与 MS-DOS 中参数有区别, grub4dos中 %9 指剩下的所有参数。
转帖教程:
一些初学者朋友对于shift命令感到非常的困惑,抱怨网上的一些shift命令教程很难理解。
为了解决这个问题,于是我就写了一下这个”超生游击队”教程以供初学者朋友参考。
言归正传,比如我老爸有10个儿子,我英雄是第10个。
第一步:
我们现在用一个另类的办法输出10个儿子的名字,将如下代码保存为hero.bat。
@echo off
echo %1
echo %2
echo %3
echo %4
echo
%5
echo %6
echo %7
echo %8
echo %9
echo
%10
pause
如何运行呢?我们可以另写一个bat,内容是:call hero.bat 老大 老二 老三 ……
英雄
也就是调用hero.bat并共带10个参数!
能正确运行吗?不能,很遗憾,因为根本没有%10。
注:在grub4dos中执行本示例批处理时会成功执行,显示10个人名。
因grub4dos中 %9 代表剩余的所有参数,本例用来帮助大家理解 shift
命令,勿怪。
第二步:
在上一步中没有输出我英雄的大名,那难道我英雄就不是我老爸的儿子吗!我得想个办法把我的名字也输出来。
好了,借助shift命令就可以达到。我们把hero.bat中的代码改一下。
@echo off
echo %1
echo %2
echo %3
echo %4
echo
%5
echo %6
echo %7
echo %8
echo %9
shift
echo
%9
pause
终于我的大名输出了。可是英雄明明是第10个参数呀,怎么现在变成第9个了?这个就是shift的功能。
也就是,执行shift命令以后,原来的%9变成了%8,原来的%8变成了%7,原来的%7变成了%6……
而原来的%1变成了%0,此时原来的%0没了。
也就是说后面的参数依次冲掉了前面的参数,而为了输出我的名字,最终牺牲了%0。
第三步:
我老爸又认了4个干儿子,名字分别为a,b,c,d,到此,我老爸有多了4个干儿子。共14个儿子。
在调用hero.bat时又多了4个参数,则运行hero.bat时有:call hero.bat 老大 老二 老三
…… 英雄 a b c d
(注意:要把省略号换成名字。)
此时,hero.bat的代码如下:(最容易理解的方法)
@echo off
echo %1
echo %2
echo %3
echo %4
echo
%5
echo %6
echo %7
echo %8
echo %9
shift
echo
%9
::现在的%9是英雄shift
echo %9
::现在的%9是ashift
echo %9
::现在的%9是bshift
echo %9
::现在的%9是cshift
echo %9
::现在的%9是dpause
splashimage
用法: splashimage
FILE
描述:
load FILE as the background image when in graphics
mode.
图形模式下载入背景图片文件。需使用使用640×480分辨率的 xpm 图片。
0.4.5版grub4dos增加800×600分辨率支持,默认640×480分辨率。
使用800×600分辨率图片需提前使用 graphicsmode 命令更改分辨率。
xpm 图片制作可见 http://bbs.wuyou.com/viewthread.php?tid=183783 by 古豆
terminal
用法: terminal [–dumb] [–no-echo]
[–no-edit] [–timeout=SECS] [–lines=LINES] [–silent] [console] [serial]
[hercules] [graphics]
描述:
select a terminal.
when multiple terminals are specified, wait until you push any key to continue.
if both console and serial are specified, the terminal to which you input a key
first will be selected. if no argument is specified, print current setting. the
option –dumb specifies that your terminal is dumb, otherwise,
vt100-compatibility is assumed. if you specify –no-echo, input characters won`t
be echoed. if you specify –no-edit, the BASH-like editing feature will be
disabled. if –timeout is present, this command will wait at most for SECS
seconds. the option –lines specifies the maximum number of lines. the option
–silent is used to suppress messages.
terminal 命令用以确定终端模式。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了,
那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 常用参数是console 和 graphcis ,以及
serial 。
terminal console 将使终端显示模式改变为默认的控制台模式,即默认的文本模式。
如果需要返回图形模式,可以使用terminal graphics 。
参数 –dumb 用以指定一个哑终端, 否则即为 vt100 兼容型;
若使用了 –no-echo 参数, 屏幕上将不会回显输入的字符;
若使用了 –no-edit 参数, the BASH-like 的编辑功能将被禁用;
若使用了 –timeout 参数, 该命令将等待数秒钟(由SECS指定);
可使用 –lines 指定最大的行数;
可使用 –silent 选项关闭消息显示。
terminfo
用法: terminfo [–name=NAME
–cursor-address=SEQ [–clear-screen=SEQ] [–enter-standout-mode=SEQ]
[–exit-standout-mode=SEQ]]
描述:
define the
capabilities of your terminal. use this command to define escape sequences, if
it is not vt100-compatible. you may use \e for ESC and ^X for a control
character. if no option is specified, the current setting are printed.
指定终端的功能。如果此终端为 vt100 兼容型的,则可指定换码顺序 (即使用 \e 代表 ESC, ^X 代表控制码);
在未给任何参数的情况下,将给出当前配置信息。
testvbe
用法: testvbe
MODE
描述:
test the VBE mode MODE. hit any key to return.
测试所指定(MODE)的 VBE 模式。
timeout
用法: timeout
SEC
描述:
设置在自动启动缺省菜单前所等待的秒数。超时后,将启动默认菜单项。菜单头部使用,不能用于菜单项中。
title
用法: title [NAME
…]
描述:
命名菜单项。即加载菜单后菜单项的显示名(菜单标题)。在文本模式(非gfxmenu等图形模式)的菜单显示模式下
可以在显示名后使用 \n 添加该项菜单的注释信息(多余一行的注释信息可以使用 \n\r
来换行输出)。
例:
title xp \n start xp \n\rfind and start /ntldr
#菜单加载后,该项菜单标题为 xp ,
#光标选中该项菜单时,屏幕底部的注释信息第一行显示为 start xp , 第二行显示为 find and start /ntldr。
注意:若想使用中文注释信息需提前加载中文支持。
tpm
用法: tpm
–init
描述:
initialise TPM.
“tpm –init”在地址0000:7c00处使用512字节数据作为初始化TPM(可信赖平台模块)的缓存。
在你引导 VISTA 的 BOOTMGR 前,你可能需要在一些机器上使用”tpm –init”。
通常你应该在一条 CHAINLOADR 命令后执行”tpm –init”指令。
unhide
用法: unhide
PARTITION
描述:
unhide PARTITION by clearing the “hidden” bit in
its partition type code.
the default partition is the current root device.
通过清除隐藏标志,解除指定分区(PARTITION)的隐藏。与 hiddenflag 命令类似,
但 unhide 命令只能用来显现分区,可以省略 PARTITION 参数,此时认为 PARTITION 是当前的 root 设备。
例:
unhide (hd0,0)
#显现第一硬盘第一主分区
uuid
用法: uuid [DEVICE]
[UUID]
描述:
if DEVICE is not specified,
search for filesystem with UUID in all partitions and set the partition
containing the filesystem as new root(if UUID is specified), or just list uuid`s
of all filesystems on all devices(if UUID is not specified). if DEVICE is
specified, return ture or false according to whether or not the DEVICE matches
the specified UUID(if UUID is specified), or just list the UUID of DEVICE(if
UUID is specified).
确认分区的新命令
1、如果 DEVICE 选项未被指定,将在所有分区中搜索指定的 uuid 号的文件系统,
然后把包含这个文件系统的分区设置为新的根 (如果 UUID 被指定时),
或者只列举所有设备上的文件系统的 uuid 号(如果 UUID 未被指定时)。
2、如果 DEVICE 选项被指定了,将返回 真 或 假 ,对应于指定的设备是否与指定的
uuid 号相符(如果UUID被指定时),
或者仅仅列举指定设备的uuid 号(UUID 未被指定时)。
示例 1:
find –set-root uuid ()
7f95820f-5e33-4e6c-8f50-0760bf06d79c
#这将查找 uuid 等于
7f95820f-5e33-4e6c-8f50-0760bf06d79c的分区,然后将这个找到的分区设置为根。
示例 2:
uuid
7f95820f-5e33-4e6c-8f50-0760bf06d79c
#这条命令将取得和示例1同样的效果
示例 3:
uuid ()
这将显示当前根设备的 uuid 号。
vbeprobe
用法: vbeprobe
[MODE]
描述:
probe VBE information. if the mode number MODD is
specified, show only the information about only the mode.
侦测 VBE 的信息。如果指定了一个模式(MODE 不为空),则仅显示其信息。
write
用法: write [–offset=SKIP] ADDR_OR_FILE
INTEGER_OR_STRING
描述:
write a 32-bit value to memory or write a
string to file(or device!).
使用 ‘write’ 命令将字符串写入设备或文件中
write [–offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING
SKIP 是一个整数,默认值是 0 。
如果 ADDR_OR_FILE 选项被指定为一个整数,那么它被作为一个内存地址对待,
并且 INTEGER_OR_STRING 选项也必须是一个整数值。整数
INTEGER_OR_STRING 将被写入
(ADDR_OR_FILE 加上 SKIP 值)的地址处。
如果 ADDR_OR_FILE选项 指定的是一个设备或一个文件,那么INTEGER_OR_STRING 选
项将被作为一个字符串对待,它将被写入跳过 SKIP 个字节(字节计数)的指定的设备或文件当中。
注:1、字符串不需要被引用,也就是说,不需要单引号(‘) 也不用 双引号(“) 来引用它。
2、空格符不需要使用反斜杠(\)引用。但如果字符串以空格开头,开头的这个空格符还是需要反斜杠引用。
3、单引号(‘)和双引号(“)不用特别说明并且可以直接使用到字符串中。
4、下面是一些 C 语言风格的引用序列说明:
\NNN (1到3位)八进制值 NNN 表示的字符
\\
反斜杠
\a 警报 (声音)
\b
退格符
\f 换页符
\n 换行符
\r
回车符
\t 水平制表符
\v
垂直制表符
\xHH (1到2位)十六进制值为 HH 的字节
注意:1、就像 dd 命令一样,write 命令既不扩大也不缩小目标文件的文件大小,字符串的剩余部分将被丢弃。
目标文件也不能是一个压缩过的文件。
2、还是和 dd 类似,write 命令也具有危险性,使用风险你自己承担。作为一种安全方面的考虑,
你应当只向内存中的文件写入。
3、某些情况下当写入 NTFS 中的文件时,write命令可能失败。
4、0.4.5版grub4dos不再限制在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
!!!!
Caution! The file to write can be a device name which
stands !!!!
!!!! for all the sectors on the device. Take utmost
care! !!!!
!!!!__________________________________________________
!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
警告!被write
命令写入的文件可以是一个设备名,即它代表了设备上的所有扇区。慎之又慎!