乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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 之類(lèi)的。

      差別主要在啟動(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
      類(lèi)似 Linux 中的 ls 命令,類(lèi)似 Dos 下的 dir 命令,列出當(dāng)前目錄(工作目錄)下的文件和目錄

      ls /boot
      列出當(dāng)前目錄(工作目錄)下名稱(chē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ū)類(lèi)型為 0x07(NTFS)的所有分區(qū)(debug off 靜默模式下無(wú)法顯示磁盤(pán)列表)

      find /ntldr checkrange 0x07 parttype
      在分區(qū)類(lèi)型為 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è)備名稱(chēng)及其相關(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è)備類(lèi)型:

      (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ū))

      也可以使用類(lèi)似 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      回車(chē)符
      \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 保留給用戶(hù)使用
      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)滿(mǎn)屏分頁(yè)顯示模式
      [Hit Q to quit, any other key to continue]

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

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

      pager status
      輸出當(dāng)前滿(mǎn)屏分頁(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
      選擇圖形模式的終端,并且不顯示用戶(hù)輸入的字符

      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ū)類(lèi)型為 0x07,現(xiàn)在分區(qū)類(lèi)型為 0x17)

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

      hiddenflag --clear (hd0,0)
      將第一硬盤(pán)第一主分區(qū)設(shè)置為顯現(xiàn)(即若原分區(qū)類(lèi)型為 0x17,現(xiàn)在分區(qū)類(lèi)型為 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) 類(lèi)型 起始扇區(qū) [長(zhǎng)度]

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

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

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

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

      parttype (hd0,0) 0x17
      將第一硬盤(pán)第一分區(qū)的分區(qū)類(lèi)型改為 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è)置的命令,終端用戶(hù)不需要它。

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

      接下來(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)核的類(lè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)容, 用戶(hù)必須自己確定核心的要求)。
      剩余參數(shù)作為“??烀钚小眰鬟f,象 kernel 命令一樣。

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

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

      modulenounzip FILE [ARG ...]

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

      功能同上,一般用戶(hù)可以忽略這個(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ì)于普通用戶(hù)來(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)(如果用戶(hù)不手動(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 中,保存前給用戶(hù)一個(gè) 5 秒的提示:
      About to write the entry number x to file
      Press Y to allow or N to deny.
      如果用戶(hù)在 5 秒內(nèi)沒(méi)有按 Y 鍵,則默認(rèn)不保存菜單項(xiàng)。

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

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

      timeout 10
      在出現(xiàn)菜單列表后,10 秒鐘之內(nèi),如果用戶(hù)沒(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
      批處理專(zhuān)用,丟棄第一個(gè)參數(shù),后面的參數(shù)向前移動(dòng)。

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

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

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

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

      goto 3
      菜單專(zhuān)用,跳轉(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ú)需等待用戶(hù)操作,立即跳轉(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(可信賴(lài)平臺(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(回車(chē)), 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)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多