Linux gurb2簡介

文章目錄

  • 前言
  • 一、GRUB 2簡介
  • 二、GRUB 2相關文件/文件夾
    • 2.1 /etc/default/grub文件
    • 2.2 /etc/grub.d/文件夾
    • 2.3 /boot/grub/grub.cfg文件
  • 三、grubx64.efi
  • 參考資料

前言

簡單來說,引導加載程序(boot loader)是計算機啟動時運行的第一個軟件程序。它負責加載并將控制權轉移到操作系統內核軟件(如Linux或GNU Mach)。而內核則負責初始化整個操作系統(例如GNU系統)。

GNU GRUB是一個非常強大的引導加載程序,它可以加載各種自由操作系統,以及通過鏈式加載(chain-loading)加載專有操作系統。GRUB的設計目標是解決個人計算機引導過程的復雜性;該程序與計算機平臺緊密相關,盡管未來可能會考慮移植到其他平臺。

GRUB的一個重要特性是靈活性;GRUB理解文件系統和內核可執行格式,因此您可以以您喜歡的方式加載任意操作系統,而無需記錄內核在磁盤上的物理位置。因此,您只需指定內核的文件名、驅動器和分區即可加載內核所在的位置。

在使用GRUB引導時,您可以使用命令行界面(參見命令行界面)或菜單界面(參見菜單界面)。使用命令行界面,您需要手動輸入內核的驅動器規范和文件名。而在菜單界面中,您只需使用箭頭鍵選擇一個操作系統。菜單是基于事先準備好的配置文件的(參見配置)。在菜單中,您可以在使用之前切換到命令行模式,反之亦然。甚至可以在使用前編輯菜單條目。

GRUB 2取代了之前被稱為GRUB的版本(即0.9x),后者又成為了GRUB Legacy。

一、GRUB 2簡介

GRUB 2(GRand Unified Bootloader 2)是一個廣泛使用的引導加載程序,用于在多操作系統環境下引導計算機。它是GNU項目的一部分,是GRUB引導加載程序的第二個主要版本。在大部分Linux發行版中,比如Ubuntu、CentOS ,默認的 bootloader 就是 GRUB 2。
在這里插入圖片描述
在這里插入圖片描述

GRUB 2 具有以下特點和功能(GRUB的主要要求是符合Multiboot規范,該規范在Multiboot規范的動機部分進行了描述。):

多操作系統支持:GRUB 2 支持引導多個操作系統,包括各種版本的Linux發行版、Windows、BSD等。
向后兼容引導FreeBSD、NetBSD、OpenBSD和Linux。通過鏈式加載功能,支持加載專有內核(如DOS、Windows NT和OS/2)。
除了特定的兼容模式(鏈式加載和Linux piggyback格式)外,所有內核將在Multiboot規范中的相同狀態下啟動。目前只支持加載到1兆字節或更高位置的內核。任何試圖加載低于此邊界的嘗試將立即失敗,并給出報告問題的錯誤消息。

除了上述要求,GRUB還具有以下特性(請注意,Multiboot規范不要求GRUB支持所有這些特性):

識別多種可執行文件格式
支持多種a.out變種以及ELF。還加載符號表。

支持非Multiboot內核
支持許多不符合Multiboot規范的各種自由的32位內核(主要包括FreeBSD、NetBSD、OpenBSD和Linux)。還支持鏈式加載其他引導加載程序。

加載多個模塊
完全支持Multiboot功能,可以加載多個模塊。GRUB 2 的設計采用模塊化結構,允許加載和卸載各種功能模塊,包括文件系統驅動程序、圖形界面支持、加密模塊等。這使得 GRUB 2 在不同硬件和配置環境下都具有良好的靈活性和擴展性。

加載配置文件
支持人類可讀的文本配置文件,其中包含預設的引導命令。您還可以動態加載另一個配置文件,并將預設配置文件嵌入到GRUB映像文件中。命令列表(請參閱命令)是命令行支持的子集。配置文件示例可在配置文件中找到。

GRUB 2采用了完全重新設計的目錄和文件層次結構。主要的GRUB 2文件夾包括/etc/grub.d,其中包含主要的GRUB 2腳本,以及/boot/grub,其中包含GRUB 2的模塊和菜單文件(grub.cfg)。用戶通常會對/etc/default/grub文件進行自定義設置。
以centos 7 為例:GRUB使用配置文件確定引導菜單的外觀和行為。主配置文件位于/boot/grub2/grub.cfg,它根據/etc/default/grub和/etc/grub.d/目錄中的配置腳本和文件自動生成的。它允許用戶自定義引導選項、默認引導條目、超時值等。
通常,配置更改是在/etc/default/grub文件和位于/etc/grub.d中的自定義腳本中進行的。在運行update-grub命令以root用戶身份之前,不會對GRUB 2菜單進行任何更改。此命令會運行GRUB 2配置腳本并更新/boot/grub/grub.cfg文件。

命令列表是對配置文件支持的命令的子集。編輯命令與Bash命令行非常相似,根據上下文,可以通過TAB鍵補全命令、設備、分區和目錄中的文件。

提供菜單界面
提供列出預設引導命令的菜單界面,并具有可編程的超時設置。引導條目的數量沒有固定限制,當前的實現可以容納幾百個。
GRUB 2 提供了一個可定制的菜單界面,以便用戶選擇要引導的操作系統或內核。菜單界面可以通過配置文件進行自定義,可以添加新的菜單項,設置默認引導項等。

支持圖形界面:GRUB 2 可以在支持的硬件上提供圖形界面,使用戶可以使用鼠標來選擇操作系統和菜單項。

具有靈活的命令行界面
提供相當靈活的命令行界面,可從菜單訪問,用于編輯任何預設命令或從頭開始編寫新的引導命令集。如果沒有配置文件存在,GRUB將進入命令行界面。
GRUB 2 提供了一個強大的命令行界面,允許用戶直接在引導過程中執行各種命令,如加載內核、修改配置等。這對于調試和故障排除非常有用。

引導參數設置:GRUB 2 允許用戶在引導時設置各種參數,如內核參數、啟動級別等。GRUB 2提供了高級引導選項,可以在引導過程中指定這些選項。這些選項允許您修改內核參數,指定備用的initramfs文件,進入單用戶模式以及執行其他操作。

支持多種文件系統類型
透明地支持多種文件系統類型,還提供有用的顯式塊列表表示。當前支持的文件系統類型包括Amiga Fast FileSystem(AFFS)、AtheOS fs、BeFS、BtrFS(包括raid0、raid1、raid10、gzip和lzo)、cpio(小端和大端的bin、odc和newc變體)、Linux ext2/ext3/ext4、DOS FAT12/FAT16/FAT32、exFAT、F2FS、HFS、HFS+、ISO9660(包括Joliet、Rock-ridge和多個chunk文件)、JFS、Minix fs(版本1、2和3)、nilfs2、NTFS(包括壓縮)、ReiserFS、ROMFS、Amiga Smart FileSystem(SFS)、Squash4、tar、UDF、BSD UFS/UFS2、XFS和ZFS(包括lzjb、gzip、zle、mirror、stripe、raidz1/2/3和AES-CCM和AES-GCM的加密)。有關更多信息,請參閱文件系統。

支持自動解壓縮
可以解壓縮由gzip或xz壓縮的文件。此功能對用戶來說是自動的和透明的(即所有功能都在解壓縮后的文件內容上操作)。這大大減小了文件大小和加載時間,對于軟盤來說尤為重要。
可以想象某些內核模塊應以壓縮狀態加載,因此可以指定不同的模塊加載命令以避免解壓縮模塊。

訪問任何已安裝設備上的數據
支持從BIOS識別的任何軟盤或硬盤讀取數據,與根設備的設置無關。

不依賴于驅動器幾何轉換
與許多其他引導加載程序不同,GRUB不受特定驅動器轉換的影響。可以將已安裝和運行的驅動器從一種轉換轉換為另一種轉換,而不會產生任何不良影響或更改GRUB的配置。

檢測所有已安裝的RAM
GRUB通常可以找到PC兼容機器上安裝的所有RAM。它使用先進的BIOS查詢技術來查找所有內存區域。如Multiboot規范中所述(請參閱Multiboot規范的動機部分),并非所有內核都使用此信息,但GRUB為那些使用的內核提供了該信息。

支持邏輯塊地址模式
在傳統的磁盤調用中(稱為CHS模式),存在幾何轉換問題,即BIOS無法訪問超過1024個柱面,因此可訪問的空間限制在至少508 MB至最多8GB之間。GRUB無法普遍解決此問題,因為沒有在所有機器上使用的標準接口。然而,一些較新的機器具有新的接口,稱為邏輯塊地址(LBA)模式。GRUB會自動檢測是否可用LBA模式,并在可用時使用它。在LBA模式下,GRUB可以訪問整個磁盤。

支持網絡引導
GRUB基本上是一個基于磁盤的引導加載程序,但也具有網絡支持。您可以使用TFTP協議從網絡加載操作系統映像。

支持遠程終端
為了支持沒有控制臺的計算機,GRUB提供了遠程終端支持,這樣您就可以從遠程主機控制GRUB。目前只實現了串行終端支持。

二、GRUB 2相關文件/文件夾

有幾個文件/文件夾這里介紹一下:
(1)/etc/default/grub文件
(2)/etc/grub.d/文件夾
(3)/boot/grub2/grub.cfg

下面以Centos 7為例。

2.1 /etc/default/grub文件

/etc/default/grub文件是用于配置GRUB 2引導加載程序的主要配置文件之一。它包含了一些全局的設置和變量,用于控制GRUB的行為和外觀。

# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

(1)GRUB_TIMEOUT=5:將引導菜單等待用戶輸入的時間設置為5秒。如果沒有用戶輸入,將自動啟動默認菜單條目。
(2)GRUB_DISTRIBUTOR=“ ( s e d ′ s , r e l e a s e . ? (sed 's, release .* (seds,release.?,g’ /etc/system-release)”:通過命令替換的方式,從/etc/system-release文件獲取發行版信息,并將其賦值給GRUB_DISTRIBUTOR變量。這樣可以動態地獲取發行版信息并在引導菜單中顯示。
(3)GRUB_DEFAULT=saved:設置默認啟動的菜單條目為上一次選擇的條目。這意味著,如果用戶在上次引導時選擇了特定的菜單條目,那么下一次引導時將自動選擇該條目作為默認啟動項。
(4)GRUB_DISABLE_SUBMENU=true:禁用子菜單功能,將所有菜單條目顯示在一個平面列表中,而不是進行分組。
(5)GRUB_TERMINAL_OUTPUT=“console”:將GRUB的終端輸出設置為文本終端(console),而不是圖形終端(gfxterm)。
(6)GRUB_CMDLINE_LINUX=“crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet”:在Linux內核啟動時傳遞的命令行參數。這些參數包括crashkernel=auto(用于自動配置系統崩潰內核轉儲)、spectre_v2=retpoline(用于針對Spectre漏洞的保護)、rd.lvm.lv=centos/root和rd.lvm.lv=centos/swap(用于指定LVM邏輯卷的根和交換分區)、rhgb(用于顯示圖形啟動進度)和quiet(用于減少啟動時的冗余輸出)。
(7)GRUB_DISABLE_RECOVERY=“true”:禁用恢復模式菜單,在引導菜單中不顯示恢復模式選項。

在對/etc/default/grub文件進行任何更改后,需要通過運行 grub-mkconfig 命令使更改生效。該命令會重新生成/boot/grub2/grub.cfg文件,其中包含實際引導菜單的配置。

2.2 /etc/grub.d/文件夾

/etc/grub.d/文件夾是用于存放GRUB 2配置腳本的目錄。在這個文件夾中,每個腳本文件都負責生成GRUB 2菜單的一部分。這些腳本文件以數字開頭,用于確定它們在菜單中的順序。

通常,這些腳本用于自動檢測并添加可引導的操作系統和內核選項到GRUB 2菜單中。它們還可以包含其他自定義配置,例如設置菜單默認選項、添加自定義菜單項或啟用特定功能等。

當運行update-grub命令時,GRUB 2會掃描/etc/grub.d/文件夾中的腳本,并根據腳本生成菜單配置文件(grub.cfg)。因此,如果需要對GRUB 2菜單進行自定義配置,可以編輯/etc/grub.d/文件夾中的相應腳本,并在更新配置后運行update-grub命令以使更改生效。

# 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

2.3 /boot/grub/grub.cfg文件

/boot/grub/grub.cfg(或者/boot/grub2/grub.cfg)文件是GRUB 2引導加載程序的配置文件,它包含了引導菜單的詳細配置信息。該文件由GRUB 2根據/etc/default/grub文件和其他相關文件自動生成。

grub.cfg文件是由一系列腳本生成的,通常不應直接編輯。當系統中的內核或引導配置發生更改時,可以使用grub2-mkconfig命令(如grub2-mkconfig -o /boot/grub2/grub.cfg)重新生成該文件。

grub.cfg文件的結構比舊版本的GRUB(如GRUB Legacy)的配置文件要復雜得多。它包含多個菜單節(menuentry),每個菜單節定義了一個可供選擇的操作系統或內核。

每個菜單節包含了一系列的配置指令,用于定義菜單項的標題、內核文件、內核參數、初始化內存盤(initrd)文件等。這些配置指令提供了引導操作系統所需的詳細信息。

在grub.cfg文件中,還可以找到一些自動生成的部分,例如用于檢測其他操作系統(如Windows)并將其添加到引導菜單中的代碼。

由于grub.cfg文件是自動生成的,因此在對引導菜單進行更改時,不應直接編輯該文件。而是應該修改/etc/default/grub文件或/etc/grub.d/目錄中的相關腳本文件,并使用grub2-mkconfig命令重新生成grub.cfg文件,以確保更改正確應用。

NAMEgrub-mkconfig — Generate a GRUB configuration file.SYNOPSISgrub-mkconfig [-o | --output=FILE]DESCRIPTIONgrub-mkconfig generates a configuration file for GRUB.
# cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
......
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-1855e442-e30a-4135-9389-0fcdbdc7551d' {load_videoset gfxpayload=keepinsmod gzioinsmod part_gptinsmod xfsset root='hd0,gpt2'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  3a286201-19dc-4036-bf40-d4a8bfdc30cfelsesearch --no-floppy --fs-uuid --set=root 3a286201-19dc-4036-bf40-d4a8bfdc30cffilinuxefi /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quietinitrdefi /initramfs-3.10.0-1160.el7.x86_64.img
}
menuentry 'CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-1855e442-e30a-4135-9389-0fcdbdc7551d' {load_videoset gfxpayload=keepinsmod gzioinsmod part_gptinsmod xfsset root='hd0,gpt2'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  3a286201-19dc-4036-bf40-d4a8bfdc30cfelsesearch --no-floppy --fs-uuid --set=root 3a286201-19dc-4036-bf40-d4a8bfdc30cffilinuxefi /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quietinitrdefi /initramfs-3.10.0-693.el7.x86_64.img
}
......

三、grubx64.efi

grubx64.efi是GNU GRUB(GRand Unified Bootloader)引導管理器的UEFI版本,它是一種常用的引導程序,被廣泛應用于Linux系統中。當計算機使用UEFI啟動時,UEFI固件會查找EFI目錄下的grubx64.efi文件,并將其加載到內存中。然后,grubx64.efi將會顯示一個菜單,列出可用的操作系統和內核,允許用戶選擇要啟動的操作系統或內核。在Linux ISO image中,grubx64.efi文件通常被用作引導管理器,用于啟動Linux操作系統的安裝程序。

對于Linux發行版,grubx64.efi是GRUB2在UEFI環境下的引導加載程序。雖然Grub是開源軟件,理論上可以編譯和定制,但通常情況下,個人用戶不是通過直接編輯.efi文件來配置GRUB,而是通過編輯其配置文件(如/boot/grub/grub.cfg)來更改引導菜單、內核選項等。如果確實需要修改源代碼,那也是先修改源代碼然后重新編譯生成新的.efi文件。

grubx64.efi文件是怎么找到grub.cfg文件的:

在UEFI系統中,grubx64.efi引導管理器啟動后,它會搜索EFI系統分區中的特定目錄和文件,以找到grub.cfg配置文件。具體來說,grubx64.efi通常會按照以下順序搜索grub.cfg文件:

(1)首先,grubx64.efi會在EFI目錄下搜索grub.cfg文件。如果在EFI目錄下找到了grub.cfg文件,它會直接加載并執行該文件。

(2)如果在EFI目錄下沒有找到grub.cfg文件,grubx64.efi會繼續搜索EFI目錄下的/boot/grub目錄。在該目錄下,它會嘗試查找grub.cfg文件,并加載執行該文件。

(3)如果在/boot/grub目錄下也沒有找到grub.cfg文件,grubx64.efi會繼續搜索EFI系統分區中的其他目錄,包括/efi/{distro}/、/efi/boot/等,以查找grub.cfg文件。

(4)一旦grubx64.efi找到了grub.cfg文件,它就會將文件加載到內存中,并根據文件中的配置信息啟動相應的操作系統或內核。注意,grub.cfg文件的位置和名稱可能因Linux發行版和安裝方式而有所不同,但通常情況下,它們會遵循上述搜索規則。

uefi + grub2引導方式如下:

x86_64: uefi ==> shimx64.efi ==> grubx64.efi ==> /boot/efi/EFI/centos/grub.cfg ==> vmlinuz & initramfs

以centos7為例,其位置:

/boot/efi/EFI/centos/grubx64.efi
# file /boot/efi/EFI/centos/grubx64.efi
/boot/efi/EFI/centos/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows

grubx64.efi 是 GRUB 引導加載程序的一個文件,用于在 UEFI 系統中啟動操作系統。它是 GRUB 的 UEFI 版本,專門設計用于 x86-64 架構的計算機。

在 UEFI 系統中,grubx64.efi 被用作主引導加載程序,負責加載操作系統內核和初始化 RAM 文件系統(initramfs)。它是由 GRUB 提供的一個可信的引導加載程序,通常與 shimx64.efi 結合使用,以支持 UEFI Secure Boot。

grubx64.efi 的配置文件通常位于 /boot/grub/grub.cfg 或 /etc/grub.d/ 目錄中。在配置文件中,可以定義引導菜單,包括可供選擇的操作系統、啟動參數和其他設置。

GRUB 具有強大的功能和靈活性,可以處理多個操作系統的引導和配置。它支持多個文件系統,可以通過配置文件進行自定義和擴展。通過編輯和配置 grubx64.efi 的配置文件,可以修改引導菜單、添加新的啟動選項、設置默認啟動項等。

詳細說明:
(1)GRUB(Grand Unified Bootloader):GRUB 是 Linux 系統中常用的引導加載程序。它提供了一個靈活且可自定義的引導菜單,讓用戶能夠在計算機啟動時選擇和啟動不同的操作系統或內核選項。grubx64.efi 是 GRUB 的 UEFI 版本,專門設計用于 x86-64 架構的計算機。
(2)UEFI 兼容性:UEFI(Unified Extensible Firmware Interface)是許多計算機中使用的現代固件接口。grubx64.efi 的設計目標是與 UEFI 固件兼容,使其可以作為系統啟動時的主要引導加載程序。
(3)引導菜單配置:grubx64.efi 依賴于其配置文件,通常位于 /boot/grub/grub.cfg 或 /etc/grub.d/ 目錄中,用于定義引導菜單選項。在配置文件中,可以指定可用的操作系統、內核參數、啟動選項和其他設置。這使用戶能夠根據自己的偏好自定義引導過程。
(4)多操作系統支持:GRUB 的一個主要優點是可以處理多個操作系統。通過 grubx64.efi,可以配置引導菜單以顯示計算機上安裝的多個操作系統的列表,方便用戶在啟動時選擇所需的操作系統。這對于雙啟動或多啟動設置非常方便。
(5)高級功能:GRUB 提供了各種高級功能,例如鏈式加載其他引導加載程序、配置啟動時參數、設置默認引導選項,甚至提供命令行界面用于故障排除和系統維護。
(6)主題和圖形界面支持:GRUB 還可以通過主題和圖形用戶界面(GUI)進行自定義,以增強引導菜單的視覺外觀和用戶體驗。

參考資料

https://www.gnu.org/software/grub/manual/grub/html_node/index.html
https://help.ubuntu.com/community/Grub2
https://www.cnblogs.com/shamoguzhou/p/17380191.html
https://blog.csdn.net/Anhui_Chen/article/details/106988113
https://mp.weixin.qq.com/s/N_lSjtorg0Ho_hSBiM5uKA

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15827.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一起學習大模型 - 從底層了解Token Embeddings的原理(2)

文章目錄 前言4. Token Embeddings綜合運用演示4.1 Token Embeddings處理4.2 偽代碼示例4.3 計算cat和dog兩個詞的相近程序4.3.1 計算方法4.3.2 例子4.3.3 輸出結果 前言 上一篇文章了解了Token Embeddings的原理,這一篇,我們一起來綜合運用學到的知識來…

純干貨分享 機器學習7大方面,30個硬核數據集

在剛剛開始學習算法的時候,大家有沒有過這種感覺,最最重要的那必須是算法本身! 其實在一定程度上忽略了數據的重要性。 而事實上一定是,質量高的數據集可能是最重要的! 數據集在機器學習算法項目中具有非常關鍵的重…

文章解讀與仿真程序復現思路——電力系統保護與控制EI\CSCD\北大核心《計及溫控厭氧發酵和階梯碳交易的農村綜合能源低碳經濟調度》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

網絡域名是什么意思

網絡域名,顧名思義,就是網絡上的名字,類似于現實中的地址或姓名一樣,用來標識網絡上的一個或一組計算機或服務器的位置,以及它們的相應服務資源。網絡域名是互聯網上最基礎的基礎設施之一,是網絡通信的“標…

【mysql】更新操作是如何執行的

現有一張表,建表語句如下: mysql> create table T(ID int primary key, c int);如果要將 ID2 這一行的a字段值加 1,SQL語句會這么寫: mysql> update T set c c 1 where ID 2;上面這條sql執行時,分析器會通過詞…

Nacos 微服務管理

Nacos 本教程將為您提供Nacos的基本介紹,并帶您完成Nacos的安裝、服務注冊與發現、配置管理等功能。在這個過程中,您將學到如何使用Nacos進行微服務管理。下方是官方文檔: Nacos官方文檔 1. Nacos 簡介 Nacos(Naming and Confi…

操作符詳解(上)(新手向)

操作符詳解(上) 一,算術操作符(雙目操作符)1:‘’,‘-’,‘*’2:‘/’,‘%’ 一,單目操作符1:‘’,‘-’2:‘!’3:‘&’4:‘*’5:…

linux 排查java內存溢出(持續更新中)

場景 tone.jar 啟動后內存溢出,假設pid 為48044 排查 1.確定java程序的pid(進程id) ps 或 jps 都可以 ps -ef | grep tone jps -l 2.查看堆棧信息 jmap -heap 48044 3.查看對象的實例數量顯示前30 jmap -histo:live 48044 | head -n 30 4.查看線程狀態 jstack 48044

Spring 事件監聽

參考:Spring事件監聽流程分析【源碼淺析】_private void processbean(final string beanname, fi-CSDN博客 一、簡介 Spring早期通過實現ApplicationListener接口定義監聽事件,Spring 4.2開始通過EventListener注解實現監聽事件 FunctionalInterface p…

Rustdesk客戶端源碼編譯

1.安裝VCPKG windows平臺vcpkg安裝-CSDN博客 2.使用VCPKG安裝: windows平臺vcpkg安裝-CSDN博客 配置VCPKG_ROOT環境變量: 安裝靜態庫: ./vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static 靜態庫安裝成…

【C語言深度解剖】(15):動態內存管理和柔性數組

🤡博客主頁:醉竺 🥰本文專欄:《C語言深度解剖》 😻歡迎關注:感謝大家的點贊評論關注,祝您學有所成! ??💜💛想要學習更多C語言深度解剖點擊專欄鏈接查看&…

I.MX6ULL的官方 SDK 移植實驗

系列文章目錄 I.MX6ULL的官方 SDK 移植實驗 I.MX6ULL的官方 SDK 移植實驗 系列文章目錄一、前言二、I.MX6ULL 官方 SDK 包簡介三、硬件原理圖四、試驗程序編寫4.1 SDK 文件移植4.2 創建 cc.h 文件4.3 編寫實驗代碼 五、編譯下載驗證5.1編寫 Makefile 和鏈接腳本5.2編譯下載 一、…

列表元素添加的藝術:從單一到批量

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、引言 二、向列表中添加單一元素 1. append方法 2. insert方法 三、向列表中添加批量…

MySQL 存儲過程(實驗報告)

一、實驗名稱: 存儲過程 二、實驗日期: 2024 年5 月 25 日 三、實驗目的: 掌握MySQL存儲過程的創建及調用; 四、實驗用的儀器和材料: 硬件:PC電腦一臺; 配置:內存&#xff0…

Android 配置本地解決下載 Gradle 慢的問題

步驟1 打開項目下 gradle/wrapper/gradle-wrapper.properties 文件。 步驟2 文件內容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

SW焊接路徑不能是閉合的

如果是整個圓,就不能作出焊件

【Docker學習】深入研究命令docker exec

使用docker的過程中,我們會有多重情況需要訪問容器。比如希望直接進入MySql容器執行命令,或是希望查看容器環境,進行某些操作或訪問。這時就會用到這個命令:docker exec。 命令: docker container exec 描述&#x…

ssm275寵物醫院管理系統+vue-手把手調試搭建

ssm275寵物醫院管理系統vue-手把手調試搭建 ssm275寵物醫院管理系統vue-手把手調試搭建

Jmeter預習第1天

Jmeter參數化(重點) 本質:使用參數的方式來替代腳本中的固定為測試數據 實現方式: 定義變量(最基礎) 文件定義的方式(所有測試數據都是固定的情況下[死數據],eg:注冊登錄&#xff0…

Linux -- 進程間通信的五種方式

IPC(InterProcess Communication)的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中Socket和Stream支持不同主機上的兩個進程IPC。 管道(Pipes)&#xff1a…