侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux grub命令教程:如何管理系统的启动过程(附实例详解和注意事项)

Linux grub命令介绍

grub命令是GRUB(GRand Unified Bootloader)的命令行工具,它可以让你在启动时修改、恢复或安装GRUB配置。GRUB是一个多操作系统启动管理器,它可以让你在同一台电脑上选择不同的操作系统或内核来启动。GRUB有两个版本,GRUB Legacy和GRUB 2,它们的命令和配置有一些差异,本文主要介绍GRUB 2的命令。

Linux grub命令适用的Linux版本

grub命令适用于大多数Linux发行版,如Ubuntu, Debian, Fedora, CentOS等,它们都使用GRUB 2作为默认的启动管理器。如果你的Linux发行版没有安装GRUB 2,你可以使用以下命令来安装:

  • Ubuntu/Debian: [linux@bashcommandnotfound.cn ~]$ sudo apt-get install grub-pc
  • Fedora/CentOS: [linux@bashcommandnotfound.cn ~]$ sudo yum install grub2

安装完成后,你需要运行以下命令来更新GRUB配置,并将GRUB安装到你的硬盘的主引导记录(MBR)上:

  • Ubuntu/Debian: [linux@bashcommandnotfound.cn ~]$ sudo update-grub && sudo grub-install /dev/sda
  • Fedora/CentOS: [linux@bashcommandnotfound.cn ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo grub2-install /dev/sda

其中,/dev/sda是你的硬盘的设备名,你可以用fdisk -l命令来查看你的硬盘信息。

Linux grub命令的基本语法

grub命令的基本语法如下:

grub [options] [device]

其中,options是可选的参数,device是可选的设备名。如果不指定device,grub命令会尝试自动检测你的硬盘和分区,并进入交互式模式,让你输入GRUB命令来修改或恢复GRUB配置。

Linux grub命令的常用选项或参数说明

grub命令的常用选项或参数如下表所示:

选项或参数说明
-h, --help显示帮助信息
-v, --version显示版本信息
--boot-directory=DIR指定GRUB的启动目录,通常是/boot
--modules=MODULES指定要加载的GRUB模块,用逗号分隔
--install-modules=MODULES指定要安装的GRUB模块,用逗号分隔
--compress=gzip指定压缩GRUB模块的方式,可以是gzip, lzop, xz, lzo, lzma, none
--no-compress不压缩GRUB模块
--grub-mkdevicemap=FILE指定GRUB设备映射文件,通常是/boot/grub/device.map
--grub-probe=FILE指定GRUB探测工具,通常是grub-probe
--target=TARGET指定GRUB的目标平台,可以是i386-pc, x86_64-efi, ia64-efi, arm-efi, arm64-efi, sparc64-ieee1275, mips-arc, mips-qemu_mips, mipsel-arc, mipsel-qemu_mips, mips64-arc, mips64-qemu_mips64, mips64el-arc, mips64el-qemu_mips64, powerpc-ieee1275, s390x-emu等
--directory=DIR指定GRUB模块的目录,通常是/usr/lib/grub
--verbose显示详细的输出信息
--allow-floppy允许将GRUB安装到软盘上
--force强制执行GRUB命令,即使有一些错误或警告
--recheck重新检查设备和分区的信息
--removable将GRUB安装到可移动设备上,如U盘
--no-nvram不更新NVRAM中的启动顺序,只适用于EFI平台
--no-floppy不检查软盘设备
--disk-module=MODULE指定GRUB的磁盘驱动模块,可以是biosdisk, native, ata, ahci, usb, ieee1275, scsi等

Linux grub命令的实例

实例1:进入GRUB交互式模式

如果你想在启动时修改或恢复GRUB配置,你可以在GRUB菜单界面按c键,进入GRUB交互式模式,然后输入GRUB命令来操作。例如,你可以用set命令来查看或设置GRUB变量,用ls命令来列出设备和分区,用root命令来设置根分区,用linux命令来设置内核,用initrd命令来设置初始内存盘,用boot命令来启动系统等。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub
grub> set
prefix=(hd0,msdos1)/boot/grub
root=hd0,msdos1
grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)
grub> root=(hd0,msdos2)
grub> linux /vmlinuz root=/dev/sda2 ro
grub> initrd /initrd.img
grub> boot

实例2:安装GRUB到硬盘的MBR上

如果你想将GRUB安装到硬盘的MBR上,你可以使用grub命令的device参数来指定硬盘的设备名,例如/dev/sda。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

实例3:安装GRUB到U盘上

如果你想将GRUB安装到U盘上,你可以使用grub命令的--removable选项来指定U盘是可移动设备,然后用device参数来指定U盘的设备名,例如/dev/sdb。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub --removable /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

实例4:更新GRUB配置文件

如果你想更新GRUB配置文件,你可以使用grub-mkconfig命令来生成一个新的配置文件,并用-o选项来指定输出的文件名,通常是/boot/grub/grub.cfg。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-58-generic
Found initrd image: /boot/initrd.img-5.4.0-58-generic
Found linux image: /boot/vmlinuz-5.4.0-56-generic
Found initrd image: /boot/initrd.img-5.4.0-56-generic
Found Windows 10 on /dev/sda1
done

实例5:恢复GRUB配置文件

如果你的GRUB配置文件被损坏或丢失,你可以使用grub-install命令来恢复它,它会自动检测你的系统和分区,并生成一个新的配置文件。你需要用device参数来指定硬盘的设备名,例如/dev/sda。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

如果你使用的是Live CD或USB启动,你需要先挂载你的根分区,然后用chroot命令来切换到你的系统环境,再执行grub-install命令。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ sudo mount /dev/sda2 /mnt # 假设你的根分区是/dev/sda2
[linux@bashcommandnotfound.cn ~]$ sudo chroot /mnt
[linux@bashcommandnotfound.cn ~]$ grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

实例6:恢复GRUB配置文件

如果你的GRUB配置文件被损坏或丢失,你可以使用grub-install命令来恢复它,它会自动检测你的系统和分区,并生成一个新的配置文件。你需要用device参数来指定硬盘的设备名,例如/dev/sda。以下是一个示例:

[linux@bashcommandnotfound.cn ~]$ grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

实例7:修改GRUB菜单的超时时间

如果你想修改GRUB菜单的超时时间,即在启动时显示GRUB菜单的秒数,你可以编辑GRUB配置文件中的GRUB_TIMEOUT变量,它的默认值是5秒。你可以用任意文本编辑器来编辑GRUB配置文件,通常是/boot/grub/grub.cfg,或者用grub-editenv命令来修改GRUB环境变量。以下是一个示例,将超时时间改为10秒:

[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_TIMEOUT=10

或者

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/grub.cfg
# Edit the following line
GRUB_TIMEOUT=10

实例8:修改GRUB菜单的默认启动项

如果你想修改GRUB菜单的默认启动项,即在超时后自动启动的操作系统或内核,你可以编辑GRUB配置文件中的GRUB_DEFAULT变量,它的默认值是0,表示第一个菜单项。你可以用数字或者菜单项的标题来指定默认启动项,也可以用saved来表示上次启动的菜单项。以下是一个示例,将默认启动项改为Windows 10:

[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_DEFAULT="Windows 10"

或者

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/grub.cfg
# Edit the following line
GRUB_DEFAULT="Windows 10"

实例9:隐藏GRUB菜单

如果你想隐藏GRUB菜单,即在启动时不显示GRUB菜单,只有按住Shift键才能显示,你可以编辑GRUB配置文件中的GRUB_HIDDEN_TIMEOUT和GRUB_HIDDEN_TIMEOUT_QUIET变量,它们的默认值是空,表示不隐藏GRUB菜单。你可以用GRUB_HIDDEN_TIMEOUT来指定隐藏GRUB菜单的秒数,用GRUB_HIDDEN_TIMEOUT_QUIET来指定是否显示倒计时信息,取值为true或false。以下是一个示例,将GRUB菜单隐藏10秒,并不显示倒计时信息:

[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_HIDDEN_TIMEOUT=10
[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_HIDDEN_TIMEOUT_QUIET=true

或者

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/grub.cfg
# Edit the following lines
GRUB_HIDDEN_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT_QUIET=true

实例10:修改GRUB菜单的分辨率和颜色

如果你想修改GRUB菜单的分辨率和颜色,即在启动时显示GRUB菜单的屏幕大小和背景色,你可以编辑GRUB配置文件中的GRUB_GFXMODE和GRUB_COLOR_NORMAL变量,它们的默认值是auto和white/black,表示自动适应屏幕分辨率和白色字体黑色背景。你可以用GRUB_GFXMODE来指定分辨率,格式为widthxheight,例如1024x768,用GRUB_COLOR_NORMAL来指定颜色,格式为foreground/background,例如red/green。以下是一个示例,将GRUB菜单的分辨率改为800x600,颜色改为蓝色字体黄色背景:

[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_GFXMODE=800x600
[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_COLOR_NORMAL=blue/yellow

或者

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/grub.cfg
# Edit the following lines
GRUB_GFXMODE=800x600
GRUB_COLOR_NORMAL=blue/yellow

实例11:修改GRUB菜单的字体和主题

如果你想修改GRUB菜单的字体和主题,即在启动时显示GRUB菜单的字体样式和背景图片,你可以编辑GRUB配置文件中的GRUB_FONT和GRUB_BACKGROUND变量,它们的默认值是空,表示使用GRUB的默认字体和背景。你可以用GRUB_FONT来指定字体文件,格式为路径/文件名,例如/boot/grub/fonts/DejaVuSansMono.pf2,用GRUB_BACKGROUND来指定背景图片文件,格式为路径/文件名,例如/boot/grub/background.jpg。以下是一个示例,将GRUB菜单的字体改为DejaVuSansMono,背景图片改为background.jpg:

[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_FONT=/boot/grub/fonts/DejaVuSansMono.pf2
[linux@bashcommandnotfound.cn ~]$ sudo grub-editenv - set GRUB_BACKGROUND=/boot/grub/background.jpg

或者

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/grub.cfg
# Edit the following lines
GRUB_FONT=/boot/grub/fonts/DejaVuSansMono.pf2
GRUB_BACKGROUND=/boot/grub/background.jpg

实例12:添加自定义的GRUB菜单项

如果你想添加自定义的GRUB菜单项,即在启动时显示你自己定义的操作系统或内核,你可以编辑GRUB配置文件中的40_custom文件,通常是/boot/grub/40_custom,或者创建一个新的文件,例如41_custom,放在/boot/grub目录下,然后用menuentry命令来定义你的菜单项,格式为:

menuentry 'title' {
    set root=(device,partition)
    linux /path/to/kernel [kernel options]
    initrd /path/to/initrd
}

其中,title是你的菜单项的标题,device是你的硬盘设备名,partition是你的分区编号,kernel是你的内核文件,initrd是你的初始内存盘文件,kernel options是你的内核参数。以下是一个示例,添加一个自定义的Ubuntu 20.04 LTS菜单项:

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/41_custom
# Add the following lines
menuentry 'Ubuntu 20.04 LTS' {
    set root=(hd0,msdos2)
    linux /boot/vmlinuz-5.4.0-58-generic root=/dev/sda2 ro quiet splash
    initrd /boot/initrd.img-5.4.0-58-generic
}

实例13:删除或隐藏不需要的GRUB菜单项

如果你想删除或隐藏不需要的GRUB菜单项,即在启动时不显示你不想启动的操作系统或内核,你可以编辑GRUB配置文件中的10_linux文件,通常是/boot/grub/10_linux,或者其他相关的文件,例如30_os-prober,然后用#号来注释掉你不需要的菜单项,或者用submenu命令来将它们放在一个子菜单中,格式为:

submenu 'title' {
    menuentry 'title' {
        ...
    }
    ...
}

其中,title是你的子菜单或菜单项的标题,...是你的菜单项的内容。以下是一个示例,将不需要的内核菜单项放在一个子菜单中,标题为Old kernels:

[linux@bashcommandnotfound.cn ~]$ sudo vi /boot/grub/10_linux
# Edit the following lines
submenu 'Old kernels' {
    menuentry 'Ubuntu, with Linux 5.4.0-56-generic' {
        ...
    }
    menuentry 'Ubuntu, with Linux 5.4.0-56-generic (recovery mode)' {
        ...
    }
}

实例14:使用GRUB命令来启动其他操作系统

如果你想使用GRUB命令来启动其他操作系统,即在GRUB交互式模式下输入GRUB命令来加载其他操作系统的启动信息,你可以使用chainloader命令来指定其他操作系统的启动文件,例如Windows的/bootmgr或ntldr,然后用boot命令来启动。以下是一个示例,使用GRUB命令来启动Windows 10:

[linux@bashcommandnotfound.cn ~]$ grub
grub> set root=(hd0,msdos1) # 假设Windows 10的分区是/dev/sda1
grub> chainloader +1
grub> boot

实例15:使用GRUB命令来启动ISO镜像

如果你想使用GRUB命令来启动ISO镜像,即在GRUB交互式模式下输入GRUB命令来加载ISO镜像的启动信息,你可以使用loopback命令来指定ISO镜像的文件,然后用linux和initrd命令来指定内核和初始内存盘,然后用boot命令来启动。以下是一个示例,使用GRUB命令来启动Ubuntu 20.04 LTS的ISO镜像:

[linux@bashcommandnotfound.cn ~]$ grub
grub> set root=(hd0,msdos2) # 假设ISO镜像的分区是/dev/sda2
grub> loopback loop /ubuntu-20.04.1-desktop-amd64.iso
grub> linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-20.04.1-desktop-amd64.iso
grub> initrd (loop)/casper/initrd
grub> boot

Linux grub命令的注意事项

  • grub命令是一个非常强大的工具,它可以让你管理你的系统的启动过程,但也有一些风险,如果你不小心操作,可能会导致你的系统无法启动或者损坏你的数据,所以在使用grub命令之前,你最好备份你的数据,或者使用Live CD或USB来测试你的修改。
  • grub命令有两个版本,GRUB Legacy和GRUB 2,它们的命令和配置有一些差异,本文主要介绍GRUB 2的命令,如果你使用的是GRUB Legacy,你可以参考[GRUB Legacy文档]或者[GRUB Legacy命令列表]。
  • grub命令有两种模式,交互式模式和非交互式模式,交互式模式是在启动时按c键进入的,你可以输入GRUB命令来修改或恢复GRUB配置,非交互式模式是在系统中运行的,你可以使用grub命令的选项和参数来安装或更新GRUB配置,你需要注意区分这两种模式,不要混淆它们的用法。
  • 如果你在使用grub命令时遇到了错误或问题,你可以使用grub-mkrescue命令来创建一个可启动的GRUB救援盘,然后用它来启动你的系统,或者使用grub-rescue命令来进入GRUB救援模式,然后输入GRUB命令来修复你的GRUB配置,你可以参考[GRUB救援模式]或者[GRUB救援命令]。
  • 如果你在使用grub命令时看到了bash: grub: command not found
0

评论区