什麼是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一個引導裝入器 -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其餘操做系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 、DOS以及 Windows。雖然引導操做系統看上去是件平庸且瑣碎的任務,但它實際上很是重要。linux
假設引導裝入器不能很是好地完畢工做或者不具備彈性。
那麼就可能鎖住系統。而沒法引導計算機。另外,好的引導裝入器可以給您靈活性。讓您可以在計算機上安裝多個
操做系統,而沒必要處理沒必要要的麻煩。
ubuntu
廢話很少說,看着也沒多大意思,趕忙進入正文,想看介紹的可以去《GRUB新手教程》學習。
vim
如今。較新電腦上裝的都是grub2。而grub2 使用的配置文件是 /boot/grub/grub.cfg。打開後咱們可以找到這樣一句:windows
set default="0" 這一選項是用來選擇默認系統的。0 即第一個,假設你有5個選項,他們分別相應 /boot/grub/grub.cfg 文件裏的:安全
menuentry 'Debian GNU/Linux, with Linux 3.2.51-trace' --class debian --class gnu-linux --class gnu --class os { --- 0
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.51-trace (recovery mode)' --class debian --class gnu-linux --class gnu --class os { --- 1
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os { --- 2
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { --- 3
...
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os { --- 4
...
}bash
因此,你僅僅需要依據本身選擇第幾個內核就可以! 比方我想要個人win 7 做爲默認系統,我可以將menuentry "Windows 7 ... 這一段 移到menuentry 'Debian GNU/Linux, with Linux 3.2.5 ... 以前,也可以直接將set default="0" 中的0 改成4!學習
set timeout=5 這一選項用來設置grub 選項等待時間,假設是5 就是5秒內不選擇,就載入光標所在選項!ui
一臺電腦裝的系統多了或者變異的內核多了。可能你的GRUB 選項會變成這樣:spa
選擇一個你想進入的內核都得上下翻頁翻半天。那麼怎麼處理這個問題?有效的管理這些個選項呢?關於這個,Ubuntu上的grub 或者可以給咱們一個很是好的提示,對,假設你使用過 Ubuntu ,在你編譯內核之後,一個系統上的內核會被摺疊。比方說個人還有一臺筆記本上的grub 會是這樣:操作系統
* Ubuntu, with Linux 3.2.0-61-generic-pae
* Ubuntu, with Linux 3.2.0-61-generic-pae
* Previous Linux versions
* Windows 8 (loader)
光標移動到「Previous Linux versions」 選項上,進入後,grub纔會展現出其它一些內核選項:
* Ubuntu, with Linux 3.12.13-rt4
* Ubuntu, with Linux 3.12.13-rt4 (recovery mode)
* Ubuntu, with Linux 3.12.13-ftrace
* Ubuntu, with Linux 3.12.13-ftrace (recovery mode)
* Ubuntu, with Linux 3.4.24-test
* Ubuntu, with Linux 3.4.24-test (recovery mode)
* Ubuntu, with Linux 3.2.0-51-generic-pae
* Ubuntu, with Linux 3.2.0-51-generic-pae (recovery mode)
那麼咱們怎麼本身完畢這個動做,打開ubuntu 的/boot/grub/grub.cfg 後我明確了,原來這僅僅是grub的一個二級菜單功能 「 submenu "Previous Linux versions" { ... } 」,因此個人筆記本可以這麼玩:
$ sudo vim /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 3.12.9-gcov-rt13' --class debian --class gnu-linux --class gnu --class os
submenu "Previous Debian versions" {
menuentry 'Debian GNU/Linux, with Linux 3.12.9-gcov-rt13 (recovery mode)' --class debian --class gnu-linux --class gnu --class os
menuentry 'Debian GNU/Linux, with Linux 3.12.9-testing-rt13' --class debian --class gnu-linux --class gnu --class os
menuentry 'Debian GNU/Linux, with Linux 3.12.9-testing-rt13 (recovery mode)' --class debian --class gnu-linux --class gnu --class os
menuentry 'Debian GNU/Linux, with Linux 3.10.17-trace-rt12' --class debian --class gnu-linux --class gnu --class os
menuentry 'Debian GNU/Linux, with Linux 3.10.17-trace-rt12 (recovery mode)' --class debian --class gnu-linux --class gnu --class os
menuentry 'Debian GNU/Linux, with Linux 3.9.11-trace' --class debian --class gnu-linux --class gnu --class os
...
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os
menuentry "elementary OS, with Linux 3.2.0-51-generic (on /dev/sda10)" --class gnu-linux --class gnu --class os
submenu "Previous elementary OS versions" {
menuentry "elementary OS, with Linux 3.2.0-51-generic (recovery mode) (on /dev/sda10)" --class gnu-linux --class gnu --class os
}
menuentry "Ubuntu (on /dev/sda8)" --class gnu-linux --class gnu --class os
submenu "Previous Ubuntu versions" {
menuentry "Ubuntu。Linux 3.11.0-18-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os
menuentry "Ubuntu,Linux 3.11.0-18-generic (恢復模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os
menuentry "Ubuntu,Linux 3.11.0-13-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os
menuentry "Ubuntu。Linux 3.11.0-13-generic (恢復模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os
...
}
因而忽,個人機器現在啓動是這種:
是否是清新不少?
你認爲你使用 Linux 系統安全麼? 你有了password就安全了麼?來試試GRUB 的強大吧!
。!
(1). 系統啓動。進入grub 選擇界面!如上面的圖片所看到的
(2). 在一個選項之上按 e 鍵進入grub 編輯界面!(沒事,大膽嘗試,不會永久保存的。就算保存了不對的東西,不是還有recovery mode 嘛!。!)
(3). 比方我當前的編輯界面顯示的內容是這種:
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos8)'
search --no-floppy --fs-uuid --set=root c81eebc3-ed49-4661-be49-eadeb0de4696
linux /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.2.0-61-generic-pae
咱們需要改動的是上面我使用顏色標記的行,咱們將 ro 改成rw 。後面的內容全刪除!加入上 init=/bin/bash
也就是說,改完以後是這種:
linux /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 rw init=/bin/bash
這時候,咱們按Ctrx+X 或者F10 保存並進入。咱們會發現通過一段時間載入後,咱們沒有不論什麼password確得到了root 權限!!
!
那麼這時候系統還安全麼???咱們可以載入不論什麼分區,而後獲取不論什麼你想保密的內容!啦啦啦~~~
但是。我在這介紹這方法不是讓你去整人的!
!
!它可以用在很是實用的方面: 丟失password可以用此方法改動password。系統崩潰可以使用此方法將關鍵文件拷貝走!
等等~~
有時候。咱們會安裝多個系統。比方上面照片中。個人一個筆記本上安裝了4個系統。當中會將一個系統下的grub 做爲電腦的載入程序!
比方說個人電腦上Debian 的GRUB 被我用作電腦的默認載入程序了!
但是某天我在 Ubuntu 上編譯了一個內核,並使用 update-grub2 更新了grub, 但是系統啓動,你會發現你的 update 並無生效,你還需要到 Debian 下再使用 update-grub2 後。這個在 Ubuntu 下編譯的內核纔會在系統啓動菜單中出現!
還有種狀況。比方個人電腦上僅僅有Debian 和 win8 兩個系統,但是某一天個人 win 8 崩潰了因而我重裝了系統,啓動後發現。我僅僅能進入windows 了,再也引導不了Debian 了。因爲Windows 的引導程序還不能引導 Linux!
遇到這兩種狀況怎麼辦? 使用 grub-install !方法可以參見《那些年解決的 Ubuntu 系統故障》