Linux 啟動流程及相關知識

来源:https://www.cnblogs.com/heyongshen/archive/2022/07/24/16514738.html
-Advertisement-
Play Games

基礎知識 linux系統的組成 內核(kerner) 根文件系統(rootfs) 內核提供操作系統的功能,根文件系統包含常用的一些工具,這些工具。這些工具的運行離不開glibc庫文件。 程式:二進位程式文件 庫:庫是函數的集合,用來實現介面調用等功能。程式的運行依賴這些庫文件 Linux內核的功能: ...


基礎知識

linux系統的組成

  • 內核(kerner)

  • 根文件系統(rootfs)

內核提供操作系統的功能,根文件系統包含常用的一些工具,這些工具。這些工具的運行離不開glibc庫文件。

程式:二進位程式文件

庫:庫是函數的集合,用來實現介面調用等功能。程式的運行依賴這些庫文件

Linux內核的功能:文件系統管理、進程管理、網路管理、驅動程式、記憶體管理等

CentOS 6

CentOS 6 啟動流程: 4步

POST--->MBR--->GRUB--->載入內核

POST:Power-On-Self-Test,加電自檢。由主板的bios程式完成。
bios:basic input output system。基本出入輸出系統
MBR

MBR: 主引導記錄(Master Boot Record)。是硬碟的第一個扇區(0磁軌0扇區),總共有512個位元組,前446個位元組存儲的是bootloader的階段一程式(以二進位的形式存放)

bootloader:是用來啟動(引導)操作系統的一個程式。(安裝操作系統的時候會自動安裝)
bootloader這個程式裡面定義了操作系統(內核)存放的位置等

windows用的bootloader:ntloader,僅用來啟動操作系統的

linux用的bootloader:現在使用的是GRUB,不僅用來啟動操作系統,還有多種功能
#早期版本用的是0.97版本,現在用的是2.02版本

grub的啟動流程:啟動操作系統前載入grub。

階段1:加電自檢完成後,通過bios檢測設備驅動。如果是硬碟啟動就讀取硬碟的第一個扇區(MBR)。並將MBR中的前446位元組(bootloader)載入到記憶體中進行運行 #二進位文件,可以直接訪問的

階段1.5:因為grub的另外一部分是存放在文件系統的/boot目錄下的,但是要想解析這個對應的文件,需要識別這個文件系統。所以需要藉助文件系統的驅動程式。因為MBR的前446位元組存放不下文件系統的驅動,所以文件系統驅動放在了MBR的後續扇區中

階段2:解析載入文件系統對應目錄下grub的配置文件,找到操作系統(linux)。 #非二進位,所以不可以直接訪問,而是一個文件系統。需要文件系統的驅動才能訪問解析到對應的數據

#階段1和1.5都是為了階段2做準備的。

CentOS6 Grub第二階段的存放位置:/boot/grub

grub.conf:grub的關鍵配置文件,裡面定義了內核存放的相關路徑等內容

#配置文件格式
default:表示預設啟動那個內核 #例如default=0表示預設第一個內核作為引導
timeout:在啟動界面停留的時間
hidenmenu:隱藏的啟動菜單,預設看不到的
	tiele:啟動界面顯示的菜單項
	root(hd#.#):表示boot分區所在的位置,#hd0.0--hd表示硬碟 0.0表示第一塊硬碟的第一個分區
	kerner: /PATH/TO/KERNEL_FILE--內核文件所在的位置(/vmlinux表示boot目錄下的vmlinux這個文件) root=UUID=xxxx--表示利用內核,要載入的文件系統的根系統,系統硬碟真正的根(比如/dev/sda1這塊硬碟掛載到根上面 那麼載入的就是這個硬碟)
	initrd:系統的一個輔助文件,是一個小型的linux文件系統,內核進入硬碟根的時候會藉助它

bootloader是硬體和操作系統之間的一個媒介。硬體通過bootloader才能找到操作系統。

採用硬碟引導進入救援模式的方法

系統無法啟動使用光碟的方式進入救援模式:

採用光碟啟動(引導),進入rescue模式
#重啟系統出現進度條的時候快速按ESC鍵,然後選擇CD-ROM Dirver,然後選擇Troubleshooting,選擇Rescue a CentOS liux System,然後選擇1繼續,然後切換到/mnt/sysimage這個目錄下操作。因為救援模式預設進入的根不是硬碟系統的根。而是ramdisk里的文件系統,並沒有切換到本機硬碟上的“真正”文件系統
#正常啟動的系統他不會掛載到/mnt/sysimage這個目錄下的
鏈接:http://t.zoukankan.com/duzhaoqi-p-7327525.html

#chroot /mnt/sysimage #切換到真正的根目錄下麵

#grub-install /dev/sda #執行秀姑grub的命令

#sync #將緩存中的信息同步到硬碟

#exit  #退出重啟

#exit

Centos6的Grub修複方法

首先需要使用光碟引導進入救援模式

#grub信息被破壞的修複方法
使用grub-install來修複:grub-install --root-directory=DIR /dev/DISK

grub-install 磁碟名稱  #安裝grub到硬碟上,會自動找到整個硬碟的第一個扇區MBR的前446個位元組。

#無法修複grub的階段二所對應的配置文件,需要手動編寫 /boot/grub/grub.conf這個配置文件
Centos6 修複grub的方法:
方法一: #無法修複/etc/grub/grub.conf這個文件

grub-install命令: grub-install 磁碟名稱  #安裝grub到硬碟上,會自動找到整個硬碟的第一個扇區MBR的前446個位元組。

載入內核

grub載入linux內核後,通過內核載入硬碟的根,啟動系統中的第一個進程init。

內核想要進入硬碟的根,需要文件系統驅動。因為根分區有自己的文件系統。

驅動的功能由內核提供,內核的驅動存放位置在/lib目錄下,例如ext4的文件系統驅動:ext4.ko.所以要載入文件系統的驅動就需要進入根的文件系統,顯然不行。

所以內核此時不是從這裡面載入文件系統驅動,而是從GRUB配置文件中的initrd後面指定的文件裡面載入的文件系統。(是一個小型的linux文件系統)
init進程啟動以後就會通過以下順序執行相關的配置文件來設置系統

(1)/etc/inittab配置文件:確定系統使用那個運行模式(runlevel)
CentOS的運行模式有7個,對應數字0--6

0:關機
6:重啟
1:安全模式
3:字元模式
5:圖形界面模式

(2)運行/etc/rc.d/rc.sysinit這個腳本。初始話系統的一些信息。

設置主機名

設置歡迎信息

載入對應的服務配置

設備的掛載

交換空間的準備

系統時鐘等信息

(3)根據對應的運行模式執行對應的文件夾下麵腳本:/etc/rcX.d/xxx

比如運行模式是3:就執行/etc/rc3.d/ 下的腳本。

/etc/rc3.d/下麵的文件都是軟鏈接,指向/sbin/init下麵的腳本。

以K開頭的文件:開機啟動 K##:##運行次序;數字越小,越先運行;

以S開頭的文件:開機不啟動。S: S##:##運行次序;數字越小,越先運行;

CentOS6的服務管理工具

  • service:服務的開啟和關閉

  • chkconfig:服務的開機啟動等

service

service 服務 start|stop|restart

service --status-all

例如:service network start (networkCentOS8棄用了)
chkconfig
chkconfig 服務 on|off

rc.local文件

  • 是一個開機啟動文件,不屬於任何運行模式。開機的時候所有的服務腳本都運行完成後才會執行他。

  • CentOS7以及後面的版本想用這個文件的話,需要手動添加可執行許可權才會執行。

  • ubuntu預設沒有這個文件,需要手動創建並更改許可權才可以使用。

/etc/rc.local

/etc/rc.d/rc.local
#/etc/rc.local -> rc.d/rc.local rc.local是 rc.d/rc.local的一個軟連接

正常級別下,最後啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向
了/etc/rc.d/rc.local腳本

想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中

/etc/rc.d/rc.local在指定運行級彆腳本後運行

CentOS6 啟動流程總結:

1.POST,設備加電自檢(cpu、記憶體、硬碟、io設備等檢查)

2.MBR引導找到GRUB

3.GRUB執行完成後載入內核,內核載入硬碟的根

4.載入系統第一個進程init,並按順序執行以下配置文件和腳本。
	/etc/inittab

	/etc/rc.d/rc.sysinit

	/etc/rcX.d/xxx

5.所有服務啟動完成後執行rc.local這個腳本裡面的內容。

6.終端啟動,登錄相關的配置和驗證。

Linux的/proc和/sys目錄

虛擬文件夾概念:

虛擬的文件夾,因為其數據內容是存放在記憶體中的,不是存放在硬碟中

/proc和/sys都是虛擬的文件夾

/proc

proc是進程(process)的縮寫。這個目錄文件裡面存放的是進程的相關信息,把系統中的進程信息、內核狀態放在proc中,是一個虛擬的文件夾,對應的數據信息是記憶體中的狀態。

/proc/sys

這個目錄文件裡面的信息可以修改,可以通過這些配置來控制內核

sysctl 工具

sysctl:修改系統的內核參數

sysctl修改的參數是臨時生效的,通過編寫配置文件的方式實現持久化生效

#配置文件
/run/sysctl.d/*.conf

/etc/sysctl.d/*.conf

/usr/local/lib/sysctl.d/*.conf

/usr/lib/sysctl.d/*.conf

/lib/sysctl.d/*.conf

/etc/sysctl.conf  #主要存放在這裡面,一般都在這個配置文件裡面編寫設置。

#格式:
和文件中的格式不一樣,使用點(.)來隔開路徑。/proc/sys不用寫, 因為這個配置文件對應就是管理/proc/sys這個文件夾的
#常用參數:
-w   臨時改變某個指定參數的值

-a   顯示所有生效的系統參數

-p   從指定的文件載入系統參數
範例
禁止ping通本機:
[root@centos8 ~]#cat /etc/sysctl.d/test.conf
net.ipv4.icmp_echo_ignore_all=1
[root@centos8 ~]#sysctl -p /etc/sysctl.d/test.conf

清除緩存方法
echo 1|2|3 >/proc/sys/vm/drop_caches

/sys

/sys目錄文件存放的是和硬體有關的一些信息,也是虛擬文件夾,不是真正的硬碟上的文件夾,對應的也是記憶體中的數據。

範例

新添加硬碟的識別
echo "- - -" > /sys/class/scsi_host/hostX/scan #X表示數字,從0開始的

內核模塊管理

內核的組成部分:
  • kernel:內核核心,一般為bzImage,通常在/boot目錄

  • kernel object:內核對象,一般放置於/lib/modules/VERSION-RELEASE/

  • 輔助文件:ramdisk

內核版本查看:
uname -r
-r 顯示VERSION-RELEASE
內核模塊命令
  • lsmod

  • modprobe

lsmod:
  顯示內核已經裝載的模塊
  顯示的內容來自於: /proc/modules文件
範例:
[root@centos8 ~]#lsmod 
Module                 Size Used by
uas                    28672  0
usb_storage            73728  1 uas
nls_utf8               16384  0
isofs                  45056  0 #顯示:名稱、大小,使用次數,被哪些模塊依賴
modprobe:用於裝載或者卸載內核模塊
  裝載:modprobe 模塊名
  卸載: modprobe -r 模塊名  # rmmod命令:卸載模塊

systemd服務

從CentOS7開始,就使用systemd服務代替init作為系統啟動的第一個進程。

systemd的特性:
  • 服務並行啟動

  • 可以按照需要啟動對應守護進行

  • 自動管理服務的依賴關係

  • Unit(單元)的概念

  • 使用systemctl管理工具

systemd的核心概念Unit(單元)
systemd把服務都籠統稱為Unit(單元),通過配置文件進行標識和配置。

Unit存放的位置:/lib/systemd/system

systemd的Unit類型:
(1)service:類似於Centos6裡面的服務腳本。文件擴招名為.service

(2)target:類似於Centos6裡面的運行級別。文件擴展名為.target

(3)socket:義進程間通信用的socket文件。文件擴展名為.socket

#socket的理解
socket翻譯過來是套接字,原意為插座、插孔。

socket可以理解為:ip地址+埠+協議類型

例如:一臺筆記本電腦(server),一個耳機(client),一個u盤(clinet),一個滑鼠(client),
	socket就可以想象成筆記本電腦上的usb介面、音頻介面。
	耳機需要連接到電腦聽歌,需要用到音頻介面,u盤需要鏈接電腦拷貝資料,需要用到usb介面。
	socket就負責幫助這些外接設備找到筆記本電腦中相對應的驅動以便他們完成自己的工作,反之也是這樣。

socket就是位於兩個層面(傳輸層和應用層)中間的一個參與者,服務於兩方。

http是應用層協議,解決如何包裝數據,TCP/IP協議是傳輸層協議,主要解決數據怎麼在網路中傳輸。

一個網路協議 + 一個ip + 一個埠號,就組成了一個socket
原文鏈接:https://blog.csdn.net/EJEEMT/article/details/90212312

Unit的配置文件

/usr/lib/systemd/system #每個服務最主要的啟動腳本設置,類似於之前的/etc/init.d/

/lib/systemd/system #ubutun的對應目錄

/run/systemd/system #系統執行過程中所產生的服務腳本,比上面目錄優先運行

/etc/systemd/system #管理員建立的執行腳本,類似於/etc/rcN.d/Sxx的功能,比上面目錄優先運行

#/etc/systemd/system:系統管理員和用戶使用
#/usr/lib/systemd/system:發行版打包者使用

systemd的service

service這種unit類型的Unit文件格式

由三部分組成:

  • Unit:定義的是這個單元的相關信息

  • Service:定義的是這個服務的相關信息

  • Install:定義的是服務啟動和關閉的一些選項

Unit段的常用選項
Description:unit的描述信息

After:當前unit在那些unit後面啟動,其功能與Before相反

Requires:依賴到的其它units,強依賴,被依賴的units無法激活時,當前unit也無法激活

Wants:依賴到的其它units,弱依賴

Conflicts:定義units間的衝突關係

Service段常用選項

Type:定義啟動類型

EnvironmentFile:環境配置文件

simple:預設值,後臺啟動常駐於記憶體

ExecStart:啟動unit要運行命令或腳本的絕對路徑

ExecStartPre: ExecStart前運行

ExecStartPost: ExecStart後運行

ExecStop:停止unit要運行的命令或腳本

Restart:當設定Restart=1 時,服務意外終止會再次自動啟動

RestartSec: 重啟等待時間,預設100ms

PrivateTmp:設定為yes時,會在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目錄

Install段常用選項

Alias:別名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依賴,強依賴

WantedBy:被哪些units所依賴,弱依賴

Also:安裝本服務的時候還要安裝別的相關服務

daemon-reload

當創建或者更改了硬碟上的unit的相關文件以後,需要使用daemon-reload載入到系統的記憶體中才會生效。

或者重啟系統也能生效

範例: 自定義service的unit文件

[root@centos8 ~]#vim /lib/systemd/system/hello.service 
[Unit] 
Description=Hello World 

[Service] 
TimeoutStartSec=0
ExecStart=/bin/sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop=/bin/kill sh

[Install] 
WantedBy=multi-user.target

#會在後臺持續輸出 hello word,寫入到了系統日誌中/var/log/meseage
#ubuntu的日誌文件是: /var/log/sys.log

systemd的target

運行級別:不同的運行級別是不同的服務組合而來的結果。
systemd的target就類似於CentOS6的runlevel

0  ==> runlevel0.target-> poweroff.target
1  ==> runlevel1.target-> rescue.target
2  ==> runlevel2.target-> multi-user.target
3  ==> runlevel3.target-> multi-user.target
4  ==> runlevel4.target-> multi-user.target
5  ==> runlevel5.target-> graphical.target#graphical.target是基於multi-user.target來的
6  ==> runlevel6.target-> reboot.target #

systemd的管理工具

systemctl是systemd單元(unit)的管理工具

格式:systemctl COMMAND unit_name

start|stop|restart|status

mask:禁用服務

umask:取消禁用的服務

enable:設置開機啟動

disable:取消開機啟動

is-active:查看unit是否激活

is-enable:查看unit是否開機啟動

list-units:查看所有的unit

範例

啟動一個服務:
systemctl start unit_name.service #尾碼可以省略不屑

設置服務開機重啟並立馬啟動:
systemctl enable unit_name.service --now

查看系統中類型為service的unit
systemctl list-unit --type service --all

service服務的狀態

loaded Unit配置文件已處理

active(running) 一次或多次持續處理的運行

active(exited) 成功完成一次性的配置

active(waiting) 運行中,等待一個事件

inactive 不運行

enabled 開機啟動

disabled 開機不啟動

static 開機不啟動,但可被另一個啟用的服務激活

indirect 重定向到別處

修改運行級別

  • 通過命令的方式修改

  • 通過開機啟動的時候修改

#通過systemctl命令切換運行模式:
systemctl isolate name.target #效果等同於:init X

#開機的時候指定內核模式:隻影響當次的啟動
啟動時,到啟動菜單,按e鍵,找到在linux 開頭的行後添加systemd.unit=desired.target 
#centos7是linux16開頭

例如:systemd.unit=emergency.target 
systemd.unit=rescue.target

CentOS7及後續版本的啟動流程

  • 1.POST:系統加電自檢並找到MBR

  • 2.MBR引導並載入GRUB

  • 3.GRUB引導內核並載入硬碟文件系統上的根系統

  • 4.啟動系統的第一個進程systemd進程

  • 5.執行systemd對應的unit(target這種類型的)

破解 CentOS 7和8的 root 密碼

方法一:
啟動時任意鍵暫停啟動 #進入內核啟動的界面 畫面停止在啟動菜單上面

按e鍵進入編輯模式

將游標移動linux 開始的行,添加內核參數 rd.break #rd.break暫停正常的啟動,進入臨時的救援模式
#centos7是linux16開頭,這一行就是grub裡面的一行內核參數配置

按ctrl-x啟動

#使用mount命令查看,發現指定的硬碟是掛載到/sysroot這個目錄下的,所以當前的根目錄不是真正硬碟的根。
#但是我們的硬碟又是以為只讀的方式掛載到/sysroot下的,無法修改文件等操作,所以需要重新掛載。
mount –o remount,rw /sysroot

chroot /sysroot  #改變根目錄為我們硬碟文件的根目錄

passwd root #輸入密碼

#如果SELinux是啟用的,才需要執行下麵操作,如查沒有啟動,不需要執行

touch /.autorelabel  #重新打selinux的標簽

exit

reboot
方法二:
啟動時任意鍵暫停啟動,出現內核啟動的界面

按e鍵進入編輯模式

將游標移動linux 開始的行,改為 rw init=/sysroot/bin/sh

按ctrl-x啟動

chroot /sysroot

passwd root

#如果SELinux是啟用的,才需要執行下麵操作,如查沒有啟動,不需要執行
touch /.autorelabel

exit

reboot

修複 GRUB2的方法

GRUB2:CentOS 7,8及ubuntu1804都使用
GRUB2的主要配置文件:
/boot/grub2/grub.cfg
修複GRUB配置文件的方法:
法一:grub2-mkconfig > /boot/grub2/grub.cfg

法二:grub2-mkconfig  -o  /boot/grub2/grub.cfg  -o:表示他的標準輸出
修複grub:
grub2-install /dev/sda #BIOS環境

grub2-install #UEFI環境

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • WPF佈局使用的是Panel族佈局控制項,它們均派生自Panel抽象類,主要用於控制UI佈局。 ...
  • 環境: vm 16.2 Windows 7 SP1 (來源i tell you) 在網上搜索了眾多帖子的解決辦法都無效後,我找到了官方的終極解決辦法 https://packages.vmware.com/tools/releases/index.html 訪問並下載,安裝 結束 如果是Linux ...
  • echo命令是Linux中最基礎和最常用的命令,特別是在Shell腳本經常用來列印輸出調試信息等,功能比較豐富,現來總結一下,方便後續查看。 1.基本語法 echo [參數] 字元串 主要參數解釋如下所示: | 參數 | 功能 | | | | | -e | 激活轉義字元 | | -n | 輸出不進行 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是MCUXpresso IDE下將源碼製作成Lib庫方法及其與IAR,MDK差異。 程式函數庫是一個包含已經編譯好代碼和數據的函數集合,這個庫文件里的函數可以供其他程式調用。被放進庫文件里的代碼通常具有一定通用性,是經過高度抽象的,這樣可 ...
  • 寫在前面 本系列的文章是博主邊學邊記錄的,可能不是特別的準備,因為會加上博主自己的理解,僅供參考。 其次就是,博主是有一定的基礎了,大學開設過操作系統的課,建立在這個基礎上,寫出來的筆記可能不會太詳細。 博主所看書籍為 《操作系統導論》王海鵬譯 正文 除了介紹操作系統的一些歷史外,還總體概括了操作系 ...
  • 想要在Home Assistant中通過智能遙控發送紅外信號控制空調需有兩個步驟: 一、智能遙控接入Home Assistant; 二、Home Assistant將紅外信號數據發往智能遙控,智能遙控收到後發送對應紅外信號; 下麵將詳細介紹這兩個流程,為了減少字數以下Home Assistant會簡 ...
  • Final Cut Pro for Mac 是Mac系統平臺上一款由蘋果公司開發專業視頻非線性編輯器,Final Cut Pro 帶來創新功能,讓剪接師能夠製作精美的追蹤動態圖像,並可編輯iPhone 13 及iPhone 13 Pro 上以「電影效果」模式拍攝的影片。 詳情:Final Cut P ...
  • 1、Linux簡介 1.1、什麼是Linux Linux是一套免費使用和自由傳播的操作系統。 1.2、學習Linux的原因 1.2.1、企業用人要求 在現如今的時代中,越來越多的IT崗位都提到了要有Linux操作系統的經驗。 這是因為**Linux操作系統提供了很多穩定的發行版本,廣泛的應用在我們各 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...