目次
1.1 基本的な内容
1.1.1 grub2 と grub の違い
公式マニュアル原文:
1.1.5 boot loader和grub的关系
1.1.6 grub2的安装位置
1.1.7 进入grub命令行
1.2 安装grub2
1.2.1 grub安装命令
1.2.2 各種 img および stage ファイルの説明
1.2.2.1 img ファイル
1.2.2.2 传统grub中的stage文件
1.2.3 安装grub涉及的过程
1.3 grub2配置文件
1.3.1 通过/etc/default/grub文件生成grub.cfg
1.3.2 grub.cfgファイルをスクリプト内に直接記述する
1.4 命令行和菜单项中的命令
1.4.1 help命令
1.4.2 boot命令
1.4.3 set和unset命令
1.4.4 lsmod命令和insmod命令
1.4.5 linux和linux16命令
1.4.6 initrd和initrd16命令
1.4.7 search命令
1.4.8 true および false コマンド
1.4.9 式と[式]をテストします
1.4.10 cat命令
1.4.11 clear命令
1.4.12 configfile命令
1.4.13 echo命令
1.4.14 export命令
1.4.15 halt和reboot命令
1.4.16 ls命令
1.4.17 probe命令
1.4.18 save_env和list_env命令
1.4.19 loopback命令
1.4.20 normal和normal_exit命令
1.4.21 password和password_pbkdf2命令
1.5 几个常设置的内置变量
1.5.1 chosen变量
1.5.2 cmdpath变量
1.5.3 default变量
1.5.4 timeout变量
1.5.5 fallback变量
1.5.6 grub_platform变量
1.5.7 prefix变量
1.5.8 root变量
1.6 grub配置和安装示例
1.7 传统grub简述
1.7.1 grub安装
1.7.2 grub.conf配置

grub2 の詳細な紹介

Jun 30, 2017 pm 03:40 PM
正式 きちんとした

grub2公式マニュアルの大部分を翻訳し、それを自分で整理しました。内容がやや複雑なため、章立てがあまり合理的ではないかもしれませんが、ご了承ください。


この記事のディレクトリ:

1.1 基本コンテンツ

1.2 grub2をインストールする

1.3 grub 2 設定ファイル

1.4 コマンドラインとメニュー項目

1.5 のコマンド いくつかの一般的な組み込み変数

1.6 grub の設定とインストールの例

1.7 従来の grub の簡単な紹介


これこの記事では主に grub2 について紹介します。記事の最後に従来の grub について簡単に説明しますが、grub2 の内容には grub2 と従来の grub の比較が多く含まれています。

grub2 の boot.img/core.img/diskboot.img/kernel.img または従来の grub の stage1/stage1_5/stage2 ファイルの役割だけを知りたい場合は、 関連のページに直接ジャンプしてください。コンテンツ 読んでください。


1.1 基本的な内容

1.1.1 grub2 と grub の違い

公式マニュアル原文:

いくつかの主要なもののみを説明します:

1.設定ファイルが変更されました。 grub では、設定ファイルは grub.conf または menu.lst (grub.conf へのソフト リンク) であり、grub2 では grub.cfg に名前変更されます。

2.grub2 は、変数、条件判断、ループのサポートなど、スクリプト言語に近い構文を多数追加します。

3. grub2ではデバイス名は1から始まりますが、grubでは0から始まります。

4.grub2 は img ファイルを使用し、grub で stage1、stage1.5、および stage2 を使用しなくなりました。

5. grub を設定するためのグラフィカル インターフェイスをサポートしますが、epel ソースによって提供される grub-customizer パッケージをインストールする必要があります。

6. オペレーティング システム環境に入ると、grub コマンドは提供されなくなります。つまり、grub 対話型インターフェイスに入ることができなくなります。これは大きな欠点です。

7. grub2 には便利な find コマンドがありません。これも大きな欠点です。命1.1.2 命名規則とファイルパス表現

公式マニュアル原文:

R

(fd0)           :表示第一块软盘
(hd0,msdos2)    :表示第一块硬盘的第二个mbr分区。grub2中分区从1开始编号,传统的grub是从0开始编号的
(hd0,msdos5)    :表示第一块硬盘的第一个逻辑分区
(hd0,gpt1)      :表示第一块硬盘的第一个gpt分区/boot/vmlinuz   :相对路径,基于根目录,表示根目录下的boot目录下的vmlinuz,
                :如果设置了根目录变量root为(hd0,msdos1),则表示(hd0,msdos1)/boot/vmlinuz
(hd0,msdos1)/boot/vmlinuz:绝对路径,表示第一硬盘第一分区的boot目录下的vmlinuz文件
ログイン後にコピー
E
1.1.3 GRUB2ガイダンスオペレーティングシステムメソッド

公式マニュアル原文:

Grub2のサポート2オペレーティング システムをブートする方法:

    ダイレクト ブート: (direct-load) デフォルトの grub2 ブート ローダーを通じて、デフォルト設定ファイルに書き込まれたオペレーティング システムを直接ブートします。
  • チェーン ブート: (chain-load)デフォルトの grub2 ブート ローダーは、別のブート ローダーをチェーン ブートします。通常、2 番目の方法は、grub がサポートしていないオペレーティング システムをブートする場合にのみ使用されます。デフォルトの方法。
  • 1.1.4 grub2 プログラムと従来の grub プログラムのインストール後のファイル配布

  • 従来の grub ソフトウェアがインストールされると、いくつかのステージ ファイルが /usr/share/grub/RELEASE/ ディレクトリに生成されます。

[root@xuexi ~]# ls /usr/share/grub/x86_64-redhat/e2fs_stage1_5      ffs_stage1_5       jfs_stage1_5       reiserfs_stage1_5  stage2             ufs2_stage1_5      xfs_stage1_5
fat_stage1_5       iso9660_stage1_5   minix_stage1_5     stage1             stage2_eltorito    vstafs_stage1_5
ログイン後にコピー

grub2 ソフトウェアがインストールされると、いくつかの lst リスト ファイルを含む多くのモジュール ファイルと img ファイルが /usr/lib/grub/i386-pc/ ディレクトリに生成されます。

りー

1.1.5 boot loader和grub的关系

当使用grub来管理启动菜单时,那么boot loader都是grub程序安装的。

传统的grub将stage1转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将stage1_5转换后的内容安装在紧跟在MBR后的扇区中,将stage2转换后的内容安装在/boot分区中。

grub2将boot.img转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会嵌入一些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的指定位置处。

它们之间更具体的关系见下文。

1.1.6 grub2的安装位置

官方手册原文:

严格地说是core.img的安装位置,因为boot.img的位置是固定在MBR或VBR或EBR上的。

(1).MBR

MBR格式的分区表用于PC BIOS平台,这种格式允许四个主分区和额外的逻辑分区。使用这种格式的分区表,有两种方式安装GURB:

  1. 嵌入到MBR和第一个分区中间的空间,这部分就是大众所称的"boot track","MBR gap"或"embedding area",它们大致需要31kB的空间;

  2. 将core.img安装到某个文件系统中,然后使用分区的第一个扇区(严格地说不是第一个扇区,而是第一个block)存储启动它的代码。

这两种方法有不同的问题。

使用嵌入的方式安装grub,就没有保留的空闲空间来保证安全性,例如有些专门的软件就是使用这段空间来实现许可限制的;另外分区的时候,虽然会在MBR和第一个分区中间留下空闲空间,但可能留下的空间会比这更小。

方法二安装grub到文件系统,但这样的grub是脆弱的。例如,文件系统的某些特性需要做尾部包装,甚至某些fsck检测,它们可能会移动这些block。

GRUB开发团队建议将GRUB嵌入到MBR和第一个分区之间,除非有特殊需求,但仍必须要保证第一个分区至少是从第31kB(第63个扇区)之后才开始创建的。

现在的磁盘设备,一般都会有分区边界对齐的性能优化提醒,所以第一个分区可能会自动从第1MB处开始创建。

(2).GPT

一些新的系统使用GUID分区表(GPT)格式,这种格式是EFI固件所指定的一部分。但如果操作系统支持的话,GPT也可以用于BIOS平台(即MBR风格结合GPT格式的磁盘),使用这种格式,需要使用独立的BIOS boot分区来保存GRUB,GRUB被嵌入到此分区,不会有任何风险。

当在gpt磁盘上创建一个BIOS boot分区时,需要保证两件事:(1)它最小是31kB大小,但一般都会为此分区划分1MB的空间用于可扩展性;(2)必须要有合理的分区类型标识(flag type)。

例如使用gun parted工具时,可以设置为bios_grub标识:

# parted /dev/sda toggle partition_num bios_grub
# parted /dev/sda set partiton_num bios_grub on
ログイン後にコピー

如果使用gdisk分区工具时,则分类类型设置为"EF02"。

如果使用其他的分区工具,可能需要指定guid,则可以指定其guid为"21686148-6449-6e6f-744e656564454649"。

下图是某个bios/gpt格式的bios boot分区信息,从中可见,它大小为1M,没有文件系统,分区表示为bios_grub。

下图为gpt磁盘在图形界面下安装操作系统时创建的Bios boot分区。

1.1.7 进入grub命令行

在传统的grub上,可以直接在bash下敲入grub命令进入命令交互模式,但grub2只能在系统启动前进入grub交互命令行。

按下e见可以编辑所选菜单对应的grub菜单配置项,按下c键可以进入grub命令行交互模式。


1.2 安装grub2

官方手册原文:

这里的安装指的不是安装grub程序,而是安装Boot loader,但一般都称之为安装grub,且后文都是这个意思。

1.2.1 grub安装命令

安装方式非常简单,只需调用grub2-install,然后给定安装到的设备名即可。

shell> grub2-install /dev/sda
ログイン後にコピー
ログイン後にコピー

这样的安装方式,默认会将img文件放入到/boot目录下,如果想自定义放置位置,则使用--boot-directory选项指定,可用于测试练习grub的时候使用,但在真实的grub环境下不建议做任何改动。

shell> grub2-install --boot-director=/mnt/boot /dev/fd0
ログイン後にコピー

如果是EFI固件平台,则必须挂载好efi系统分区,一般会挂在/boot/efi下,这是默认的,此时可直接使用grub2-install安装。

shell> grub2-install
ログイン後にコピー

如果不是挂载在/boot/efi下,则使用--efi-directory指定efi系统分区路径。

shell> grub2-install --efi-directory=/mnt/efi
ログイン後にコピー

grub2-install は実際には他のツールを呼び出すために使用されるシェル スクリプトであり、実際の機能は他のツールによって実行されるため、grub の内部コマンドとメカニズムに精通している場合は、grub2-install はまったく必要ありません。

対応する従来の grub インストール コマンドは grub-install で、その使用法は grub2-install と同じです。


1.2.2 各種 img および stage ファイルの説明

公式マニュアル原文:

Img ファイルは grub2 によって生成され、stage ファイルは従来の grub によって生成されます。以下に、さまざまなファイルの説明を示します。 grub2 の

1.2.2.1 img ファイル

grub2 はいくつかの img ファイルを生成し、一部は /usr/lib/grub/i386-pc ディレクトリに配布され、一部は /boot/grub2/i386-pc ディレクトリに配布されます。以下をお読みいただくと、両者の関係が理解できると思います。

次の図は、さまざまな img ファイル間の関係を示しています。このうち、core.img は動的に生成され、パスは /boot/grub2/i386-pc/core.img ですが、他の img は /usr/lib/grub/i386-pc ディレクトリに存在します。もちろん、grub をインストールすると、boot.img は /boot/grub2/i386-pc ディレクトリにコピーされます。

(1)boot.img

BIOS プラットフォームでは、boot.img は grub によって開始される最初の img ファイルで、ブートのサイズにより MBR またはパーティションのブート セクターに書き込まれます。セクターは 512 バイトなので、img ファイルのサイズも 512 バイトになります。

boot.img の唯一の機能は、core.img に属する最初のセクターを読み取り、そこにジャンプし、そのセクターの img に制御を与えることです。サイズ制限により、boot.img はファイル システムの構造を理解できないため、grub2-install は core.img の場所を boot.img にハードコーディングして、core.img の場所を見つけられるようにします。

(2)core.img

core.img は、diskboot.img、kernel.img、および一連のモジュールに基づいて grub2-mkimage プログラムによって動的に作成されます。 core.img には、grub が /boot/grub にアクセスできるようにするために十分な機能モジュールが埋め込まれており、関連するモジュールをロードして、ブート メニューのロード、ターゲット オペレーティング システムに関する情報のロードなどの関連機能を実装できます。 grub2 が広く使用されています。 動的関数モジュールにより、core.img のサイズが十分に小さくなります。

core.img には、diskboot.img/kernel.img などを含む複数の img ファイルの内容が含まれています。

core.img のインストール場所は、MBR ディスクと GPT ディスクによって異なります。これについては上で説明しました。

(3)diskboot.img

ブートデバイスがハードディスクの場合、つまりハードディスクからブートする場合、core.imgの最初のセクターの内容はdiskboot.imgになります。 discboo.img の機能は、core.img の残りの部分をメモリに読み取り、制御を kernel.img に転送することです。この時点ではファイル システムが認識されないため、core.img のすべての場所がブロック リストにリストされます。 diskboot.img が残りのコンテンツを見つけられるような方法でエンコードされます。

imgファイルは1セクターを占有するため、サイズは512バイトです。

(4)cdboot.img

ブートデバイスが CD-ROM ドライブの場合、つまり CD-ROM ドライブからブートする場合、core.img の最初のセクターの内容は cdboo.img です。機能はdiskboot.imgと同じです。

(5)pexboot.img

ネットワークのPXE環境から起動する場合、core.imgの最初のセクターの内容はpxeboot.imgになります。

(6)kernel.img

kernel.img ファイルには、デバイス フレームワーク、ファイル ハンドル、環境変数、レスキュー モードのコマンド ライン パーサーなど、grub の基本的なランタイム環境が含まれています。これらは core.img に完全に埋め込まれているため、直接使用されることはほとんどありません。 kernel.img は grub のカーネルであり、オペレーティング システムのカーネルとは関係がないことに注意してください。

注意して見ると、kernel.img 自体は 28 KB のスペースを占有しますが、core.img に埋め込まれた後の core.img ファイルのサイズはわずか 26 KB であることがわかります。これは、core.img 内の kernel.img が圧縮されているためです。

(7)lnxboot.img

imgファイルをcore.imgの先頭に配置して、Linuxカーネルのようにgrubを作り、LILOの「image=」でcore.imgを認識できるようにしています。もちろんLILOと併用しますが、今でもLILOを使っている人はいるでしょうか?

(8)*.mod

さまざまな機能モジュール。その一部は core.img に埋め込まれているか、grub によって自動的にロードされますが、場合によっては insmod コマンドを使用して手動でロードする必要もあります。

1.2.2.2 传统grub中的stage文件

grub2的设计方式和传统grub大不相同,因此和stage之间的对比关系其实没那么标准,但是将它们拿来比较也有助于理解img和stage文件的作用。

stage文件也分布在两个地方:/usr/share/grub/RELEASE目录下和/boot/grub目录下,/boot/grub目录下的stage文件是安装grub时从/usr/share/grub/RELEASE目录下拷贝过来的。

(1)stage1

stage1文件在功能上等价于boot.img文件。目的是跳转到stage1_5或stage2的第一个扇区上。

(2)*_stage1_5

*stage1_5文件包含了各种识别文件系统的代码,使得grub可以从文件系统中读取体积更大功能更复杂的stage2文件。从这一方面考虑,它类似于core.img中加载对应文件系统模块的代码部分,但是core.img的功能远比stage1_5多。

stage1_5一般安装在MBR后、第一个分区前的那段空闲空间中,也就是MBR gap空间,它的作用是跳转到stage2的第一个扇区。

其实传统的grub在某些环境下是可以不用stage1_5文件就能正常运行的,但是grub2则不能缺少core.img。

(3)stage2

stage2的作用是加载各种环境和加载内核,在grub2中没有完全与之相对应的img文件,但是core.img中包含了stage2的所有功能。

当跳转到stage2的第一个扇区后,该扇区的代码负责加载stage2剩余的内容。

注意,stage2是存放在磁盘上的,并没有像core.img一样嵌入到磁盘上。

(4)stage2_eltorito

功能上等价于grub2中的core.img中的cdboot.img部分。一般在制作救援模式的grub时才会使用到cd-rom相关文件。

(5)pxegrub

功能上等价于grub2中的core.img中的pxeboot.img部分。

1.2.3 安装grub涉及的过程

安装grub2的过程大体分两步:一是根据/usr/lib/grub/i386-pc/目录下的文件生成core.img,并拷贝boot.img和core.img涉及的某些模块文件到/boot/grub2/i386-pc/目录下;二是根据/boot/grub2/i386-pc目录下的文件向磁盘上写boot loader。

当然,到底是先拷贝,还是先写boot loader,没必要去搞清楚,只要/boot/grub2/i386-pc下的img文件一定能通过grub2相关程序再次生成boot loader。所以,既可以认为/boot/grub2/i386-pc目录下的img文件是boot loader的特殊备份文件,也可以认为是boot loader的源文件。

不过,img文件和boot loader的内容是不一致的,因为img文件还要通过grub2相关程序来转换才是真正的boot loader。

对于传统的grub而言,拷贝的不是img文件,而是stage文件。

以下是安装传统grub时,grub做的工作。很不幸,grub2上没有该命令,也没有与之等价的命令。

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
ログイン後にコピー

首先检测各stage文件是否存在于/boot/grub目录下,随后嵌入stage1_5到磁盘上,该文件系统类型的stage1_5占用了15个扇区,最后安装stage1,并告知stage1 stage1_5的位置是第1到第15个扇区,之所以先嵌入stage1_5再嵌入stage1就是为了让stage1知道stage1_5的位置,最后还告知了stage1 stage2和配置文件menu.lst的路径。


1.3 grub2配置文件

grub2的默认配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性非常大,但绝大多数需要修改该配置文件时,都只需修改其中一小部分内容就可以达成目标。

grub2-mkconfig程序可用来生成符合绝大多数情况的grub.cfg文件,默认它会自动尝试探测有效的操作系统内核,并生成对应的操作系统菜单项。使用方法非常简单,只需一个选项"-o"指定输出文件即可。

shell> grub2-mkconfig -o /boot/grub2/grub.cfg
ログイン後にコピー

1.3.1 通过/etc/default/grub文件生成grub.cfg

官方手册原文:

grub2-mkconfig是根据/etc/default/grub文件来创建配置文件的该文件中定义的是grub的全局宏,修改内置的宏可以快速生成grub配置文件。实际上在/etc/grub.d/目录下还有一些grub配置脚本,这些shell脚本读取一些脚本配置文件(如/etc/default/grub),根据指定的逻辑生成grub配置文件。若有兴趣,不放读一读/etc/grub.d/10_linux文件,它指导了创建grub.cfg的细节,例如如何生成启动菜单。

[root@xuexi ~]# ls /etc/grub.d/00_header  00_tuned  01_users  10_linux  20_linux_xen  20_ppc_terminfo  30_os-prober  40_custom  41_custom  README
ログイン後にコピー

在/etc/default/grub中,使用"key=vaule"的格式,key全部为大小字母,如果vaule部分包含了空格或其他特殊字符,则需要使用引号包围。

例如,下面是一个/etc/default/grub文件的示例:

[root@xuexi ~]# cat /etc/default/grubGRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet"GRUB_DISABLE_RECOVERY="true"
ログイン後にコピー

虽然可用的宏较多,但可能用的上的就几个:GRUB_DEFAULT、GRUB_TIMEOUT、GRUB_CMDLINE_LINUX和GRUB_CMDLINE_LINUX_DEFAULT。

以下列出了部分key。

(1).GRUB_DEFAULT

默认的菜单项,默认值为0。其值可为数值N,表示从0开始计算的第N项是默认菜单,也可以指定对应的title表示该项为默认的菜单项。使用数值比较好,因为使用的title可能包含了容易改变的设备名。例如有如下菜单项:

menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
    ...
}
ログイン後にコピー

如果想将此菜单设为默认菜单,则可设置"GRUB_DEFAULT=example-gnu-linux"。

如果GRUB_DEFAULT的值设置为"saved",则表示默认的菜单项是"GRUB_SAVEDEFAULT"或"grub-set-default"所指定的菜单项。

(2).GRUB_SAVEDEFAULT

默认该key的值未设置。如果该key的值设置为true时,如果选定了某菜单项,则该菜单项将被认为是新的默认菜单项。该key只有在设置了"GRUB_DEFAULT=saved"时才有效。

不建议使用该key,因为GRUB_DEFAULT配合grub-set-default更方便。

(3).GRUB_TIMEOUT

在开机选择菜单项的超时时间,超过该时间将使用默认的菜单项来引导对应的操作系统。默认值为5秒。等待过程中,按下任意按键都可以中断等待。

设置为0时,将不列出菜单直接使用默认的菜单项引导与之对应的操作系统,设置为"-1"时将永久等待选择。

是否显示菜单,和"GRUB_TIMEOUT_STYLE"的设置有关。

(4).GRUB_TIMEOUT_STYLE

如果该key未设置值或者设置的值为"menu",则列出启动菜单项,并等待"GRUB_TIMEOUT"指定的超时时间。

如果设置为"countdown"和"hidden",则不显示启动菜单项,而是直接等待"GRUB_TIMEOUT"指定的超时时间,如果超时了则启动默认菜单项并引导对应的操作系统。在等待过程中,按下"ESC"键可以列出启动菜单。设置为countdown和hidden的区别是countdown会显示超时时间的剩余时间,而hidden则完全隐藏超时时间。

(5).GRUB_DISTRIBUTOR

设置发行版的标识名称,一般该名称用来作为菜单的一部分,以便区分不同的操作系统。

(6).GRUB_CMDLINE_LINUX

添加到菜单中的内核启动参数。例如:

GRUB_CMDLINE_LINUX="crashkernel=ro root=/dev/sda3 biosdevname=0 net.ifnames=0 rhgb quiet"

(7).GRUB_CMDLINE_LINUX_DEFAULT

除非"GRUB_DISABLE_RECOVERY"设置为"true",否则该key指定的默认内核启动参数将生成两份,一份是用于默认启动参数,一份用于恢复模式(recovery mode)的启动参数。

该key生成的默认内核启动参数将添加在"GRUB_CMDLINE_LINUX"所指定的启动参数之后。

(8).GRUB_DISABLE_RECOVERY

该项设置为true时,将不会生成恢复模式的菜单项。

(9).GRUB_DISABLE_LINUX_UUID

默认情况下,grub2-mkconfig在生产菜单项的时候将使用uuid来标识Linux 内核的根文件系统,即"root=UUID=..."。

例如,下面是/boot/grub2/grub.cfg中某菜单项的部分内容。

menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8' {

......

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto biosdevname=0 net.ifnames=0 quiet LANG=en_US.UTF-8

initrd16 /initramfs-3.10.0-327.el7.x86_64.img

}

虽然使用UUID的方式更可靠,但有时候不太方便,所以可以设置该key为true来禁用。

(10).GRUB_BACKGROUND

背景画像を設定します。画像ファイル名のサフィックスは、必要に応じて縮小されます。画像を画面サイズに合わせて調整します。

(11).GRUB_THEME

grubメニューのテーマを設定します。

(12).GRUB_GFXPAYLOAD_LINUX

「text」に設定すると、Linux は強制的にテキスト モードで起動します。場合によっては、グラフィックス モードがサポートされていない可能性があります。

(13).GRUB_DISABLE_OS_PROBER

デフォルトでは、grub2-mkconfig は os-prober プログラム (既にインストールされている場合は、デフォルトでインストールする必要があります) を使用して、他の利用可能なオペレーティング システム カーネルを検出し、対応するスタートアップを生成しようとします。それらのメニュー項目。自動検出を無効にするには、「true」に設定します。

(14).GRUB_DISABLE_SUBMENU

デフォルトでは、grub2-mkconfig が同じバージョンまたはそれ以下のバージョンの複数のカーネルを検出した場合、カーネルの最上位バージョンのトップレベル メニューのみが生成され、その他すべての下位バージョンは生成されます。カーネル メニューが生成され、サブメニューに配置されます。すべてをトップレベル メニューとして生成するには、「y」に設定します。

(15).GRUB_HIDDEN_TIMEOUT (非推奨ですが、下位互換性のためにまだ有効です)

代わりに「GRUB_TIMEOUT_STYLE={countdown|hidden}」を使用してください

(16).GRUB_HIDDEN_TIMEOUT_QUIET (非推奨ですが、下位互換性のためにまだ有効です) 互換性があり、まだ有効です有効)

GRUB_HIDDEN_TIMEOUT とともに使用すると、GRUB_TIMEOUT_STYLE=countdown を使用してこれら 2 つの項目を置き換えることができます。

1.3.2 grub.cfgファイルをスクリプト内に直接記述する

公式マニュアル原文:

  • コメント文字: #で始まる文字はコメントとみなされ、grubはインラインコメントをサポートします

  • 接続演算子: { } | & $ ; < >

  • 予約済みのキーワードと記号: ! [[ ]] { } 関数の場合は doned elif else esac fi if in menuentry select then time until while。 すべてのキーワードが役立つわけではなく、将来の機能拡張のために事前に提供されているだけです。

  • 引用符とエスケープ文字

特殊文字はエスケープする必要があります。エスケープするには、バックスラッシュを使用する方法、一重引用符を使用する方法、および二重引用符を使用する方法の 3 つがあります。

バックスラッシュのエスケープ方法はシェルと同じです。

一重引用符内のすべての文字列はリテラルであり、特別な意味はありません。一重引用符内のエスケープ文字も純粋な文字とみなされます。したがって、'''' は一重引用符を保持できません。シングルクォーテーションはダブルクォーテーションを使用して転送する必要があるため、「'」を記述する必要があります。

二重引用符は一重引用符と同じ効果がありますが、「$」や「」などの特定の特殊文字をエスケープすることはできません。二重引用符内の「$」記号は、常に元の意味を保持します。 "" の場合、バックスラッシュ以降の文字は、'$'、'"'、' のみです。また、行がバックスラッシュで終わる場合は、行継続を意味しますが、公式には推奨されていません。 grub.cfg の継続文字

  • 変数の拡張

変数を参照するには $ 記号を使用します。また、${var} を使用して var 変数を参照することもできます。たとえば、$1 は参照します。最初のパラメータ

は、最後のコマンドの終了ステータス コードを表す $? などの特殊変数もサポートします。位置変数が使用される場合、すべてのパラメータは次のようにサポートされます。 $@ もサポートされており、各パラメータは分割できません。$@ もすべての変数を表しますが、$@ の各パラメータは分割可能です。$# はパラメータの数を表します

    簡単なコマンド
  • を使用できます。 grub.cfg では単純なコマンドを使用します。各コマンドの間に改行またはセミコロンを使用してコマンドの終了を示します。コマンドの前に「!」を使用すると、単語の名前が反転されます。 ; 完了

ループ構造: while cond; do リスト; 完了

  • ;] … [else list;] fi

  • 関数構造: 関数名 { command; … }

  • メニュー項目コマンド: menuentry title [--class=class …] [- -users=users] [- -unrestricted] [--hotkey=key] [--id=id] { command; … }

  • これは grub.cfg の最も重要な項目です、公式原文:

    该命令定义了一个名为title的grub菜单项。当开机时选中该菜单项时,grub会将chosen环境变量的值赋给"--id"(如果给定了"--id"的话),执行大括号中的命令列表,如果直到最后一个命令都全部执行成功,且成功加载了对应的内核后,将执行boot命令。随后grub就将控制权交给了操作系统内核。

    --class:该选项用于将菜单分组,从而使得grub可以通过主题样式为不同组的菜单显示不同的样式风格。一个menuentry中,可以使用多次class表示将该菜单分到多个组中去。

    --users:该选项限定只有此处列出的用户才能访问该菜单项,不指定该选项时将表示所有用户都能访问该菜单。

    --unrestricted:该选项表示所有用户都有权访问该菜单项。

    --hotkey:该选项为该菜单项关联一个热键,也就是快捷键,关联热键后只要按下该键就会选中该菜单。热键只能是字母键、backspace键、tab键或del键。

    --id:该选项为该菜单关联一个唯一的数值。id的值可以由ASCII字母、数字//下划线组成,且不得以数字开头。

    所有其他的参数包括title都被当作位置参数传递给大括号中的命令,但title总是$1,除title外的其余参数,位置值从前向后类推。

    • break [n]:强制退出for/while/until循环

    • continue [n]:跳到下一次迭代,即进入下一次循环

    • return [n]:指定返回状态码

    • setparams [arg] …:从$1开始替换位置参数

    • shift [n]:踢掉前n个参数,使得第n+1个参数变为$1,但和shell中不一样的是,踢掉了前n个参数后,从$#-n+1到$#这些参数的位置不变

    具体如何编写grub.cfg文件,继续看下文的命令和变量。


    1.4 命令行和菜单项中的命令

    官方手册原文:

    grub2支持很多命令,有些命令只能在交互式命令行下使用,有些命令可用在配置文件中。在救援模式下,只有insmod、ls、set和unset命令可用。

    无需掌握所有的命令,掌握用的上的几个命令即可。

    1.4.1 help命令

    help [pattern]
    ログイン後にコピー

    显示能匹配到pattern的所有命令的说明信息和usage信息,如果不指定patttern,将显示所有命令的简短信息。

    例如"help cmos"。

    1.4.2 boot命令

    用于启动已加载的操作系统。

    只在交互式命令行下可用。其实在menuentry命令的结尾就隐含了boot命令。

    1.4.3 set和unset命令

    set [envvar=value]
    unset envvar
    ログイン後にコピー

    前者设置环境变量envvar的值,如果不给定参数,则列出当前环境变量。

    后者释放环境变量envvar。

    1.4.4 lsmod命令和insmod命令

    分别用于列出已加载的模块和调用指定的模块。

    注意,若要导入支持ext文件系统的模块时,只需导入ext2.mod即可,实际上也没有ext3和ext4对应的模块。

    1.4.5 linux和linux16命令

    linux file [kernel_args]
    linux16 file [kernel_args]
    ログイン後にコピー

    都表示装载指定的内核文件,并传递内核启动参数。linux16表示以传统的16位启动协议启动内核,linux表示以32位启动协议启动内核,但linux命令比linux16有一些限制。但绝大多数时候,它们是可以通用的。

    在linux或linux16命令之后,必须紧跟着使用init或init16命令装载init ramdisk文件。

    一般为/boot分区下的vmlinuz-RELEASE_NUM文件。

    但在grub环境下,boot分区被当作root分区,即根分区,假如boot分区为第一块磁盘的第一个分区,则应该写成:

    linux (hd0,msdos1)/vmlinuz-XXX

    或者相对路径的:

    set root='hd0,msdos1'

    linux /vmlinuz-XXX

    在grub阶段可以传递内核的启动参数(内核的参数包括3类:编译内核时参数,启动时参数和运行时参数),可以传递的启动参数非常非常多,完整的启动参数列表见:。这里只列出几个常用的:

    init=   :指定Linux启动的第一个进程init的替代程序。
    root=   :指定根文件系统所在分区,在grub中,该选项必须给定。
    ro,rw   :启动时,根分区以只读还是可读写方式挂载。不指定时默认为ro。
    initrd  :指定init ramdisk的路径。在grub中因为使用了initrd或initrd16命令,所以不需要指定该启动参数。
    rhgb    :以图形界面方式启动系统。
    quiet   :以文本方式启动系统,且禁止输出大多数的log message。
    net.ifnames=0:用于CentOS 7,禁止网络设备使用一致性命名方式。
    biosdevname=0:用于CentOS 7,也是禁止网络设备采用一致性命名方式。
                 :只有net.ifnames和biosdevname同时设置为0时,才能完全禁止一致性命名,得到eth0-N的设备名。
    ログイン後にコピー

    例如:

    linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro rhgb quiet LANG=en_US.UTF-8

    另外,root启动参数有多种定义方式,可以使用UUID的方式指定,也可以直接指定根文件系统所在分区,如"root=/dev/sda2",

    1.4.6 initrd和initrd16命令

    initrd file
    ログイン後にコピー

    只能紧跟在linux或linux16命令之后使用,用于为即将启动的内核传递init ramdisk路径。

    同样,基于根分区,可以使用绝对路径,也可以使用相对路径。路径的表示方法和linux或linux16命令相同。例如:

    linux16 /vmlinuz-0-rescue-d13bce5e247540a5b5886f2bf8aabb35 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet

    initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img

    1.4.7 search命令

    search [--file|--label|--fs-uuid] [--set [var]] [--no-floppy] [--hint args] name
    ログイン後にコピー

    ファイル [--file]、ボリューム ラベル [--label]、ファイル システム UUID [--fs-uuid] でデバイスを検索します。

    「--set」オプションを使用すると、最初に見つかったデバイスが環境変数「var」の値に設定されます。デフォルトの変数「var」は「root」です。

    フロッピー ディスクは非常に遅いため、検索時に「--no-floppy」オプションを使用してフロッピー ディスクの検索を無効にすることができます。

    「--hint=XXX」も指定される場合があります。これは、プロンプト条件を満たすデバイスが最初に選択されることを意味します。複数のヒント条件が指定されている場合、最初のヒントが最初に照合され、次に 2 番目のヒントが照合されます。の上。

    例:

    if [ x$feature_platform_search_hint = xy ]; then

    search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi = hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 367d6a77-033b-4037-bbcb-416705ead095

    else

    search --no-floppy --fs-uuid --set = root 367d6a77-033b-4037-bbcb-416705ead095

    fi

    linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 crashkernel=自動静音 LANG=en_US . UTF-8

    initrd16 /initramfs-3.10.0-327.el7.x86_64.img

    上記の if ステートメントの最初の検索では、uuid "367d6a77-033b-4037-bbcb-416705ead095" のデバイスが検索されます。ただし、複数のヒント オプションが使用されます。つまり、BIOS プラットフォームで /boot パーティションが (hd0、msdos1) であるデバイスが最初に照合され、次にいくつかのヒントが指定されます。ただし、検索では uuid 検索方法が使用されるため、これらのヒントは指定されません。はい、単一ディスク上のパーティションの uuid は一意であるため、ヒント オプションは冗長です。

    別の例として、ブート デバイス上に 2 つのブート パーティションがある場合 (複数のシステムが共存する場合など)、現時点で uuid 検索を使用しない場合、それらは (hd0, msdos1) と (hd0, msdos5) になります。ただし、ラベル モード検索を使用します:

    search --no-floppy --fs-label=boot --set=root --hint=hd0,msdos5

    その後、ブート パーティション (hd0,msdos5) が選択されます。今回はヒントを使用しない場合、ブート パーティション (hd0、msdos1) が選択されます。

    1.4.8 true および false コマンド

    は、true または false のブール値を直接返します。

    1.4.9 式と[式]をテストします

    「式」の結果が true かどうかを計算し、true の場合は 0 を返し、それ以外の場合は 0 以外を返します。主に if、while、または until 構造で使用されます。

    integer1 -eq integer2integer1 -ge integer2integer1 -gt integer2integer1 -le integer2integer1 -lt integer2integer1 -ne integer2prefixinteger1 -pgt prefixinteger2prefixinteger1 -plt prefixinteger2

    string1 == string2

    string1はstring2と同じです

    string1 != string2

    string1 と string2 は同じではありません

    string1 < string2

    string1 は string2 よりもアルファベット順に小さいです

    string1 <= string2

    string1 はアルファベット順です。以下ですstring2

    string1 > string2 string1 はアルファベット順で string2 以上です

    integer1 は integer2 と等しい

    integer1 は integer2 以上です

    integer1 は integer2 より大きいです

    integer1 は integer2 以下です

    integer1 は integer2 より小さいです

    integer1 は integer2 と等しくありません

    非を削除する 数値文字列のプレフィックス部分の後、integer1 が次より大きいinteger2

    数値以外の文字列のプレフィックス部分を削除すると、integer1 は integer2 より小さくなります

    file1 -nt file2

    file1 の変更時刻は file2 より新しいです

    file1 -ot file2

    file1 の変更時刻は file2 より古いです

    -d file

    ファイルが存在し、ディレクトリです

    -e file

    ファイルが存在します

    -f file

    ファイルは存在しますが、ディレクトリではありません

    -sファイル

    ファイルが存在し、ファイルの占有スペースがゼロより大きい

    -n 文字列

    文字列の長さがゼロより大きい

    string

    string の長さはゼロより大きく、これは -n string の長さ

    -z string

    string がゼロに等しい

    (expression)

    expression 全体

    ! 式 1 式 2 を使用しますが、推奨されません

    式 1 -o 式 2

    または (OR)

    1.4.10 cat命令

    读取文件内容,借此可以帮助判断哪个是boot分区,哪个是根分区。

    交互式命令行下使用。

    1.4.11 clear命令

    清屏。

    1.4.12 configfile命令

    立即装载一个指定的文件作为grub的配置文件。但注意,导入的文件中的环境变量不在当前生效。

    在grub.cfg丢失时,该命令将排上用场。

    1.4.13 echo命令

    echo [-n] [-e] string
    ログイン後にコピー

    "-n"和"-e"用法同shell中echo。如果要引用变量,使用${var}的方式。

    1.4.14 export命令

    导出环境变量,若在configfile的file中导出环境变量,将会在当前环境也生效。

    1.4.15 halt和reboot命令

    关机或重启

    1.4.16 ls命令

    ls [args]
    ログイン後にコピー

    如果不给定任何参数,则列出grub可见的设备。

    如果给定的参数是一个分区,则显示该分区的文件系统信息。

    如果给定的参数是一个绝对路径表示的目录,则显示该目录下的所有文件。

    例如:

    1.4.17 probe命令

    probe [--set var] --partmap|--fs|--fs-uuid|--label device
    ログイン後にコピー

    探测分区或磁盘的属性信息。如果未指定--set,则显示指定设备对应的信息。如果指定了--set,则将对应信息的值赋给变量var。

    --partmap:显示是gpt还是mbr格式的磁盘。

    --fs:显示分区的文件系统。

    --fs-uuid:显示分区的uuid值。

    --label:显示分区的label值。

    1.4.18 save_env和list_env命令

    将环境变量保存到环境变量块中,以及列出当前的环境变量块中的变量。

    1.4.19 loopback命令

    loopback [-d] device file
    ログイン後にコピー

    将file映射为回环设备。使用-d选项则是删除映射。

    例如:

    loopback loop0 /path/to/imagels (loop0)/
    ログイン後にコピー

    1.4.20 normal和normal_exit命令

    进入和退出normal模式,normal是相对于救援模式而言的,只要不是在救援模式下,就是在normal模式下。

    救援模式下,只能使用非常少的命令,而normal模式下则可以使用非常多的命令。

    1.4.21 password和password_pbkdf2命令

    password user clear-password
    password_pbkdf2 user hashed-password
    ログイン後にコピー

    前者使用明文密码定义一个名为user的用户。不建议使用此命令。

    后者使用哈希加密后的密码定义一个名为user的用户,加密的密码通过"grub-mkpasswd-pbkdf2"工具生成。建议使用该命令。


    1.5 几个常设置的内置变量

    1.5.1 chosen变量

    当开机时选中某个菜单项启动时,该菜单的title将被赋值给chosen变量。该变量一般只用于引用,而不用于修改。

    1.5.2 cmdpath变量

    grub2加载的core.img的目录路径,是绝对路径,即包括了设备名的路径,如(hd0,gpt1)/boot/grub2/。该变量值不应该修改。

    1.5.3 default变量

    指定默认的菜单项,一般其后都会跟随timeout变量。

    default指定默认菜单时,可使用菜单的title,也可以使用菜单的id,或者数值顺序,当使用数值顺序指定default时,从0开始计算。

    1.5.4 timeout变量

    设置菜单等待超时时间,设置为0时将直接启动默认菜单项而不显示菜单,设置为"-1"时将永久等待手动选择。

    1.5.5 fallback变量

    当默认菜单项启动失败,则使用该变量指定的菜单项启动,指定方式同default,可使用数值(从0开始计算)、title或id指定。

    1.5.6 grub_platform变量

    指定该平台是"pc"还是"efi",pc表示的就是传统的bios平台。

    该变量不应该被修改,而应该被引用,例如用于if判断语句中。

    1.5.7 prefix变量

    在grub启动的时候,grub自动将/boot/grub2目录的绝对路径赋值给该变量,使得以后可以直接从该变量所代表的目录下加载各文件或模块。

    例如,可能自动设置为:

    set prefix = (hd0,gpt1)/boot/grub2/

    所以可以使用"$prefix/grubN.cfg"来引用/boot/grub2/grubN.cfg文件。

    该变量不应该修改,且若手动设置,则必须设置正确,否则牵一发而动全身。

    1.5.8 root变量

    该变量指定根设备的名称,使得后续使用从"/"开始的相对路径引用文件时将从该root变量指定的路径开始。一般该变量是grub启动的时候由grub根据prefix变量设置而来的。

    例如prefix=(hd0,gpt1)/boot/grub2,则root=(hd0,gpt1),后续就可以使用相对路径/vmlinuz-XXX表示(hd0,gpt1)/vmlinuz-XXX文件。

    注意:在Linux中,从根"/"开始的路径表示绝对路径,如/etc/fstab。但grub中,从"/"开始的表示相对路径,其相对的基准是root变量设置的值,而使用"(dev_name)/"开始的路径才表示绝对路径。

    一般root变量都表示/boot所在的分区,但这不是绝对的,如果设置为根文件系统所在分区,如root=(hd0,gpt2),则后续可以使用/etc/fstab来引用"(hd0,gpt2)/etc/fstab"文件。

    该变量在grub2中一般不用修改,但若修改则必须指定正确。

    另外,root变量还应该于linux或linux16命令所指定的内核启动参数"root="区分开来,内核启动参数中的"root="的意义是固定的,其指定的是根文件系统所在分区。例如:

    set root='hd0,msdos1'

    linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet LANG=en_US.UTF-8

    initrd16 /initramfs-3.10.0-327.el7.x86_64.img

    一般情况下,/boot都会单独分区,所以root变量指定的根设备和root启动参数所指定的根分区不是同一个分区,除非/boot不是单独的分区,而是在根分区下的一个目录。


    1.6 grub配置和安装示例

    首先写一个grub.cfg。例如此处,在msdos磁盘上安装了两个操作系统,CentOS 7和CentOS 6。

    # 设置一些全局环境变量
    set default=0set fallback=1set timeout=3# 将可能使用到的模块一次性装载完
    # 支持msdos的模块insmod part_msdos
    # 支持各种文件系统的模块insmod exfatinsmod ext2insmod xfsinsmod fatinsmod iso9660
    
    # 定义菜单
    menuentry &#39;CentOS 7&#39; --unrestricted {
            search --no-floppy --fs-uuid --set=root 367d6a77-033b-4037-bbcb-416705ead095
            linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro biosdevname=0 net.ifnames=0 quiet
            initrd16 /initramfs-3.10.0-327.el7.x86_64.img
    }
    menuentry &#39;CentOS 6&#39; --unrestricted {
            search --no-floppy --fs-uuid --set=root f5d8939c-4a04-4f47-a1bc-1b8cbabc4d32
            linux16 /vmlinuz-2.6.32-504.el6.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro quiet
            initrd16 /initramfs-2.6.32-504.el6.x86_64.img
    }
    ログイン後にコピー

    然后执行grub安装操作。

    shell> grub2-install /dev/sda
    ログイン後にコピー
    ログイン後にコピー


    1.7 传统grub简述

    因为本文主要介绍grub2,所以传统的grub只简单介绍下,其实前面已经提及了很多传统grub和grub2的比较了。另外,传统grub已足够强大,足够应付一般的需求。

    1.7.1 grub安装

    例如安装到/dev/sda上。

    shell> grub-install /dev/sda
    ログイン後にコピー

    1.7.2 grub.conf配置

    default=0  # 默认启动第一个系统
    timeout=5  # 等待超时时间5秒
    splashimage=(hd0,0)/grub/splash.xpm.gz  # 背景图片
    hiddenmenu  # 隐藏菜单,若要显式,在启动时按下ESC
    title Red Hat Enterprise Linux AS (2.6.18-92.el5)  # 定义操作系统的说明信息
        root (hd0,0) 
        kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/sda2 rhgb quiet
        initrd /initrd-2.6.18-92.el5.img
    ログイン後にコピー

    構成方法を説明する前に、重要なポイントを説明する必要があります。それは、ブートが独立したパーティションであるかどうかであり、これは後続のパスの構成に影響します。

    通常のオペレーティング システムで /boot/grub/grub.conf ファイルを確認します。「通知」セクションに、独立したブート パーティションがあるかどうかを示すプロンプトが表示されます。存在する場合、/vmlinuz-xxx のように、カーネルと initrd のパスが /boot ではなく / から始まることを意味します。独立したブート パーティションがない場合は、カーネルと initrd のパスにブート パスを指定する必要があります。たとえば、ブートには / ファイル システムの下のディレクトリ、次に /boot/vmlinuz-xxx はありません。

    root (hd0,0) は、grub によって認識されるルートを定義します。通常、grub は hd のみを認識できるため、hd0 のみが最初のディスクにあることを意味します。hd0,0 の 2 番目の 0 は、最初のパーティションにあることを意味します。 grub2 パーティションの計算は 1 から始まり、これが従来の grub と grub2 の違いです。

    kernel は、カーネル ファイルのパスと起動パラメータを定義します。これは、grub2 linux コマンドまたは linux16 コマンドに相当します。まずパラメータについて説明します。ro は読み取り専用を意味します。root=/dev/sda[N] または root=UUID="device_uuid_num" は、ルート ファイル システムが配置されているパーティションを指定します。 rhgb は、オペレーティング システムの起動プロセス中にいくつかの情報を出力するためにグラフィカル インターフェイスを使用することを意味し、これを省略すると、オペレーティング システムの起動時に情報を静かに出力することを意味します。パスについてもう一度説明します。ブートが独立したパーティションの場合、カーネル パスは /vmlinuz-xxx として定義されます。独立したパーティションがない場合は、通常、ルート ファイル システムの下のディレクトリになります。通常は /boot/vmlinuz-xxx です。

    initrd は init RAMdisk のパスを定義します。パスはカーネルと同じ方法で定義されます。パス以外のパラメータはありません。

    または、以下に示すように UUID メソッドを使用します。

    root= オプションが指定されていない場合、「no or empty root...dracut...kernel pain」というエラーが報告されます。以下に示すように。

    以上がgrub2 の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Win10 でデスクトップ アイコンを整理するためのヒント Win10 でデスクトップ アイコンを整理するためのヒント Dec 27, 2023 pm 05:00 PM

    コンピューターを使用する友達は皆、デスクトップをきれいに整理したいと思っていますが、Win10 システムでの操作方法がわかりません。今日は、Win10 でデスクトップアイコンを整理する方法を紹介します。 Windows 10 でデスクトップ アイコンを整理する方法: 1. デスクトップの空白スペースを右クリックし、上部の [表示] をクリックします。 2. 右側のウィンドウには「アイコンを自動配置する」などの機能が表示されます。 3. 必要に応じてアイコンを配置できるように、「アイコンを自動的に配置する」にはチェックを入れません。 4. また、これらすべてのオプションを選択することもできますが、これでは自分の個性を表現することはできません。

    win7公式究極版のダウンロードとインストールのデモ win7公式究極版のダウンロードとインストールのデモ Jul 20, 2023 pm 04:17 PM

    win7 システムには多くのバージョンがあり、インストールされたバージョン、gho バージョン、オリジナル バージョン、その他のシステムをオンラインで見つけることができます。一部のネチズンは、公式の win7 究極バージョン システムをダウンロードしてインストールしたいと考えていますが、win7 をダウンロードしてインストールする方法がわかりません。実際、ワンクリック システム再インストール ツールを使用して、公式のオリジナル win7 Ultimate バージョン システムをすばやくインストールし、純正キーを使用してアクティベートして使用すると、正規のシステムになります。以下のエディタでは、公式 win7 Ultimate バージョンの簡単なダウンロードとインストールのチュートリアルを説明します。 1. まず、Xiaoyu のワンクリック システム再インストール ツールをコンピュータにダウンロードしてインストールし、コンピュータのウイルス対策ソフトウェアをオフにして、重要なデータを C ドライブにバックアップします。次に、win7 Ultimate システムを選択し、クリックしてこのシステムをインストールします。 2. インストールするソフトウェアを選択し、「次へ」をクリックします。 3. ソフトウェアがダウンロードされるまで待ちます

    win10システムでディスクをデフラグする方法 win10システムでディスクをデフラグする方法 Jun 29, 2023 pm 07:41 PM

    win10システムでディスクをデフラグするにはどうすればよいですか?コンピュータの使用率がますます高くなるにつれて、win10 システムでディスクのデフラグを設定する必要がある場合、win10 システムでディスクのデフラグに対処するにはどうすればよいですか?多くの友人は操作方法を知りません。以下のエディターは、Win10 システムでディスクをデフラグするための詳細な手順をまとめています。興味がある場合は、エディターに従って以下を読んでください。 win10 システムでディスクを最適化するための詳細な手順: 1. どのような種類のディスクを最適化する必要がありますか? 非常に一般的なソリッド ステート ハード ドライブやリムーバブル ディスク デバイスなど、すべてのディスクを最適化する必要があるわけではないことを知っておく必要があります。​

    Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド Mar 23, 2024 pm 03:51 PM

    Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド 日常生活では、写真、ビデオ、ドキュメントなどを含むさまざまなファイルを保存するために携帯電話を使用します。ただし、時間が経つにつれて、携帯電話上のファイルの数が増加し、携帯電話のメモリが不足したり、ファイルの管理が困難になったりする可能性があります。ファイルをより適切に整理し、携帯電話の使用効率を向上させるために、携帯電話フォルダーの確立が特に重要になっています。 Realme Mobile は、強力なシステムと多様な機能を備えた人気のスマートフォン ブランドです。 Realme 携帯電話でフォルダーを作成すると、ユーザーはファイルをより適切に整理できます

    Windows 10 公式 USB インストール ガイド Windows 10 公式 USB インストール ガイド Jan 04, 2024 pm 05:25 PM

    Microsoft はユーザーに公式の USB フラッシュ ドライブのインストール方法を提供していますが、多くの友人は win10 の公式 USB フラッシュ ドライブの使い方を知りません。実際には、システムをオンラインでダウンロードして USB フラッシュ ドライブに入れるだけでインストールできます。 。 win10 公式 USB ディスクの使用方法: 1. まず Microsoft win10 Web サイトを開いて、[ツールを今すぐダウンロード] を選択します。 2. 次に、[別のコンピューター用のインストール メディアを作成する] にチェックを入れます。 3. 次のオプションをキャンセルし、システムとシステムを選択します。言語バージョンをダウンロードしたい。 4. 選択後、次のステップに進み、「U ディスク」を選択します。 5. 次に、U ディスクを選択して、U ディスクにインストールします。 (そうでない場合は、USB フラッシュ ドライブを再度挿入して取り外します) 6. USB フラッシュ ドライブにインストールした後、システムをインストールするコンピューターに USB フラッシュ ドライブを挿入します。 7. 次に、コンピュータを再起動し、ホットキーを使用して BIOS に入ります。

    win7公式究極バージョンのダウンロードとインストールの詳細なチュートリアル win7公式究極バージョンのダウンロードとインストールの詳細なチュートリアル Jul 14, 2023 pm 12:21 PM

    Win7 Ultimate システムは、Win7 システムの最も一般的なバージョンであり、比較的完全な機能を備えたバージョンでもあります。一部のネチズンは、win7 の公式フラッグシップ バージョンをインストールしたいと考えていますが、win7 システムをダウンロードしてインストールする方法がわかりません。以下のエディターは、公式の win7 Ultimate バージョンの簡単なダウンロードとインストールのチュートリアルを示します。 1. Xiaobai のワンクリック システム再インストール ツールをコンピュータにダウンロードしてインストールし、インストールする必要がある元の win7 Ultimate システムを選択し、クリックしてこのシステムをインストールします。 (インストール前に必ず重要なデータを C ドライブにバックアップし、傍受されないようにコンピュータのウイルス対策ソフトウェアをオフにしてください。) 2. ソフトウェアがシステム イメージ ファイル データなどをダウンロードするのを待ちます。 3. 展開が完了したら、コンピューターの再起動を選択します。 4. コンピュータが再起動したら、ブート オプション インターフェイスに入り、xi を選択します。

    データ分析と統計に PHP 関数を使用するにはどうすればよいですか? データ分析と統計に PHP 関数を使用するにはどうすればよいですか? Jul 24, 2023 am 08:53 AM

    データ分析と統計に PHP 関数を使用するにはどうすればよいですか?インターネットの急速な発展とデータの爆発的な増加に伴い、データ分析と統計が重要なスキルになりました。 PHP では、いくつかの強力な関数とライブラリを使用して、データ分析と統計を実行できます。この記事では、データ分析と統計に PHP 関数を使用する方法を紹介し、いくつかのコード例を示します。配列処理 データ分析や統計において、配列は多くの場合扱う必要がある基本的なデータ構造です。 PHP には、配列を操作するための便利な関数が多数用意されています。

    WPS が正式に発表: サードパーティの商業広告を正式に停止します! WPS が正式に発表: サードパーティの商業広告を正式に停止します! Mar 04, 2024 pm 08:22 PM

    WPS関係者は本日(12月20日)、「WPSOffice 国内個人版はサードパーティの商業広告を正式に終了する」と発表し、興味のあるユーザーはWPSを最新バージョンにアップデートして、より新鮮で簡潔なオフィス体験を得ることができる。発表では、達成されたすべての成果はユーザーのサポートから切り離せないものであることを WPS が認識していると指摘しました。当社は今後も「シンプルな作成、簡単な表現、そして付加価値のあるつながり」というミッションを掲げ、ユーザーに優れた製品とサービス体験を提供することに尽力していきます。現在、オフィスソフト市場の競争は熾烈を極めており、大手メーカー各社が製品の競争力向上に努めています。 WPS は、ユーザー エクスペリエンスの重要なアップグレードであるサードパーティの商業広告を中止することを決定しました。この取り組みにより、ユーザーはより新鮮で簡潔なオフィス エクスペリエンスを実現し、WPS の役割がさらに強化されます。

    See all articles