日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Grub4Dos 學(xué)習(xí)筆記

 Hongrongqi 2015-05-05
 本帖最后由 stevenldj 于 2013-12-29 12:22 編輯

一樓、學(xué)習(xí)筆記:

[注:以后如果內(nèi)容有改動(dòng),會(huì)用彩色文本標(biāo)注,以便查閱,如果是改錯(cuò)字或改筆誤,則仍使用黑色文本]

==============================

學(xué)習(xí) Grub4Dos(最好在虛擬機(jī)中進(jìn)行練習(xí),以免損壞電腦中的系統(tǒng)和文件)

==============================

下載 Grub4Dos:

http://code.google.com/p/grub4dos-chenall/downloads/list

==============================

版本 0.4.5c 和 0.4.6a 的區(qū)別:

0.4.5c 是穩(wěn)定版。0.4.6a 處于 alpha 測(cè)試階段。但是,這個(gè)系列有新功能,比如,支持微軟的 exFAT 文件系統(tǒng)。0.4.6 最大的改動(dòng)是啟動(dòng)代碼,比如,grldr.mbr,bootlace.com 之類的。

差別主要在啟動(dòng)代碼,即自舉 grldr 。
0.4.6a 可以從 exFAT 文件系統(tǒng)啟動(dòng)(原內(nèi)核已支持exFAT 文件系統(tǒng));
0.4.6a 可以從 ext4 文件系統(tǒng)啟動(dòng);
0.4.6a 可以在啟動(dòng)之初(加載 grldr 之前)加載 usb2.0 驅(qū)動(dòng),使被 BIOS 識(shí)別為軟盤(pán)的 u 盤(pán)支持 LBA  讀寫(xiě);
0.4.6a 可以支持 udf 格式的光盤(pán),可以支持 iso9600 擴(kuò)展的 Joliet 格式,并啟動(dòng)之(修改了內(nèi)核,正在優(yōu)化中,近期發(fā)布)。

因?yàn)?Grub4Dos 還在不斷的完善,所以上面的信息也不一定完全準(zhǔn)確。

要穩(wěn)定就用 0.4.5c,要支持更多的磁盤(pán)格式就用 0.4.6a。

==============================

進(jìn)入 Grub4Dos 的方法:

1、將下載的 grub4dos 壓縮包解壓

2、創(chuàng)建執(zhí)行環(huán)境:

方法一:用 FbinstTool 創(chuàng)建一個(gè) fba 文件,然后將解壓后的文件拖拽到 fba 的根目錄中,啟動(dòng) Qemu 虛擬機(jī),進(jìn)入 Grub4Dos 環(huán)境(你要會(huì)用 FbinstTool)。

方法二:在純 DOS 下運(yùn)行解壓后的 grub.exe,進(jìn)入 Grub4Dos 環(huán)境(你要會(huì)用純 DOS)。

方法三:將解壓后的文件復(fù)制到 C 盤(pán)根目錄,然后在 ntldr 的配置文件 boot.ini 中添加 C:\grldr="進(jìn)入 GRUB4DOS",重啟系統(tǒng),選擇 "進(jìn)入 GRUB4DOS" 菜單項(xiàng),進(jìn)入 Grub4Dos 環(huán)境(你要有 ntldr 引導(dǎo)的分區(qū),或者 WinXP 系統(tǒng))。

方法四:將解壓后的文件復(fù)制到 U 盤(pán)或硬盤(pán)任意分區(qū)的根目錄中,然后用 BootICE 修改 U 盤(pán)或硬盤(pán)的主引導(dǎo)記錄為 Grub4Dos,從 U 盤(pán)或硬盤(pán)啟動(dòng),進(jìn)入 Grub4Dos 環(huán)境(你要會(huì)用 BootICE)。

方法五:其它 ...

==============================

學(xué)習(xí)方法(一共83個(gè)命令):

在啟動(dòng) Grub4Dos 的過(guò)程中不停的按 c 鍵,進(jìn)入 Grub4Dos 的命令行模式,通過(guò)手動(dòng)輸入命令來(lái)學(xué)習(xí) Grub4Dos。

學(xué)習(xí)過(guò)程中參考 Grub4Dos 0.4.5c 的幫助文檔:
http://bbs./forum.php?m ... &extra=page%3D1

Grub4Dos 命令要區(qū)分大小寫(xiě),路徑不區(qū)分大小寫(xiě)。

Tab 鍵可以實(shí)現(xiàn)命令或文件名補(bǔ)全

在終端中一條一條的輸入下面的命令進(jìn)行學(xué)習(xí)

==========================================================================================

先學(xué)習(xí)這些命令(16個(gè)):

ls、find、root、rootnoverify、map、cdrom、cat、cmp、dd、write、read、calc、checktime、echo、pager、clear

==============================

ls
類似 Linux 中的 ls 命令,類似 Dos 下的 dir 命令,列出當(dāng)前目錄(工作目錄)下的文件和目錄

ls /boot
列出當(dāng)前目錄(工作目錄)下名稱以 boot 開(kāi)頭的文件和目錄,不要用 ls boot,它只在根目錄下有效。

ls /boot/
列出當(dāng)前目錄下 boot 目錄中的文件和目錄,不要用 ls boot/,它只在根目錄下有效。

ls (hd0,0)/
列出 (hd0,0) 中的文件和目錄,不要用 ls (hd0,0),它只在 (hd0,0) 為當(dāng)前磁盤(pán)時(shí)有效。

ls dev
列出所有驅(qū)動(dòng)器列表(驅(qū)動(dòng)器不包括分區(qū))

ls /boot/ > nul && echo exist
判斷目錄 /boot/ 是否存在,如果存在,則輸出 exist(這個(gè)方法對(duì)空目錄無(wú)效)

ls /boot > nul && echo exist ! echo not exist
判斷當(dāng)前目錄(工作目錄)中是否存在文件名以 boot 開(kāi)頭的文件或目錄,如果存在,則輸出 exist,否則輸出 not exist

ls (hd0,0)/boot/ > nul && echo exist ! echo not exist
判斷目錄 (hd0,0)/boot/ 是否存在,如果存在,則輸出 exist,否則輸出 not exist

[注意:若文件夾下無(wú)任何文件,對(duì) ls 命令而言,認(rèn)為該文件夾不存在。]

[注意:由于 (ud) 中不存在目錄,所謂的目錄只是帶 / 的文件名所產(chǎn)生的假象,所以 ls (ud)/ 時(shí),會(huì)列出 (ud) 中的所有文件,但是 ls (ud)/boot/ 卻可以列出 /boot/ 下的所有文件,因?yàn)檫@些文件的文件名都是以 /boot/ 開(kāi)頭]

==============================

debug on
find
列出所有磁盤(pán)(磁盤(pán)包括分區(qū))(debug off 靜默模式下無(wú)法顯示磁盤(pán)列表)

debug on
find +1
列出文件系統(tǒng)已知的所有磁盤(pán)(debug off 靜默模式下無(wú)法顯示磁盤(pán)列表)

debug on
find checkrange 0x07 parttype
列出分區(qū)類型為 0x07(NTFS)的所有分區(qū)(debug off 靜默模式下無(wú)法顯示磁盤(pán)列表)

find /ntldr checkrange 0x07 parttype
在分區(qū)類型為 0x07(NTFS)的分區(qū)中查找 /ntldr 文件,并列出找到的分區(qū)。

find --set-root /ntldr
查找包含 /ntldr 文件的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。

find --set-root --ignore-floppies --ignore-cd /ntldr
查找包含 /ntldr 文件的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。忽略軟盤(pán)和光盤(pán)。

find --set-root --devices=upnhcf /ntldr
查找包含 /ntldr 文件的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。指定查找順序:ud,pxe,網(wǎng)絡(luò)設(shè)備,硬盤(pán),光盤(pán),軟盤(pán)

find --set-root --devices=upnh /ntldr
查找包含 /ntldr 文件的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。指定查找順序,并忽略軟盤(pán)和光盤(pán)。

find --set-root ls /grub/
查找包含 /grub/ 目錄的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。/grub/ 目錄不能為空,否則會(huì)忽略該目錄。

debug on
find --set-root makeactive --status
查找活動(dòng)主分區(qū),把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備。(debug off 靜默模式下無(wú)法顯示磁盤(pán)列表)

find --set-root=/boot/grub /boot/grub/menu.lst
查找包含 /boot/grub/menu.lst  的設(shè)備,把第一個(gè)找到的設(shè)備設(shè)為當(dāng)前設(shè)備,并將工作目錄設(shè)置為 /boot/grub

[注意:查找的時(shí)候會(huì)優(yōu)先查找當(dāng)前設(shè)備(如果在列表中的話),不再查找 (hdx) 設(shè)備,仍會(huì)查找 (hdx,y) 設(shè)備]

[題外話:如果 find 支持 find /FILE 和 find /DIR/ 就好了,這樣可以實(shí)現(xiàn)更精確的查找。]

==============================

root
顯示當(dāng)前設(shè)備名稱及其相關(guān)信息。

root (hd0,0)
將 (hd0,0) 作為當(dāng)前磁盤(pán),工作目錄為 /,效果和 root (hd0,0)/ 一樣。

root (hd-1,0)
將 (hd-1,0) 作為當(dāng)前磁盤(pán),工作目錄為 /,效果和 root (hd-1,0)/ 一樣

root (hd0,0)/boot
將 (hd0,0) 作為當(dāng)前磁盤(pán),工作目錄為 /BOOT,效果和 root (hd0,0)/boot/ 一樣。

root ()/boot
修改工作目錄為當(dāng)前磁盤(pán)下的 /BOOT 目錄,效果和 root ()/boot/ 一樣。

root (hd0,0) > nul && echo ok ! echo fail
root (hd0,0) > nul || echo fail ! echo ok
將 (hd0,0) 設(shè)置為當(dāng)前設(shè)備,如果成功,則輸出 ok,如果不成功,則輸出 fail。(上面兩條命令效果相同)

==============================

rootnoverify (hd0,0)
相當(dāng)于 root (hd0,0),但不測(cè)試安裝該分區(qū)。這用于有些系統(tǒng)裝在 GRUB 能訪問(wèn)的磁盤(pán)區(qū)之外, 但仍需要設(shè)置正確的根分區(qū)的情況。有些需要安裝分區(qū)才能確定的參數(shù)可能會(huì)有問(wèn)題。

下面的命令可以正確執(zhí)行,但是換成 root 就不行了:

rootnoverify (hd0)
chainloader +1
boot

[題外話:這個(gè)命令如果改成 root --nv (hd0) 或許更簡(jiǎn)單一些,輸入字符也少一些]

==============================

設(shè)備類型:

(fd0)       第一個(gè)軟盤(pán)
(fd1)       第二個(gè)軟盤(pán)

(hd0)       第一個(gè)硬盤(pán)
(hd1)       第二個(gè)硬盤(pán)
(hd-1)      最后一個(gè)硬盤(pán)
(hd)        最后一個(gè)硬盤(pán)之后的硬盤(pán)號(hào)碼,創(chuàng)建新的虛擬硬盤(pán)時(shí)使用

(cd0)       第一個(gè)光驅(qū),相當(dāng)于 (hd32),由 cdrom --init 創(chuàng)建
(cd1)       第二個(gè)光驅(qū),相當(dāng)于 (hd33),由 cdrom --init 創(chuàng)建
由于 cdrom 的識(shí)別能力太低,同時(shí)市場(chǎng)上的光驅(qū)設(shè)備幾乎全被U盤(pán)代替,所以 (cd?) 這種格式可能面臨淘汰。

(hd0,0)     第一塊硬盤(pán)的第一主分區(qū)
(hd0,4)     第一塊硬盤(pán)的第一擴(kuò)展分區(qū)
(hd-1,0)    最后一塊硬盤(pán)的第一主分區(qū),沒(méi)有 (hd-2,0) 這種格式,也沒(méi)有 (hd-1,-1) 這種格式。

(hd#,0)     第一主分區(qū)(在硬盤(pán)#上)
(hd#,1)     第二主分區(qū)(在硬盤(pán)#上)
(hd#,2)     第三主分區(qū)(在硬盤(pán)#上)
(hd#,3)     第四主分區(qū)(在硬盤(pán)#上)

(hd#,4)     第一邏輯分區(qū)(在硬盤(pán)#上)
(hd#,5)     第二邏輯分區(qū)(在硬盤(pán)#上)
(hd#,6)     第三邏輯分區(qū)(在硬盤(pán)#上)
(hd#,7)     第四邏輯分區(qū)(在硬盤(pán)#上)

(hd32)      第一個(gè)光驅(qū)
(hd33)      第二個(gè)光驅(qū)
(0xFF)      最后一個(gè)光驅(qū)(hd127)

()          當(dāng)前磁盤(pán)
(bd)        初始啟動(dòng)設(shè)備(設(shè)備包括磁盤(pán)和驅(qū)動(dòng)器)
(cd)        從光盤(pán)啟動(dòng)后,Grub4Dos 捕獲到的啟動(dòng)光盤(pán),如果不是從光盤(pán)啟動(dòng),則沒(méi)有 (cd) 設(shè)備
(ud)        Fbinst 啟動(dòng)方式制作的隱藏分區(qū)
(pd)        PXE 網(wǎng)絡(luò)啟動(dòng)設(shè)備
(nd)        網(wǎng)絡(luò)驅(qū)動(dòng)器,現(xiàn)已不常用(nd 已經(jīng)不存在了,已經(jīng)被pd代替)
(md)        內(nèi)存驅(qū)動(dòng)器,實(shí)現(xiàn)了將整個(gè)內(nèi)存作為一個(gè)磁盤(pán)驅(qū)動(dòng)器來(lái)訪問(wèn)
(rd)        隨機(jī)存貯驅(qū)動(dòng)器。(md) 設(shè)備訪問(wèn)內(nèi)存是從物理地址 0 開(kāi)始,而 (rd) 可以訪問(wèn)起始于任何基地址的內(nèi)存

以數(shù)字命名的設(shè)備:
fd0 - fd126    :     0x0 - 0x7E  (軟盤(pán)和虛擬軟盤(pán),排除 0x21 和 0x23)
pxe            :     0x21        (網(wǎng)絡(luò)啟動(dòng)設(shè)備)
ud             :     0x23        (Fbinst 隱藏分區(qū))
rd             :     0x7F        (隨機(jī)存貯驅(qū)動(dòng)器)
hd0 - hd30     :     0x80 - 0x9E (硬盤(pán)和虛擬硬盤(pán))
cd             :     0x9F        (捕獲到的啟動(dòng)光盤(pán),這個(gè)不一定正確,視 bios 而定)
hd32 - hd127   :     0xA0 - 0xFF (光盤(pán)和虛擬光盤(pán))

設(shè)備后面跟隨 +1 表示將設(shè)備的第 1 個(gè)扇區(qū)當(dāng)作一個(gè)單一的文件看待:

(hd0)+1     將整個(gè)硬盤(pán)的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(hd0,0)+1   將整個(gè)分區(qū)的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(fd0)+1     將整個(gè)軟盤(pán)的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(cd0)+1     將整個(gè)光盤(pán)的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(md)+1      將整個(gè)內(nèi)存的第一個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1 個(gè)扇區(qū))
(rd)+1      這個(gè)比較特殊,將指定內(nèi)存的所有內(nèi)容當(dāng)作一個(gè)文件

[注意:(rd)+1 這個(gè)標(biāo)志始終代表文件,它包含存儲(chǔ)在 (rd) 中的所有字節(jié)。 ]

同樣可以使用 +2、+3 等,表示將前 2 個(gè)或前 3 個(gè)扇區(qū)當(dāng)作單一的文件看待:

(hd0)+2     將整個(gè)硬盤(pán)的前 2  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2  個(gè)扇區(qū))
(hd0,0)+3   將整個(gè)分區(qū)的前 3  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 3  個(gè)扇區(qū))
(fd0)+5     將整個(gè)軟盤(pán)的前 5  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 5  個(gè)扇區(qū))
(cd0)+10    將整個(gè)光盤(pán)的前 10 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 10 個(gè)扇區(qū))
(md)+32     將整個(gè)內(nèi)存的前 32 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 32 個(gè)扇區(qū))
(rd)+2      將指定內(nèi)存的前 2  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2  個(gè)扇區(qū))

也可以使用類似 32+5 的方法:

(hd0)512+2  將整個(gè)硬盤(pán)的第 512 個(gè)扇區(qū)之后的 2  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 2 個(gè)扇區(qū))
(hd0,0)32+3 將整個(gè)分區(qū)的第 32  個(gè)扇區(qū)之后的 3  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 3 個(gè)扇區(qū))
(fd0)1+1    將整個(gè)軟盤(pán)的第 2   個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1  個(gè)扇區(qū))
(cd0)128+1  將整個(gè)光盤(pán)的第 129 個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 1  個(gè)扇區(qū))
(md)0+32    將整個(gè)內(nèi)存的前 32  個(gè)扇區(qū)當(dāng)作一個(gè)文件(共 32 個(gè)扇區(qū))
(rd)0+1     等效于 (rd)+1,將指定內(nèi)存的所有內(nèi)容當(dāng)作一個(gè)文件

關(guān)于 (rd) 設(shè)備:

(rd) 設(shè)備只是對(duì)內(nèi)存區(qū)域的引用,(rd) 設(shè)備所引用的內(nèi)存區(qū)域是不被保護(hù)的,你可以將 (rd) 理解為指向內(nèi)存塊的指針。在 Grub4Dos 中,很多東西都是自由的、無(wú)保護(hù)的、沒(méi)有限制的,(rd) 就是其中之一。

(rd) 不是一個(gè) int13 設(shè)備,而僅僅是一個(gè) grub4dos 設(shè)備。在 grub4dos 里面,存在 (rd) 設(shè)備,但進(jìn)入 DOS 以后,就沒(méi)有 (rd) 設(shè)備了。

(rd)+1 始終表示 (rd) 設(shè)備的整個(gè)內(nèi)容,而不是第一個(gè)扇區(qū)。

通過(guò)下面的地址可以獲取 (rd) 設(shè)備的信息:
set /a rdnum=*0x82CC    # (rd) 設(shè)備的設(shè)備號(hào)
set /a rdbase=*0x82D0   # (rd) 設(shè)備的起始地址
set /a rdsize=*0x82D8   # (rd) 設(shè)備的總長(zhǎng)度

通過(guò)下面的方法可以自由設(shè)置 (rd) 設(shè)備的信息:
map --ram-drive=0xFF7F      # 修改 (rd) 設(shè)備的設(shè)備號(hào)
map --mem --rd-base=50000   # 設(shè)置 (rd) 設(shè)備的起始地址
map --mem --rd-size=30000   # 設(shè)置 (rd) 設(shè)備的總長(zhǎng)度

下面的命令僅僅修改了 (rd) 設(shè)備的信息:
map --mem /FILE (rd)
這里的 (rd) 指向了一塊內(nèi)存區(qū)域,這塊內(nèi)存區(qū)域中存放了 /FILE 文件的內(nèi)容,但是這塊內(nèi)存是不被保護(hù)的,這塊內(nèi)存隨時(shí)都可能被其他代碼修改,甚至被 Grub4Dos 自身修改。

下面的命令也修改了 (rd) 設(shè)備的信息,但是 (rd) 指向的內(nèi)存區(qū)域是受保護(hù)的,因?yàn)樗?(fd0) 重疊,而 (fd0) 是受保護(hù)的:
map --mem /FILE (rd)
map --mem /FILE (fd0)
map --hook
如果第一條命令和第二條命令交換一下順序,那么結(jié)果就不一樣了。

什么情況下需要使用 (rd) 設(shè)備?當(dāng)你需要它的時(shí)候就去用它,如果你實(shí)在不知道什么時(shí)候需要用到 (rd),那么很簡(jiǎn)單,不要用它。

==============================

map --status
顯示磁盤(pán)仿真的狀態(tài)。

map /PE.ISO (0xFF)
map --hook
將 /PE.ISO 映射到 (hd127) 仿真磁盤(pán),/PE.ISO 必須在磁盤(pán)中連續(xù)存放,不能有碎片。

map --mem /PE.ISO (0xFF)
map --hook
先將 /PE.ISO 加載到內(nèi)存,然后再映射到 (hd127) 仿真磁盤(pán),/PE.ISO 可以有碎片。

map --mem=-2880 /FLOPPY.IMG (fd0)
map --hook
先將 /FLOPPY.IMG 加載到內(nèi)存,然后再映射到 (fd0) 仿真軟盤(pán),(fd0) 將占用至少 1440KB 的內(nèi)存。

map --mem --top /PE.ISO (0xFF)
map --hook
將 /PE.ISO 加載到高端內(nèi)存,然后再映射到 (hd127) 仿真磁盤(pán),把鏡像加載到高位內(nèi)存就不能使用 gzip 壓縮,兩者不能同時(shí)實(shí)現(xiàn)。
在 grub4dos 中,內(nèi)存在 3.25G 處被分成了高端內(nèi)存和低端內(nèi)存兩端,鏡像不能跨 3.25G 這個(gè)點(diǎn)。如果你的內(nèi)存小于 3.25G,你就沒(méi)有高端內(nèi)存可用。

map --unmap=0xFF
map --rehook
卸載 (hd127) 仿真磁盤(pán)。不能使用 --unmap=(0xFF) 的方法卸載,--unmap= 后面必須是數(shù)字。
--rehook 用于停止仿真盤(pán)并釋放內(nèi)存,相當(dāng)于 --unhook 然后 --hook(這樣看來(lái),map --unhook 命令似乎不會(huì)被單獨(dú)使用了)

map --unmap=0,0x80,0xFF
map --rehook
卸載多個(gè)仿真磁盤(pán)。

map --unmap=0:0xFF
map --rehook
卸載所有仿真磁盤(pán)。

如果要通過(guò)設(shè)備名的方法卸載某個(gè)設(shè)備,可以這樣做:
map (hd127) (hd127)
map --rehook

map --read-only /FLOPPY.IMG (fd0)
map --hook
(fd0) 只能讀,不能寫(xiě),防止 /FLOPPY.IMG 文件被破壞。
映射到仿真盤(pán)中的文件都是可以修改的,無(wú)論是 IMG、ISO、VHD 等,除非使用 --read-only 參數(shù)。

map --fake-write /FLOPPY.IMG (fd0)
map --hook
(fd0) 處于假寫(xiě)狀態(tài),可以寫(xiě)入數(shù)據(jù),但并未記錄到 (fd0) 上,防止 /FLOPPY.IMG 文件被破壞。

map --unsafe-boot /FLOPPY.IMG (fd0)
map --hook
這個(gè)參數(shù)不知道是什么作用,大概是允許修改 (fd0) 的引導(dǎo)扇區(qū)。

map ---disable-chs-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 CHS 訪問(wèn)功能。

map --disable-lba-mode /FLOPPY.IMG (fd0)
map --hook
禁用 (fd0) 的 LBA 訪問(wèn)功能。

map 命令還可以用來(lái)修改 (rd) 隨機(jī)存儲(chǔ)器的信息,上面已經(jīng)說(shuō)過(guò)了。

[注:其他 map 參數(shù)似乎不怎么常用,也不太理解其含義,這里就不總結(jié)了]

[注意:在map命令行中,(hdm,n)+1 式的寫(xiě)法被解釋成代表整個(gè)(hdm,n)分區(qū),而不僅僅是此分區(qū)的第一扇區(qū)。]

[注意:--unhook 的仿真盤(pán),如果沒(méi)有 --unmap,則在需要的時(shí)候會(huì)自動(dòng) --hook。]

==============================

關(guān)于 map 命令的磁盤(pán)交換:

# 打算把當(dāng)前設(shè)備映射為(hd0)
map () (hd0)
# 打算把(hd0)映射為當(dāng)前設(shè)備
map (hd0) ()
#開(kāi)始執(zhí)行映射
map --rehook


==============================

cdrom --init
map --hook
掛載 ATAPI 接口的光驅(qū)(map --hook 后才能訪問(wèn))

cdrom --stop
map --rehook
卸載 ATAPI 接口的光驅(qū)

==============================

cat /menu.lst
顯示 /menu.lst 的內(nèi)容

cat --hex /grldr
以十六進(jìn)制顯示 /grldr 的內(nèi)容

cat --skip=1024 /menu.lst
顯示 /menu.lst 的內(nèi)容,跳過(guò)前面 1KB 的內(nèi)容

cat --length=10 /menu.lst
顯示 /menu.lst 的內(nèi)容,只顯示前面 10 個(gè)字節(jié)的內(nèi)容

cat --locate="\x20 " /menu.lst
在 /menu.lst 中查找連續(xù)的兩個(gè)空格(轉(zhuǎn)義字符 + 非轉(zhuǎn)義字符)(區(qū)分大小寫(xiě))

cat --locate=abc /menu.lst
在 /menu.lst 中查找 abc 字符串(非轉(zhuǎn)義字符)(區(qū)分大小寫(xiě))

cat --locatei=abc /menu.lst
在 /menu.lst 中查找 abc 字符串(不區(qū)分大小寫(xiě))

cat --locate=abc --number=3 /menu.lst
在 /menu.lst 中查找 abc 字符串,只顯示前 3 個(gè)找到的結(jié)果

cat --locate=abc --replace=def /menu.lst
在 /menu.lst 中查找 abc 字符串,并替換為 def

cat --locate=abc --replace=def --number=3 /menu.lst
在 /menu.lst 中查找 abc 字符串,并替換為 def,只替換前 3 個(gè)找到的結(jié)果

cat --locate=abc --replace=def --locate-align=16 /menu.lst
在 /menu.lst 中查找 abc 字符串,并替換為 def,只替換位置與 16 對(duì)齊的結(jié)果

通過(guò)下面的命令來(lái)查看 --locate-align=16 的效果:
echo -n > /menu.lst
cat --locate=\x0 --replace=1 /menu.lst
cat /menu.lst
cat --locate=1 --replace=0 --locate-align=16 /menu.lst
cat /menu.lst

cat --length=0 ()-1
固定用法,獲取當(dāng)前分區(qū)地址偏移

cat --length=0 ()/menu.lst
獲取 /menu.lst 的文件大小

cat --length=0 ()/menu.lst > nul && echo exist ! echo not exist
判斷文件 /menu.lst 是否存在,如果存在,則輸出 exist,否則輸出 not exist

轉(zhuǎn)義字符總結(jié):
\???    1到3位八進(jìn)制代碼表示的字符(\377)八進(jìn)制最大取值 \377,超出 377 的代碼將與 377 取模后再進(jìn)行轉(zhuǎn)換,比如 \400 表示 \0
\x??    1到2位十六進(jìn)制代碼表示的字符(\xFF)最大取值 \xFF
\空格   空格字符
\\      \ 字符(反斜線)
\"      " 字符(雙引號(hào))
\'      ' 字符(單引號(hào))
\a      警報(bào) (聲音)
\b      退格符
\f      換頁(yè)符
\n      換行符
\r      回車符
\t      水平制表符
\v      垂直制表符

[注意:執(zhí)行 cat --locate= 或 cat --locatei= 后,可以用 %?% 獲取最后一個(gè)查找結(jié)果,只有在 cat 命令行執(zhí)行完畢后,才能獲取正確的 %?%]

例如:
cat --locate=a /File && set /a Last=%?% > nul ! set Last=-1

由于 %?% 和 cat 命令在同一條語(yǔ)句中,所以得不到正確的 %?% 結(jié)果。只有在 cat 命令行執(zhí)行完畢后,再執(zhí)行 set Last=%?% 才能獲取正確的 %?% 結(jié)果。

有一個(gè)技巧,可以用 &; 操作符實(shí)現(xiàn)變量的刷新:
set Last=-1 && cat --locate=a /File &; set /a Last=%?% > nul


==============================

cmp /menu.lst /m.lst
比較兩個(gè)文件是否相同。

cmp --hex /menu.lst /m.lst
比較兩個(gè)文件是否相同,并以十六進(jìn)制格式顯示對(duì)比結(jié)果。

cmp /menu.lst /m.lst > nul && echo same ! different
比較兩個(gè)文件是否相同,如果相同,則輸出 same,否則輸出 different。

==============================

dd if=()/menu.lst of=()/m.lst
將 /menu.lst 的內(nèi)容復(fù)制到 /m.lst 中

dd if=()/menu.lst of=()/m.lst bs=32 count=5
以 32 為塊大小(默認(rèn) 512),從 /menu.lst 中復(fù)制 5 塊數(shù)據(jù)到 /m.lst 中。e

dd if=()/menu.lst of=()/m.lst bs=10 skip=5 seek=6
以 10 為塊大小,從 /menu.lst 中復(fù)制數(shù)據(jù)到 /m.lst 中。復(fù)制時(shí),跳過(guò) /menu.lst 的前 5 個(gè)塊,從第 6 個(gè)塊開(kāi)始讀取,寫(xiě)入時(shí),跳過(guò) /m.lst 的前 7 個(gè)塊,從第 8 個(gè)塊開(kāi)始寫(xiě)入。

dd if=()/menu.lst of=()/m.lst buf=0x2000000 buflen=0x2000000
將 /menu.lst 的內(nèi)容復(fù)制到 /m.lst 中,復(fù)制時(shí),從內(nèi)存的 0x2000000 位置(32M的位置)取 0x2000000 空間(32M的空間)作為緩存,對(duì)于復(fù)制大文件來(lái)說(shuō),增加緩存的大小能夠加快 dd 的讀寫(xiě)速度。

[注意:源文件和目標(biāo)文件都必須存在,路徑必須以設(shè)備名開(kāi)頭,超出文件長(zhǎng)度的部分會(huì)被丟棄,目標(biāo)文件不能是 gz 壓縮文件,源文件可以是 gz 壓縮文件,壓縮文件在復(fù)制前會(huì)被解壓。dd 可以對(duì)整個(gè)設(shè)備進(jìn)行讀寫(xiě)操作:dd if=(fd0) of=(fd1),慎用。]

[注意:使用 dd 命令時(shí),不建議設(shè)置緩存,因?yàn)樵O(shè)置的緩存區(qū)域可能被其它程序混用,從而導(dǎo)致不可預(yù)知的后果]

==============================

write /menu.lst abc
在 /menu.lst 文件的開(kāi)頭寫(xiě)入 3 個(gè)字符 abc,覆蓋原來(lái)的字符。

write /menu.lst "abc"
在 /menu.lst 文件的開(kāi)頭寫(xiě)入 5 個(gè)字符 "abc",覆蓋原來(lái)的字符。

write /menu.lst \"abc\"
在 /menu.lst 文件的開(kāi)頭寫(xiě)入 5 個(gè)字符 "abc",覆蓋原來(lái)的字符。

[注意:被寫(xiě)入的字符串,除了開(kāi)頭的空格,其他空格或單引號(hào)或雙引號(hào)都不需要轉(zhuǎn)義,轉(zhuǎn)義也可以被處理,反斜線必須被轉(zhuǎn)義]

[注意:被寫(xiě)入的目標(biāo)文件必須存在,超出文件長(zhǎng)度的部分會(huì)被丟棄,目標(biāo)文件不能是 gz 壓縮文件,源文件可以是 gz 壓縮文件,壓縮文件在復(fù)制前會(huì)被解壓。write 命令可以對(duì)設(shè)備進(jìn)行操作:write (fd0) abc,慎用。]

write 0x8274 0x2001

[建議:使用和 calc 相同的語(yǔ)法 write *0x8274 0x2001 和 write *0x8274 *0x8280]

如果寫(xiě)入的對(duì)象不是文件或設(shè)備,而是一個(gè)數(shù)字,則該數(shù)字表示內(nèi)存地址,write 將該地址處的內(nèi)存數(shù)據(jù)修改為指定值,被寫(xiě)入的數(shù)據(jù)必須為整數(shù),不能是字符串。用下面的內(nèi)存地址進(jìn)行練習(xí):
write 0x50000 -1
redad 0x50000
write 0x50000 0
redad 0x50000

==============================

read 0x8280

[建議:使用和 calc 相同的語(yǔ)法 read *0x8280]

從內(nèi)存的指定位置讀取一個(gè) 32-bit 的值,并以十六進(jìn)制形式顯示出來(lái)。

==============================

現(xiàn)在 grub4dos 本身對(duì)常規(guī)內(nèi)存的占用情況如下:

00000~0FFFF 被 grub4dos 的程序代碼和堆棧占用。
10000~1FFFF 為 grub4dos 將來(lái)的代碼和數(shù)據(jù)保留。
20000~2FFFF 被 grub4dos 內(nèi)核中的自動(dòng)幾何參數(shù)探測(cè)占用,作為緩沖區(qū)。
30000~37FFF 被 grub4dos 內(nèi)核中的常規(guī)磁盤(pán)讀寫(xiě)緩沖區(qū)占用。
38000~4FFFF 保留給 grub4dos 將來(lái)的擴(kuò)展。
50000~7FFFF 保留給用戶使用
100000~110000 被 dd 命令的磁盤(pán)緩沖區(qū)占用。

[注意:以上關(guān)于內(nèi)存分配的內(nèi)容不一定準(zhǔn)確,希望開(kāi)發(fā)人員指正]

==============================

calc 1+1
計(jì)算 1+1 的結(jié)果,可執(zhí)行的操作:+(加)、-(減)、*(乘)、/(除)、%(余)、<<(左移)、>>(右移)、&(與)、|(或)、^(異或)

calc 0xFF
顯示 0xFF 的十進(jìn)制和十六進(jìn)制結(jié)果

calc *0x8280
顯示內(nèi)存 0x8280 處存儲(chǔ)的整數(shù)值

calc *50000=1
將內(nèi)存 0x50000 處存儲(chǔ)的整數(shù)值修改為 1

calc *50000=*0x8280
將內(nèi)存 0x50000 處存儲(chǔ)的整數(shù)值修改為 0x8280 處存儲(chǔ)的整數(shù)值

calc *50000=1<<4
將內(nèi)存 0x50000 處存儲(chǔ)的整數(shù)值修改為計(jì)算后的結(jié)果(1<<4=16)

[注意:在 set /a var=value 中,value 也可以用上面的方法進(jìn)行計(jì)算:set /a b=*0x8280]

calc 和 set /a 可以將負(fù)數(shù)當(dāng)做被減數(shù)處理,不過(guò)要在減號(hào)之后添加一個(gè)空格,例如下面的代碼:

set a=-32
set /a b=0-%a%

上面的 set 命令無(wú)法計(jì)算 0--32 的值,用下面的寫(xiě)法就可以計(jì)算了(在減號(hào)之后添加一個(gè)空格):

set a=-32
set /a b=0- %a%

上面的 set 命令可以計(jì)算 0- -32 的值,結(jié)果為 32。


==============================

checktime
顯示當(dāng)前日期時(shí)間星期

checktime * 0-12 * * * && echo 上午 ! echo 下午
根據(jù)不同的時(shí)間顯示不同的信息。(checktime 分 時(shí) 日 月 星期)

checktime * * * * 6,0 && echo 周末 ! echo 非周末
根據(jù)不同的時(shí)間顯示不同的信息。(checktime 分 時(shí) 日 月 星期)

checktime * * * * */2 && echo 雙周 ! echo 單周
根據(jù)不同的時(shí)間顯示不同的信息。(checktime 分 時(shí) 日 月 星期)

checktime 0,1-59/15 * * * * && echo 整刻鐘 ! echo 非整刻鐘
根據(jù)不同的時(shí)間顯示不同的信息。(checktime 分 時(shí) 日 月 星期)

==============================

echo \\Hello
在屏幕上輸出 \\Hello(行尾會(huì)自動(dòng)添加換行符)

echo -n \\Hello
在屏幕上輸出 \\Hello(行尾不會(huì)自動(dòng)添加換行符)

echo -e \\Hello
在屏幕上輸出 \Hello(-e 表示處理轉(zhuǎn)義字符)

echo -h
顯示 echo 支持的顏色表

echo $[0x1F] abc
使用顏色表 1F 處的前景色和背景色顯示 abc

echo $[0x1F] abc $[0xE4] def
使用顏色表 1F 處的前景色和背景色顯示 abc,然后使用顏色表 E4 處的前景色和背景色顯示 def

echo -P:0101 abc
在屏幕的第一行第一列顯示 abc

echo -n > /menu.lst
清空 /menu.lst 文件的內(nèi)容

==============================

pager on
打開(kāi)滿屏分頁(yè)顯示模式
[Hit Q to quit, any other key to continue]

pager off
關(guān)閉滿屏分頁(yè)顯示模式

pager
切換滿屏分頁(yè)顯示模式

pager status
輸出當(dāng)前滿屏分頁(yè)顯示模式

==============================

clear
清屏(清除屏幕上顯示的內(nèi)容)

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(9個(gè)):

graphicsmode、vbeprobe、testvbe、setvbe、terminal、terminfo、font、background、foreground

==============================

graphicsmode
顯示當(dāng)前使用的圖形模式

graphicsmode 0x12
使用 vga 模式(640×480),推薦使用 vbe 模式

graphicsmode 0x6A
使用 vga 模式(800x600,對(duì)一些機(jī)子支持不是很好,有可能會(huì)死機(jī)),推薦使用 vbe 模式

graphicsmode -1 640
使用 vbe 模式,指定分辨率寬度為 640,若顯示器不支持此寬度的分辨率,將執(zhí)行失敗

graphicsmode -1 800 600
使用 vbe 模式,指定分辨率寬度為 800,高度為 600,若顯示器不支持此分辨率,將執(zhí)行失敗

graphicsmode -1 1024 768 32
使用 vbe 模式,指定分辨率寬度為 1024,高度為 768,使用 32 位色,若顯示器不支持此分辨率或位色,將執(zhí)行失敗

graphicsmode -1 100:1000 100:1000
使用 vbe 模式,分辨率寬度從 100 到 1000 這個(gè)范圍內(nèi)選取可用的最大值,高度從 100 到 1000 這個(gè)范圍內(nèi)選取可用的最大值
即,上面的命令可選 320×200,320×400,640×400,640×480,800×600 等分辨率,從中選取可用的最高分辨率

graphicsmode -1 100:1000 100:1000 24:32
效果同上,但是增加了顏色深度的范圍,同樣,在 24 位色和 32 位色中選取可用的最高顏色深度

[注意:grub4dos 的 vbe 不支持 16 位及更低的色深,只支持 24 位和 32 位色深。所以,你的所有的 graphicsmode 命令,都需要顯式地指定 24:32 的色深,不可以省略。比如,使用 graphicsmode -1 和 graphicsmode -1 800 600 都是不完全正確的,應(yīng)該分別改成 graphicsmode -1 -1 -1 24:32 和 graphicsmode -1 800 600 24:32 才算是對(duì)的。]

==============================

vbeprobe
偵測(cè) vbe 信息

vbeprobe 1024x768x32
偵測(cè)指定的 vbe 信息

vbeprobe 0x100
偵測(cè)指定的 vbe 信息

==============================

testvbe 800x600
測(cè)試指定的 vbe 模式,直接調(diào)用有時(shí)候會(huì)花屏

==============================

setvbe 800x600x32
在系統(tǒng)核心運(yùn)行前用來(lái)改變視頻模式,視頻模式信息會(huì)傳遞給核心。直接調(diào)用大部分情況下會(huì)花屏

[注意:setvbe 命令主要是為了某些 Linux 啟動(dòng)過(guò)程的圖形界面而設(shè)計(jì)的,一般是用不著的。建議永遠(yuǎn)不要使用它。如果你能避免使用它,就盡量避免使用它。通常 Linux 在自己的啟動(dòng)過(guò)程中,會(huì)自行設(shè)置相應(yīng)的圖形模式,而不是需要經(jīng)過(guò) grub4dos 的設(shè)置才行。所以,將來(lái)有可能取締這條 setvbe 命令。]

==============================

terminal console
選擇文本模式的終端

terminal graphics
選擇圖形模式的終端

terminal --no-echo graphics
選擇圖形模式的終端,并且不顯示用戶輸入的字符

terminal --font-spacing=1:2
在 vbe 模式下,設(shè)置字距為 1,行距為2,單位:像數(shù)點(diǎn)。

[注:更多關(guān)于 terminal 的用法不知道怎么用,似乎也用不上。]

==============================

terminfo
顯示當(dāng)前終端的配置信息

[注:更多關(guān)于 terminfo 的用法不知道怎么用,似乎也用不上。]

==============================

font /unifont.hex.gz
加載字庫(kù)文件,用于在 vbe 模式下顯示漢字
字庫(kù)下載地址:
https://code.google.com/p/grub4d ... name=unifont.hex.gz
http://bbs./forum.php?mod=viewthread&tid=256198

==============================

background 303030
在 vga 模式下設(shè)置背景色,其它模式下不起作用

==============================

foreground FFFF00
在 vga 模式下設(shè)置前景色,其它模式下不起作用

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(11個(gè)):

halt、reboot、hide、unhide、hiddenflag、makeactive、partnew、parttype、blocklist、uuid、fstest

==============================

halt
關(guān)機(jī)(halt 還有很多參數(shù),當(dāng)你關(guān)機(jī)出問(wèn)題的時(shí)候再去研究它的參數(shù)吧)

==============================

reboot
重啟(沒(méi)有參數(shù))

==============================

hide (hd0,0)
隱藏第一硬盤(pán)第一主分區(qū)

==============================

unhide (hd0,0)
取消隱藏第一硬盤(pán)第一主分區(qū)

==============================

hiddenflag
顯示當(dāng)前根設(shè)備的顯/隱狀態(tài)(對(duì) ud、cd 等不起作用)

hiddenflag (hd0,0)
顯示第一硬盤(pán)第一主分區(qū)的顯/隱狀態(tài)

hiddenflag --set
將當(dāng)前跟設(shè)備設(shè)置為隱藏

hiddenflag --set (hd0,0)
將第一硬盤(pán)第一主分區(qū)設(shè)置為隱藏(即若原分區(qū)類型為 0x07,現(xiàn)在分區(qū)類型為 0x17)

hiddenflag --clear
將當(dāng)前跟設(shè)備設(shè)置為顯現(xiàn)

hiddenflag --clear (hd0,0)
將第一硬盤(pán)第一主分區(qū)設(shè)置為顯現(xiàn)(即若原分區(qū)類型為 0x17,現(xiàn)在分區(qū)類型為 0x07)

==============================

makeactive
將當(dāng)前設(shè)備設(shè)置為活動(dòng)

makeactive (hd0,0)
將第一硬盤(pán)第一主分區(qū)設(shè)置為活動(dòng)

makeactive --status
顯示當(dāng)前設(shè)備是否為活動(dòng)狀態(tài)

makeactive --status (hd0,0)
顯示第一硬盤(pán)第一主分區(qū)是否為活動(dòng)狀態(tài)

==============================

partnew [--active] 分區(qū)號(hào) 類型 起始扇區(qū) [長(zhǎng)度]

這個(gè)不多研究,要修改分區(qū),還是用專用軟件吧。
Grub4Dos 0.4.5c 的幫助文檔中有一些例子,感興趣的可以研究一下。

==============================

parttype
顯示當(dāng)前分區(qū)的分區(qū)類型

parttype (hd0,0)
顯示第一硬盤(pán)第一分區(qū)的分區(qū)類型

parttype (hd0,0) 0x17
將第一硬盤(pán)第一分區(qū)的分區(qū)類型改為 0x17

==============================

blocklist /grldr
顯示文件的塊信息,即文件所在區(qū)域的起始?jí)K和塊長(zhǎng)度。
blocklist 命令不能用于 pxe 設(shè)備上的文件。

[注意:如果文件有碎片,blocklist 會(huì)列出文件的所有塊,包括碎片,如果碎片太多,超出了 Grub4Dos 的緩沖區(qū),則該命令會(huì)失敗]

==============================

uuid
列處所有設(shè)備的 uuid 號(hào)

uuid (hd0,0)
顯示指定設(shè)備的 uuid 號(hào)

uuid 000E0336000C1B8D
查找 uuid 號(hào)為 000E0336000C1B8D 的設(shè)備,并將其設(shè)置為當(dāng)前設(shè)備

uuid (hd0,0) 000E0336000C1B8D && echo yes ! echo no
如果 (hd0,0) 的 uuid 號(hào)為 000E0336000C1B8D 則輸出 yes,否則輸出 no

==============================

fstest
為了幫助開(kāi)發(fā)者開(kāi)發(fā)文件系統(tǒng)支持代碼而設(shè)置的命令,終端用戶不需要它。

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(8個(gè)):

kernel、initrd、module、modulenounzip、chainloader、boot、pxe、quit

==============================

kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]

嘗試載入主引導(dǎo)映像文件。其它項(xiàng)將被作為內(nèi)核的命令行參數(shù)而傳遞給內(nèi)核。
使用此命令以前,內(nèi)核所用到的模塊應(yīng)該被重新載入。

參數(shù) --type 用于說(shuō)明內(nèi)核的類型,包括 "netbsd", "freebsd", "openbsd", "linux", "biglinux" 和 "multiboot"。

參數(shù) --no-mem-option 用于說(shuō)明不必自動(dòng)傳遞 Linux 的內(nèi)存參數(shù)。

==============================

initrd FILE [FILE...]

加載 Linux 格式的初始化虛擬盤(pán), 并設(shè)置必要的參數(shù)。 指定在系統(tǒng)啟動(dòng)訪問(wèn)真正的根文件系統(tǒng)前,訪問(wèn)的 ramdisk 映象。

下面通過(guò) kernel 和 initrd 命令啟動(dòng) Ubuntu 13.10 LiveCD:

# 菜單標(biāo)題
title 啟動(dòng) Ubuntu 13.10 amd64 LiveCD
# 查找 UBUNTU-13.10-X64.ISO 所在磁盤(pán)并將其設(shè)置為當(dāng)前磁盤(pán)
find --set-root /BOOT/UBUNTU/UBUNTU-13.10-X64.ISO
# 嘗試載入主引導(dǎo)映像文件 vmlinuz.efi,后面是傳遞給 vmlinuz.efi 的參數(shù)。
kernel /BOOT/UBUNTU/vmlinuz.efi boot=casper iso-scan/filename=/BOOT/UBUNTU/UBUNTU-13.10-X64.ISO locale=zh_CN.UTF-8
# 加載 Linux 格式的初始化虛擬盤(pán) initrd.lz。
initrd /BOOT/UBUNTU/initrd.lz

==============================

module FILE [ARG ...]

對(duì)多重啟動(dòng)映像, 加載啟動(dòng)模塊文件(不處理該文件的內(nèi)容, 用戶必須自己確定核心的要求)。
剩余參數(shù)作為“模快命令行”傳遞,象 kernel 命令一樣。

這個(gè)命令一般用不上,當(dāng)你要啟動(dòng) Linux 系統(tǒng)的時(shí)候,而且系統(tǒng)要求加載模塊文件的時(shí)候,才會(huì)用到,相關(guān) Linux 系統(tǒng)中會(huì)有說(shuō)明,一般用戶可以忽略這個(gè)命令。

==============================

modulenounzip FILE [ARG ...]

與 module 類似,但是禁用了自動(dòng)解壓縮。

功能同上,一般用戶可以忽略這個(gè)命令。

==============================

chainloader /ntldr
加載 ntldr 啟動(dòng)文件

chainloader (hd0,0)+1
加載 (hd0,0) 的第一扇區(qū)

chainloader +1
加載當(dāng)前設(shè)備的第一扇區(qū)

chainloader --force (hd0,0)+1
加載 (hd0,0) 的第一扇區(qū),忽略該扇區(qū)啟動(dòng)標(biāo)識(shí)的有效性,強(qiáng)制啟動(dòng)

[注:chainloader 還有許多其它參數(shù),可以在啟動(dòng)之前修改 CPU 的寄存器,不過(guò)對(duì)于普通用戶來(lái)說(shuō),這些東西不會(huì)用到,如果想知道 chainloader 的更多參數(shù),可以參考《Grub4Dos 0.4.5c 的幫助文檔》]

==============================

boot
引導(dǎo)已加載的操作系統(tǒng)或扇區(qū)鏈?zhǔn)郊虞d器,確定進(jìn)行啟動(dòng),通常和 chainloader 命令搭配使用,在菜單文件中可以省略,命令行模式下需要。

chainloader /ntldr
boot
加載 ntldr 啟動(dòng)文件,然后啟動(dòng)。

boot -1
調(diào)用 BIOS 的 int18 功能,根據(jù) BIOS 設(shè)置的啟動(dòng)順序,啟動(dòng)下一設(shè)備。

boot --int18
功能同上,調(diào)用 BIOS 的 int18 功能,根據(jù) BIOS 設(shè)置的啟動(dòng)順序,啟動(dòng)下一設(shè)備。

==============================

pxe

這個(gè)命令比較復(fù)雜,以后再研究,先把本地啟動(dòng)搞懂。

==============================

quit
如果是從 DOS 環(huán)境進(jìn)入 GRUB 環(huán)境中,使用本命令可以退回到 DOS 環(huán)境中。

quit --disable-a20
使用 --disable-a20 參數(shù),將會(huì)在把控制權(quán)移交給 DOS 時(shí)關(guān)閉 A20 總線。

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(15個(gè)):

configfile、default、savedefault、timeout、title、iftitle、hiddenmenu、password、lock、md5crypt、commandline、gfxmenu、splashimage、color、outline

==============================

用在命令行或菜單文件中:

configfile /menu.lst
加載當(dāng)前設(shè)備根目錄下的菜單文件 /menu.lst。

configfile (hd0,0)/menu.lst
加載 (hd0,0)/menu.lst。

configfile (md)4+8
特殊用法,回到 grldr 內(nèi)置菜單。


新版返回內(nèi)置菜單的命令:
write 0x307ff8 1  && configfile


[注意:configfile 命令執(zhí)行后,當(dāng)前設(shè)備和當(dāng)前目錄將同時(shí)更新為 FILE 文件所在的設(shè)備。如果在內(nèi)置菜單的初始化命令組中出現(xiàn)不帶任何參數(shù)的 configfile 命令,那么控制將轉(zhuǎn)到啟動(dòng)設(shè)備上的 menu.lst 文件。]

==============================

用在所有菜單項(xiàng)之前:

default 0
默認(rèn)選擇第一個(gè)菜單項(xiàng)(如果用戶不手動(dòng)選擇的話)

default saved
默認(rèn)選擇上次 savedefault 保存的菜單項(xiàng)(savedefault 在菜單項(xiàng)中執(zhí)行,默認(rèn)保存到 /default 文件中)

default /FILE
默認(rèn)選擇上次 savedefault 保存的菜單項(xiàng)(savedefault 在菜單項(xiàng)中執(zhí)行,默認(rèn)保存到 /FILE 文件中)

[注意:/default 文件或 /FILE 文件必須為 2048 字節(jié),手動(dòng)修改后也要保證文件長(zhǎng)度為 2048 字節(jié)]

==============================

用在菜單項(xiàng)中:

savedefault
將當(dāng)前菜單項(xiàng)作為默認(rèn)菜單保存到 /default 中或 default 命令指定的 /FILE 中。

savedefault --wait=5
將當(dāng)前菜單項(xiàng)作為默認(rèn)菜單保存到 /default 中或 default 命令指定的 /FILE 中,保存前給用戶一個(gè) 5 秒的提示:
About to write the entry number x to file
Press Y to allow or N to deny.
如果用戶在 5 秒內(nèi)沒(méi)有按 Y 鍵,則默認(rèn)不保存菜單項(xiàng)。

==============================

用在所有菜單項(xiàng)之前:

timeout 10
在出現(xiàn)菜單列表后,10 秒鐘之內(nèi),如果用戶沒(méi)有手動(dòng)進(jìn)行選擇,則執(zhí)行默認(rèn)菜單項(xiàng)。

==============================

title 菜單標(biāo)題
指定菜單項(xiàng)的標(biāo)題文本

title 菜單標(biāo)題\n菜單提示第一行\(zhòng)n菜單提示第二行\(zhòng)n...
指定菜單項(xiàng)的標(biāo)題文本和提示文本

[注意:如果菜單項(xiàng)中沒(méi)有啟動(dòng)敏感命令,則該菜單不能用上下方向鍵選擇,只能用左右方向鍵選擇。]

啟動(dòng)敏感命令:
boot、chainloader、configfile、command、commandline、halt、kernel、pxe、quit、reboot

在菜單列表界面可以執(zhí)行如下操作:
e  :編輯當(dāng)前的啟動(dòng)菜單項(xiàng)
b  :?jiǎn)?dòng)當(dāng)前的菜單項(xiàng)
c  :進(jìn)入 grub 的命令行方式

在編輯菜單項(xiàng)時(shí)可以執(zhí)行如下操作:
e  :編輯當(dāng)前行
d  :刪除當(dāng)前行
o  :在當(dāng)前行下面插入新行
O  :在當(dāng)前行上面插入新行
b  :?jiǎn)?dòng)當(dāng)前菜單
c  :進(jìn)入 grub 的命令行方式
esc:返回 grub 菜單列表,取消對(duì)當(dāng)前菜單項(xiàng)所做的任何修改

[注意:對(duì)菜單的修改只是臨時(shí)的,只對(duì)本次啟動(dòng)有效]

在命令行下可以執(zhí)行如下操作:
esc:返回 grub 菜單列表

在菜單列表中可以按數(shù)字鍵來(lái)選擇菜單,如果要選擇 9 以上的菜單項(xiàng),可以按兩次數(shù)字鍵,比如要選擇第 25 菜單項(xiàng),可以先按下 2 再按下 5(菜單序號(hào)從 0 開(kāi)始,即第一個(gè)菜單的序號(hào)為 0)。

==============================

iftitle [if exist (hd0,0)/bootmgr] 啟動(dòng) (hd0,0) 中的 NT6.x
如果 [] 中的條件成立,則顯示該菜單,否則不顯示該菜單

==============================

用在所有菜單項(xiàng)之前:

hiddenmenu 3
不顯示菜單列表,使用菜單項(xiàng) 3 啟動(dòng),在 timeout 時(shí)間內(nèi)按任意鍵可以顯示菜單列表。

hiddenmenu --chkpass=0x5700
不顯示菜單列表,使用菜單項(xiàng) default 啟動(dòng),在 timeout 時(shí)間內(nèi)按 F11 鍵可以顯示菜單列表。

[注意:按鍵代碼如果不清楚可以使用 pause --test-key 命令來(lái)獲取功能]

==============================

用在菜單項(xiàng)中,或用在所有菜單項(xiàng)之前:

password 密碼
對(duì)菜單進(jìn)行加鎖,看下面的示例:

title 菜單標(biāo)題
password 123
commandline
要執(zhí)行該菜單需要輸入密碼 123

title 菜單標(biāo)題
password --md5 $1$JS/2$CKT61E11gzkdEKQnEpqjhS1
commandline
要執(zhí)行該菜單需要輸入密碼 123(密碼 123 是經(jīng)過(guò) md5 加密的)

timeout 10
default 0
password 123
title 菜單1
commandline
title 菜單2
commandline
對(duì)整個(gè)菜單列表進(jìn)行加鎖,被加鎖后的菜單列表不能按 e 鍵進(jìn)行編輯,不能按 c 鍵進(jìn)入命令行,解鎖后才能使用這些功能,在菜單列表界面下按下 p 鍵可以輸入解鎖密碼。

[注意:要想獲取字符串的 md5 編碼,可以執(zhí)行 md5crypt 123]

==============================

用在菜單項(xiàng)中:

lock
鎖定當(dāng)前菜單,需要解鎖后才能進(jìn)入??聪旅娴氖纠?br>
timeout 10
default 0
password 123
title 菜單1
lock
commandline
title 菜單2
commandline
解鎖前,“菜單1”不能執(zhí)行,“菜單2”可以執(zhí)行,解鎖后,“菜單1”和“菜單2”都可以執(zhí)行

==============================

用在命令行中:

md5crypt abc
獲取字符串 abc 的 md5 編碼。

==============================

用在菜單項(xiàng)中:

commandline
進(jìn)入 Grub4Dos 的命令行。

==============================

用在所有菜單項(xiàng)之前:

gfxmenu /message
使用 /message 中的圖形菜單

由于 gfxmenu 與 Grub4Dos 兼容性不好,所以不建議使用

==============================

用在所有菜單項(xiàng)之前:

splashimage /FILE
vbe 圖形模式下載入背景圖片文件。在 vbe 模式下,可使用 24位色或32位色 BMP 格式或 XPM 格式的圖片作為背景。

==============================

用在所有菜單項(xiàng)之前:

color normal=0xFFFFFF highlight=0xFF0000
設(shè)置未選中菜單為白色,選中菜單為紅色

color heading=0x0000FF helptext=0x00FF00
設(shè)置菜單頂部信息的顏色為藍(lán)色,菜單幫助信息的顏色為綠色

color standard=0xFFFFFF
設(shè)置控制臺(tái)的文本顏色為白色

color border=0xFF00FF
設(shè)置菜單邊框顏色為品紅色(VBE模式下有效)

color normal=0xFFFFFF highlight=0xFF0000 heading=0x0000FF helptext=0x00FF00 standard=0xFFFFFF border=0xFFFF00
同時(shí)設(shè)置上面所有顏色

color 0xFFFFFF 0xFF0000 0x0000FF 0x00FF00 0xFFFFFF 0xFFFF00
同時(shí)設(shè)置上面所有顏色(如果按順序設(shè)置,可以省略狀態(tài)標(biāo)記)

color 0xFFFFFF 0xFF0000
設(shè)置未選中菜單為白色,選中菜單為紅色(如果按順序設(shè)置,可以省略狀態(tài)標(biāo)記)

[注:0xFFFFFF 表示紅綠藍(lán)三種顏色的值:0xRRGGBB]

==============================

用在所有菜單項(xiàng)之前:

outline on
打開(kāi)圖形模式下的字符輪廓顯示模式。

outline off
關(guān)閉圖形模式下的字符輪廓顯示模式。

outline
切換圖形模式下的字符輪廓顯示模式。

outline status
顯示當(dāng)前圖形模式下的字符輪廓顯示模式。

[注:當(dāng)由于背景的原因字跡顯示不清時(shí)可以嘗試開(kāi)啟,會(huì)獲得比較好的顯示效果]

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(16個(gè)):

call、exit、shift、goto、set、setlocal、endlocal、if、checkrange、errorcheck、errnum、fallback、pause、command、insmod、delmod

==============================

call :標(biāo)簽1 參數(shù)1 參數(shù)2 ...
轉(zhuǎn)到到“標(biāo)簽1”執(zhí)行行并在 :eof 處返回,通過(guò) goto :eof 或 exit 可以跳轉(zhuǎn)到 :eof 處。

!BAT #注:文件頭 !BAT 是必須的,用于識(shí)別這是一個(gè) Grub4Dos 批處理腳本
# 將此文件保存為 test,然后在 Grub4Dos 的命令行中輸入 test 執(zhí)行它
call :label1 參數(shù)1 參數(shù)2 參數(shù)3 參數(shù)4 參數(shù)5 參數(shù)6 && echo ok ! echo fail
call :label2 參數(shù)1 參數(shù)2 參數(shù)3 參數(shù)4 參數(shù)5 參數(shù)6 && echo ok ! echo fail
echo 腳本結(jié)束
exit
:label1
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
exit 0
:label2
echo %9 %8 %7 %6 %5 %4 %3 %2 %1
exit 1

調(diào)用 label1 并獲取其返回值,根據(jù)返回值顯示 ok 或 fail
調(diào)用 label2 并獲取其返回值,根據(jù)返回值顯示 ok 或 fail
label1 始終返回 true
label2 始終返回 false

call 可以刷新環(huán)境變量,進(jìn)入新的環(huán)境,例如下面的代碼:
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
如果不加 call 則 --set-root 不能立即生效。

這里還要注意一點(diǎn),整行命令在執(zhí)行之前會(huì)被解析,解析的過(guò)程中,會(huì)將其中的變量替換成實(shí)際的值。%@root^% 的寫(xiě)法就是為了防止在解析命令行的時(shí)候?qū)⑵鋽U(kuò)展成實(shí)際的值,而是將其擴(kuò)展成字符串 %@root%,以便下次解析的時(shí)候繼續(xù)擴(kuò)展。當(dāng) find --set-root --devices=h /bootmgr 執(zhí)行成功后,需要執(zhí)行 && call set bootmgr=%@root^%(此時(shí) %@root^% 已經(jīng)被擴(kuò)展成 %@root% 了)的時(shí)候,又要執(zhí)行一次解析,此時(shí)會(huì)將 %@root% 擴(kuò)展成實(shí)際的值。


==============================

exit
跳轉(zhuǎn)到腳本文件的 :eof 處(腳本文件的結(jié)尾處)。功能同 goto :eof

==============================

shift
批處理專用,丟棄第一個(gè)參數(shù),后面的參數(shù)向前移動(dòng)。

shift 3
批處理專用,丟棄第三個(gè)參數(shù),后面的參數(shù)向前移動(dòng)。

[注意:Grub4Dos 中可以使用 %1~%9 參數(shù),其中 %9 指剩下的所有參數(shù)]

==============================

goto :標(biāo)簽1
批處理專用,跳轉(zhuǎn)到“標(biāo)簽1”處執(zhí)行,不返回,不支持參數(shù)。

goto 3
菜單專用,跳轉(zhuǎn)到指定的菜單項(xiàng)執(zhí)行。

==============================

set a=123
設(shè)置變量 a 的值為字符串 123

set /a a=123
設(shè)置變量 a 的值為十進(jìn)制整數(shù) 123

set /A a=123
設(shè)置變量 a 的值為十六進(jìn)制整數(shù) 0x7B

set /a a=123+4
設(shè)置變量 a 的值為十進(jìn)制整數(shù) 127(可參考 calc 命令)

set /A a=123+4
設(shè)置變量 a 的值為十六進(jìn)制整數(shù) 0x7F(可參考 calc 命令)

set a
顯示變量 a 的值

set a=
刪除變量 a

set *0x8280=0x80
設(shè)置內(nèi)存地址 0x8280 處的整數(shù)值為 0x80

set
列出所有變量列表

set a=abcdef
set len_a=%@retval%
通過(guò) %@retval% 獲取最后一次設(shè)置的變量的長(zhǎng)度

set a=abcdef && set /a len_a=*0x4cb00
通過(guò) *0x4cb00 獲取最后一次設(shè)置的變量的長(zhǎng)度


[注意:變量名最長(zhǎng)為 8 個(gè)字符,變量?jī)?nèi)容最長(zhǎng)為 512 字節(jié),變量最多只能設(shè)置 60 個(gè)]

==============================

setlocal 和 endlocal
setlocal 與 endlocal 之間的變量為本地變量,見(jiàn)下面的例子:

set a=123
setlocal
set a=4
echo %a%
endlocal
echo %a%

在 setlocal 與 endlocal 之間將 a 賦值為 4,但是這不影響 setlocal 之前設(shè)置的變量 a,在 endlocal 之后,變量 a 恢復(fù)為之前的值 123。

setlocal @ 和 endlocal @
setlocal 與 endlocal 之間的變量為本地變量,setlocal @ 和 endlocal @ 可以跨腳本文件存在。

[注意:setlocal @ 之前的 setlocal 將失效,setlocal @ 之后的 setlocal 不能跨腳本。]

==============================

if #%a%==#123 echo ok
如果變量 a 的值等于 123 則輸出 ok

if #%a%<=#123 echo ok
如果變量 a 的值小于等于 123 則輸出 ok

if #%a%>=#123 echo ok
如果變量 a 的值大于等于 123 則輸出 ok

if #%a%>=#abc echo ok
如果變量 a 的值等于字符串 abc 則輸出 ok(區(qū)分大小寫(xiě))

if /i #%a%>=#abc echo ok
如果變量 a 的值等于字符串 abc 則輸出 ok(忽略大小寫(xiě))

if #%a%==# echo ok
如果變量 a 的值為空則輸出 ok

if #%a%==#123 && echo ok
如果變量 a 的值等于 123 則輸出 ok

if #%a%==#123 || echo fail
如果變量 a 的值不等于 123 則輸出 fail

if not #%a%==#123 echo fail
如果變量 a 的值不等于 123 則輸出 fail

if exist a echo ok
如果存在變量 a 則輸出 ok

if not exist a echo fail
如果不存在變量 a 則輸出 fail

if exist /grldr && echo ok ! echo fail
如果存在文件 /grldr 則輸出 ok,否則輸出 fail

判斷文件或目錄是否存在,對(duì)驅(qū)動(dòng)器無(wú)效,比如 (ud)/
if exist /FILE && 文件或目錄存在 ! echo 文件或目錄不存在

判斷文件是否存在:
cat --length=0 /FILE && echo 文件存在 ! echo 文件不存在

判斷目錄是否存在,對(duì)驅(qū)動(dòng)器無(wú)效,比如 (ud)/
cat --length=0 /FILE && echo 目錄不存在 || if exist /FILE && echo 目錄存在 ! echo 目錄不存在


==============================

checkrange 范圍 命令 && 成功 ! 失敗
如果“命令”的返回值在“范圍”內(nèi),則執(zhí)行“成功”,否則執(zhí)行“失敗”。

checkrange 23 calc 20+3 && echo ok ! echo fail
如果 20+3 的值為 23,則輸出 ok,否則輸出 fail

checkrange 0x21,0x23,0x80 read 0x8280 && echo ok ! echo fail
如果從 0x8280 處讀出的值為 0x21 或 0x23 或 0x80 則輸出 ok,否則輸出 fail

checkrange 0:100 calc %a% && echo ok ! echo fail
如果變量 a 的值在 0-100 之間,則輸出 ok,否則輸出 fail

==============================

errorcheck on
打開(kāi)錯(cuò)誤檢查,遇到錯(cuò)誤將終止執(zhí)行

errorcheck off
關(guān)閉錯(cuò)誤檢查,執(zhí)行中遇到錯(cuò)誤將忽略,直至執(zhí)行完畢

errorechek
切換錯(cuò)誤檢查模式

errorcheck status
顯示當(dāng)前錯(cuò)誤檢查模式

[注:errorcheck 命令控制著錯(cuò)誤是否被處理。默認(rèn) errorcheck 是開(kāi)啟的,即在錯(cuò)誤發(fā)生時(shí)命令腳本將停止執(zhí)行。如果 errorcheck 是關(guān)閉的,則腳本將一直執(zhí)行到 boot 命令(即 off 狀態(tài)下,fallback 命令等將失效)。一條 boot 命令可以把錯(cuò)誤檢查轉(zhuǎn)變?yōu)殚_(kāi)啟]

==============================

errnum
返回上一條命令的錯(cuò)誤代碼。若上一條命令未出錯(cuò),則返回錯(cuò)誤代碼為 0,否則返回相應(yīng)的錯(cuò)誤代碼。

==============================

fallback 3
如果當(dāng)前菜單項(xiàng)執(zhí)行出錯(cuò),則轉(zhuǎn)移到第 3 菜單項(xiàng)繼續(xù)執(zhí)行。該命令僅在菜單中使用,用于無(wú)人引導(dǎo)模式:如果默認(rèn)菜單項(xiàng)執(zhí)行出錯(cuò),無(wú)需等待用戶操作,立即跳轉(zhuǎn)到第 3 菜單項(xiàng)繼續(xù)執(zhí)行。

==============================

pause press any key to continue
暫停命令的運(yùn)行,并給出一段提示信息,按下任意鍵后繼續(xù)。

pause --wait=10 press any key to continue
暫停命令的運(yùn)行,并給出一段提示信息,按下任意鍵后繼續(xù)。如果在 10 秒內(nèi)沒(méi)有按下任意鍵,則自動(dòng)返回命令行。

pause --test-key
執(zhí)行該命令后,按下任意鍵,將顯示該按鍵的掃描碼。

pause && set /a key=*0x4CB00 ! set key=
暫停命令的運(yùn)行,按下任意鍵后繼續(xù),并將該按鍵的 ASCII 碼存入變量 key 中。如果按下的是 ESC 鍵,則刪除變量 key


==============================

command
顯示當(dāng)前指定的外部命令的位置

command --set-path=/boot/grub
指定外部命令的位置為 /boot/grub

command RUN /pe.iso
查找外部命令 RUN 并執(zhí)行,參數(shù)為 /pe.iso

command /boot/RUN /pe.iso
執(zhí)行外部命令 /boot/RUN,參數(shù)為 /pe.iso

[注意:查找外部命令的順序如下: 如果是以 '(' 或 '/' 開(kāi)頭的文件被認(rèn)為是一個(gè)絕對(duì)路徑的文件,將直接執(zhí)行。否則先查找 insmod 加載的命令。再查找當(dāng)前目錄下的同名文件。再查找 --set-path 指定位置的同名文件。]

==============================

insmod RUN
將外部命令 RUN 加載到內(nèi)存,使得執(zhí)行外部命令時(shí)直接從內(nèi)存讀取,而不是從源設(shè)備讀取,加快執(zhí)行速度。

insmod FILE.MOD
FILE.MOD 是使用 makemod 程序生成的外部命令合集,免去多次使用 insmod 加載外部命令的麻煩。也可以使用 Fbinsttool 工具來(lái)制作 FILE.MOD 文件。

insmod /boot/grub/fat.gz fat
將外部命令 fat.gz 加載到內(nèi)存,同時(shí)指定新的名字 fat,此時(shí)可直接使用 fat 調(diào)用本外部命令。

[注意:insmod 載入的文件,其文件名長(zhǎng)度不能超過(guò) 11 個(gè)字符。]

==============================

delmod
顯示已加載的外部命令

delmod RUN
卸載已加載的外部命令 RUN

delmod *
卸載所有已加載的外部命令

delmod -l %~nx0 || insmod %0
判斷當(dāng)前腳本是否已經(jīng)載入內(nèi)存,如果沒(méi)有,則將其載入內(nèi)存。

==========================================================================================

接下來(lái)學(xué)習(xí)這些命令(8個(gè)):

help、debug、displaymem、geometry、is64bit、serial、tpm、setkey

==============================

help
顯示內(nèi)部命令列表

help --all
顯示所有命令列表

help root
顯示 root 命令的幫助信息

==============================

debug off 或 debug 0
開(kāi)啟靜默模式

debug normal 或 debug 1
開(kāi)啟標(biāo)準(zhǔn)模式

debug on
開(kāi)啟冗余模式,從 debug 2 到 debug 0x7fffffff 都等同于 debug on(調(diào)試報(bào)告 BUG 時(shí)請(qǐng)使用該模式,可以獲得更詳細(xì)的信息)

debug -1
隱藏倒計(jì)時(shí)提示

debug 3
開(kāi)啟批處理腳本調(diào)試模式(單步執(zhí)行),debug 3 模式下按 c 鍵可以進(jìn)入命令行,按 Ctrl + c 組合鍵可以中止腳本的執(zhí)行。

==============================

displaymem
顯示 GRUB 所判斷的當(dāng)前系統(tǒng)的內(nèi)存分布,包括所有物理內(nèi)存區(qū)域。

==============================

geometry (hd0)
輸出 (hd0) 的相關(guān)信息。

==============================

is64bit
如果 CPU 支持 64 位的話返回 true,否則返回 false。

==============================

serial
初始化一個(gè)串口設(shè)備。串口,不研究。

==============================

tpm --init
在地址 0000:7C00 處使用 512 字節(jié)數(shù)據(jù)作為初始化 TPM(可信賴平臺(tái)模塊)的緩存。用不上,不研究。

==============================

setkey a b
將按鍵 b 映射為按鍵 a,此時(shí)按下 b 鍵等同于按下 a 鍵。

[注:這里的鍵必須是字母, 數(shù)字, 和以下特殊鍵: escape(轉(zhuǎn)義), 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(大寫(xiě)), Fx(功能鍵) 和 delete(刪除)。

==========================================================================================


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多