正則表達式

? 可以接收大量的數據來源,然后借助通配符、元字符、關鍵字等來標識數據流中的信息,將匹配成功的數據留存下來。

? 基本正則表達式擴展正則表達式 是兩種不同的語法規范,主要區別在于元字符(如 +、?、|、 () 、{})是否需要轉義(擴展不需要轉義),以及支持的功能范圍。

	正則表達式	用來在文件中匹配符合條件的字符串,主要是目的是包含匹配。 		
	grep、awk、sed 等命令可以支持正則表達式。

	通配符		用來匹配符合條件的文件名,通配符是完全匹配。- ls、find、cp 之類命令不支持正則表達式,可以借助于shell通配符來進行匹配。
	shell通配符:
	.:匹配任意一個字符
	*:匹配任意內容
	?:匹配任意一個內容
	[]:匹配中括號中的一個字符
字符匹配
單字符匹配
	.	匹配任意單個字符,當然包括漢字的匹配
	[]	匹配指定范圍內的任意單個字符- 示例:[shuji]、[0-9]、[a-z]、[a-zA-Z]
	[^]	匹配指定范圍外的任意單個字符- 示例:[^shuji] 
	|  匹配管道符左側或者右側的內容
錨定字符
^        行首錨定, 用于模式的最左側           
$        行尾錨定,用于模式的最右側         
^PATTERN$     用于模式匹配整行     
^$            空行      
^[[:space:]]*$  空白行   
\<         		詞首錨定,用于單詞模式的左側   
\>         		詞尾錨定,用于單詞模式的右側   
\<PATTERN\>     匹配整個單詞   
分組符號
 分組符合 ()
	每一個匹配的內容都會在一個獨立的()范圍中
	按照匹配的先后順序,為每個()劃分編號
	第一個()里的內容,用 \1代替,第二個()里的內容,用\2代替,依次類推
	\0 代表正則表達式匹配到的所有

源文件:
server.1=10.0.0.12:2182:2183
命令:
grep server.1 zoo.cfg  | sed -r "s/(.*)=(.*):(.*):(.*)/\3/"
結果:
2182

? 限定符號

*    匹配前面的字符任意次,包括0次,貪婪模式:盡可能長的匹配   
.*   任意長度的任意字符   
?    匹配其前面的字符出現0次或1次,即:可有可無   
+    匹配其前面的字符出現最少1次,即:肯定有且 >=1次   
{m}  匹配前面的字符m次   
{m,n}   匹配前面的字符至少m次,至多n次
{,n}    匹配前面的字符至多n次,<=n
{n,}    匹配前面的字符至少n次
郵箱匹配
 egrep  "^[0-Z_]+\@[0-Z]+\.[0-Z]{2,5}$" testemail.txt
 手機號匹配
 egrep '\<1[3-9][0-9]{9}\>' phone.txt

文件查找與壓縮

文件查找

locate

? locate是Linux系統中用于快速查找文件和目錄的一個非常實用的命令行工具。它主要通過搜索事先構建文件數據庫來定位文件。

--非實時查找	索引的構建是在系統較為空閑時自動進行(周期任務),執行updatedb可以更新數據庫
--查找速度快	locate 查詢系統上預建的文件索引數據庫
    		/var/lib/mlocate/mlocate.db 
--模糊查找	搜索的是文件全路徑,不僅僅是文件名	
--索引構建過程需要遍歷整個根文件系統,很消耗資源
--可能只搜索用戶具備讀取和執行權限的目錄
Ubuntu系統
	apt install -y mlocate
Rocky系統
	yum install -y plocate

命令格式:
	locate 選項 文件
find

? find是Linux系統中一個功能強大且靈活的命令行工具,用于在目錄結構中搜索文件和目錄。

--查找速度略慢
--精確查找
--實時查找
--查找條件豐富
--只搜索用戶具備讀取和執行權限的目錄
命令格式:
	find 路徑 選項 表達式
		-name 文件名
		-iname 忽略大小寫,文件名
		-size 文件大小
		-type 文件類型
		
不指定路徑,表示當前路徑。

-type 值
f       #普通文件
d       #目錄文件
l       #符號鏈接文件
s       #套接字文件
b       #塊設備文件
c       #字符設備文件
p       #管道文

-size [+|-]N UNIT  # N為數字,UNIT為常用單位 k, M, G, c(byte) 等      
#解釋
10k			#表示(9k,10k],大于9k 且小于或等于10k
-10k     	#表示[0k,9k],大于等于0k 且小于或等于9k             
+10k     	#表示(10k,∞),大于10k                   

以天為單位
  -atime [+|-]N       -mtime [+|-]N       -ctime [+|-]N
以分鐘為單位
  -amin [+|-]N        -mmin [+|-]N        -cmin [+|-]N 
#解釋
N  #表示[N,N+1),大于或等于N,小于N+1,表示第N天(分鐘)
+N #表示[N+1,∞],大于或等于N+1,表示N+1天之前(包括)                -N #表示[0,N),大于或等于0,小于N,表示N天(分鐘)


-ls:以ls -dils的格式顯示匹配的文件。
find -name "f*.txt" -ls 類似于 ls -l
-fls:查找結果保存至文件
find -name "f*.txt" -fls ls.log‘
-delete
 find -name "*.sh" -delete
與xargs結合
find ./ -name "*.txt" | xargs -I {} rename 's/.txt$//' {}

文件查找

locate命令

? locate命令是Linux系統中用于快速查找文件和目錄的一個非常實用的命令行工具。它主要通過搜索事先構建文件數據庫來定位文件

命令格式:
locate 選項 表達式

updatedb 更新數據庫

find命令

? find命令是Unix/Linux系統中一個功能強大且靈活的命令行工具,用于在目錄結構中搜索文件和目 錄。它不僅能夠根據文件名、類型、大小、修改時間等屬性進行搜索,還可以對搜索結果執行各種操作,如刪 除、移動、復制等。

命令格式
find 搜索路徑 選項 表達式
	搜索路徑:指定find命令開始搜索的目錄。可以是一個或多個路徑。不指定路徑,表示當前路徑。
	選項:用于定義搜索的條件,如文件名、文件類型、大小、時間等。
	表達式:用于進一步細化搜索條件,可以與選項組合使用來構建復雜的搜索邏輯。

常用選項
	-name:按文件名匹配,區分大小寫。
	-type:按文件類型搜索。
	-size:按文件大小搜索。
	-mtime:按天數查找文件最后修改時間。
	
	-iname:忽略大小寫。
	-regex:正則表達。
類型查找
-type 選項

type值
	f		#普通文件
	d		#目錄文件 
	l		#符號鏈接文件   
	s       #套接字文件
	b       #塊設備文件
	c       #字符設備文件
	p		#管道文件
文件屬性查找
-size [+|-]NUNIT	 # N為數字,UNIT為常用單位 k, M, G, c(byte) 等

#解釋
	10k		#表示(9k,10k],大于9k 且小于或等于10k                                   
	+10k    #表示[0k,9k],大于等于0k 且小于或等于9k                    
	-10k    #表示(10k,∞),大于10k  
文件時間屬性查找
以天為單位
    -atime [+|-]N       -mtime [+|-]N       -ctime [+|-]N
以分鐘為單位
    -amin [+|-]N        -mmin [+|-]N        -cmin [+|-]N

#解釋
N                       #表示[N,N+1),大于或等于N,小于N+1,表示第N天(分鐘)
+N                      #表示[N+1,∞],大于或等于N+1,表示N+1天之前(包括)                -N                      #表示[0,N),大于或等于0,小于N,表示N天(分鐘)內
動作處理
對搜索結果執行各種操作。
-print:打印搜索結果(默認行為)。
-print0 :不換行輸出,常用于配合xargs
-exec:對每個匹配的文件執行指定的命令。命令以{}代表當前文件,命令結尾以;或+結束。
-ls:以ls -dils的格式顯示匹配的文件。

打包壓縮

gz包

命令格式
	gzip 選項 文件
	gunzip 選項 文件

tar包

命令格式
	tar 選項 文件

選項
	-c		#創建一個新歸檔
	-d		#找出歸檔和文件系統的差異
	-r		#追加文件至歸檔結尾
	-t		#列出歸檔內容
	-x		#從歸檔中解出文件
	-z		#通過 gzip 壓縮或解壓縮
	-f		#表示指定存檔文件名
	-v		#列出文件詳細信息
	-C		#改變輸出目錄
壓縮
	tar zcf
解壓					
	tar xcf 		
查看壓縮文件列表
	tar tvf
zip包
解壓
unzip
	-d		#輸出目錄

du -sh

查看目錄大小

軟件管理

軟件相關概念

ABI

? ABI(應用程序二進制接口)是一種定義了應用程序操作系統或者硬件之間交互方式的接口標準,不同的操作系統,他的ABI接口是不一樣的。每個種操作系統,都有對外的ABI接口,軟件要想運行,就必須符合其接口規范才可以。它為開發人員提供了在不同平臺上編寫、編譯和執行應用程序的一致性。

windows 中的是 PE格式
Linux 中的是 ELF格式
API

? API (應用程序編程接口)可以在各種不同的操作系統上實現給應用程序提供完全相同的接口。

由于操作系統的不同,API又分為Windows API和Linux API。
在Windows平臺開發出來的軟件在Linux上無法運行,在Linux上開發的軟件在Windows上又無法運行。
posix

? 為了方便軟件開發人員在不同操作系統中的程序正常開發,要求操作系統應該提供通用功能的接口實現,而這就是POSIX。

程序編譯

? 程序編譯的目的主要是將人類可讀的高級語言代碼轉換成硬件能夠識別的二進制語言,即機器語言或目標代碼。

image-20250824123736444

軟件鏈接

? 程序編譯過程中的鏈接是編譯過程的一個重要階段,它主要負責將多個目標文件(通常是由編譯和匯編階段生成的)以及所需的庫文件合并成一個可執行文件或庫文件。

鏈接類型
靜態鏈接:
在程序編譯時,將程序中使用的所有庫文件(包括標準庫和用戶自定義庫)中的代碼和數據都 "復制" 到最終的可執行文件中。
這種方式的優點是程序在運行時不需要額外的庫文件支持,但缺點是生成的可執行文件體積較大,且如果庫文件更新,需要重新編譯整個程序。

動態鏈接:
在程序編譯時,不將庫文件中的代碼和數據復制到可執行文件中,而是在程序運行時 "由操作系統動態加
載" 所需的庫文件。
這種方式的優點是減少了可執行文件的大小,且庫文件更新后不需要重新編譯整個程序,但缺點是程序運
行時需要依賴外部庫文件。

軟件包管理

? Linux系統中的軟件包是Linux發行版用來組織、安裝和管理軟件的一種方式。它們通常以壓縮包的形式存在,包含了軟件的二進制文件、庫文件、配置文件、文檔等必要組件。

軟件包分類
源碼包:
包含軟件的源代碼文件、編譯指令和配置文件。
需要用戶自行編譯安裝,過程相對復雜,但靈活性高,可以定制安裝選項。
文件格式通常為.tar.gz、.tar.bz2等壓縮格式。
注意:軟件運行所有的文件都會在同一個包文件里面

二進制包:
包含已經編譯好的可執行文件、庫文件、配置文件、幫助文件等,用戶可以直接安裝使用。
常見的二進制包格式有RPM包、DEB包等。
注意:軟件運行所有的文件分別放到相互依賴的多個包文件里面。

RPM包:
主要在Red Hat、Fedora、CentOS等Linux發行版中使用。
可以通過rpm命令進行安裝、卸載、查詢等操作。
DEB包:
主要在Debian、Ubuntu等Linux發行版中使用。
使用dpkg命令進行安裝、卸載等操作,但apt命令更為常用,因為它能自動處理依賴關系。
包管理工具
apt(Debian/Ubuntu):
用于Debian及其衍生版如Ubuntu中的軟件包管理,能夠自動處理依賴關系,并提供豐富的軟件包倉庫。

yum/dnf(CentOS/RHEL):
CentOS和Red Hat Enterprise Linux(RHEL)等發行版中的軟件包管理工具,同樣支持自動處理
依賴關系和軟件包的搜索、安裝、升級等操作。
包命名
源碼包命名格式
命名規則:
	name-VERSION.tar.gz|bz2|xz 
	命名示例:
	nginx-1.25.4.tar.gz 
	------
	nginx			基礎文件名:反映軟件包名稱或項目名稱。
	1.25.4			樣式:主版本號.次版本號.修正版本號   
	tar.gz			擴展名:.tar表示tar歸檔,.gz或.bz2表示壓縮格式。
二進制包命名
命名示例:
	httpd-2.4.57-15.el9.x86_64.rpm:
	------
	httpd			軟件包名。
	2.4.57			包的版本號,格式為“主版本號.次版本號.修正號”。
	15				二進制包發布的次數,表示這是第幾次編譯生成的。
	el9				軟件發行商,表示此包是由Red Hat公司發布
	x86_64			表示此包使用的硬件平臺。
	rpm:RPM			包的擴展名,表明這是編譯好的二進制包,可以直接使用rpm命令安裝。
獲取軟件包
獲取軟件源碼包的地址:
	軟件官網、github、第三方軟件鏡像站
獲取軟件包二進制的地址
	cdrom、軟件官網、github、第三方軟件鏡像站、自己制作

包管理器rpm

安裝
命令格式
	rpm {-i|--install} [install-options] PACKAGE_FILE

常用選項                      
	-ivh        # 安裝軟件       
	-evh        # 卸載軟件
	-q          # 檢查安裝軟件
    
安裝:
	rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm
卸載:
	rpm -evh vsftpd
包查詢
命令格式:
rpm {-q|--query} [select-options] [query-options]

常用選項
	-i			#查詢包詳細信息
	-l			#查看指定的程序包安裝后生成的所有文件
	-f			#查看指定的文件由哪個程序包安裝生成

查詢包詳細信息:
	rpm -qi tree
列出包內所有文件:
	rpm -ql tree
根據文件查詢包信息:
	rpm -qf /bin/tree

yum和dnf

簡介
	yum 和 dnf 都是 Linux 系統中用于軟件包管理的工具[python腳本],它們允許用戶安裝、更新、
刪除和查詢軟件包。盡管它們在功能上非常相似,但它們屬于不同的軟件包管理系統,并且在技術實現和背后
的設計上存在一些差異。
	YUM 最初是為基于 RPM 的 Linux 發行版(如 Fedora、CentOS、RHEL 等)設計的。它起源于 
Yellowdog Linux 發行版,后來經過修改和擴展,成為許多主流 Linux 發行版中不可或缺的一部分。
	DNF 是 Fedora 項目開發的一個新的包管理器,旨在作為 YUM 的繼任者。它最初是作為 YUM 的一個分支項目出現的,但隨著時間的推移,它逐漸發展成為了一個獨立且更加先進的軟件包管理工具。
工作原理
架構模式
yum/dnf 是基于C/S 模式
	yum 服務器存放rpm包和相關包的元數據庫
	yum 客戶端訪問yum服務器進行安裝或查詢等
yum實現過程
	先在yum服務器上創建 yum repository(倉庫),在倉庫中事先存儲了眾多rpm包,以及包的相關的
元數據文件(放置于特定目錄repodata下),當yum客戶端利用yum/dnf工具進行安裝包時,會自動下載
repodata中的元數據,查詢元數據是否存在相關的包及依賴關系,自動從倉庫中找到相關包下載并安裝。

image-20250824152052420

環境配置
yum客戶端配置文件
/etc/yum.conf					#為所有倉庫提供公共配置 
/etc/yum.repos.d/*.repo			#為每個倉庫的提供配置文件
基礎命令
獲取軟件源信息
	yum makecache
清理軟件源信息
	yum clean all
查看源
	yum repolist
查看源信息
	yum repolist -v
全局配置
[倉庫標識 id]
name=倉庫名字					#倉庫名稱
baseurl=倉庫的url地址			#倉庫地址
gpgcheck={1|0} 					#是否對包進行校驗,默認值為1
enabled={1|0} 					#是否啟用,默認值為1
gpgkey={URL}					#校驗key的地址
定制軟件源--阿里源
[aliyun-baseos]
name=aliyun baseos
baseurl=https://mirrors.aliyun.com/rockylinux/9.4/BaseOS/x86_64/os/
gpgcheck=0
定制光盤源
掛載本地光盤到目錄
[root@rocky9 ~]# mount /dev/cdrom /mnt/
[root@rocky9 ~]# ls /mnt/
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo

定制專屬的本地鏡像源信息
------
[root@rocky9 yum.repos.d]# cat cdrom.repo

[cdrom-appstream]
name=cdrom appstream
baseurl=file:///mnt/AppStream/
gpgcheck=0
[cdrom-baseos]
name=cdrom baseos
baseurl=file:///mnt/BaseOS/
gpgcheck=0
BaseOS目錄
內容:存儲著操作系統的核心組件和基本系統工具,如內核、shell工具、系統服務等。
功能:提供操作系統的基本功能和支持,確保系統的正常運行。
AppStream目錄
內容:存儲著用戶可能需要的應用程序和軟件包的元數據信息,以及軟件包依賴關系等。
功能:使用戶可以方便地安裝和管理這些軟件,通常包含用戶界面軟件、開發工具、數據庫工具等
應用程序。
關聯關系:
BaseOS和AppStream兩個目錄之間的關系是互補的。
在安裝和管理軟件時,系統會從這兩個目錄中獲取所需的軟件包和依賴關系,以確保系統的完整性
和穩定性。
yum命令
命令格式:
	yum 選項 命令
常見子命令
	autoremove				#卸載包,同時卸載依賴
	clean					#清除本地緩存
	install					#包安裝
	list					#列出所有包
	makecache				#重建緩存
	search					#包搜索,包括包名和描述
	update					#更新
默認顯示所有 enable 的 repo
yum repolist
查看所有軟件
yum list
安裝軟件
yum install [options] PACKAGE [...]
刪除軟件
yum remove [options] PACKAGE [...]
更新軟件
yum update [options] PACKAGE [...] 
軟件組管理
yum grouplist [options]							#列出所有包組
yum groupinstall [options] group1 [...]			#包組安裝 
yum groupupdate [options] group1 [...]			#包組升級 
yum groupremove [options] group1 [...]			#包組卸載
yum groupinfo [options] group1 [...]			#包組查詢

groupinstall 之后,如果發現內核版本發生了改變,最好執行一下 update一下,以免出現系統軟
件版本兼容性問題,導致登錄界面崩潰。

Ubuntu 軟件管理

? Debian 軟件包通常為預編譯的二進制格式的擴展名“.deb”,類似 rpm 文件,因此安裝快速,無需編 譯軟件。包文件包括特定功能或軟件所必需的文件、元數據和指令。

dpkg:
	package manager for Debian,類似于rpm, dpkg是基于Debian的系統的包管理器。可以安裝,刪除和構建軟件包,但無法自動下載和安裝軟件包或其依賴項。

apt:
	Advanced Packaging Tool,功能強大的軟件管理工具,甚至可升級整個Ubuntu的系統,基于客戶/服務器架構(c/s)
配置文件
deb URL section1 section2
#字段說明
deb		#固定開頭,表示是二進制包的倉庫,如果deb-src開頭,表示是源碼庫            
URL		#庫所在的地址,可以是網絡地址,也可以是本地鏡像地址       
section1	
#Ubuntu版本的代號,可用 lsb_release -sc 命令查看,也可以用 cat /etc/os-release

section2    
#軟件分類,main完全自由軟件 restricted不完全自由的軟件,universe社區支持的軟件multiverse非自由軟件

section1				#主倉
section1-backports		#后備倉
section1-security		#修復倉
section1-updates		#非安全性更新倉
section1-proposed       #預更新倉
定制源文件
root@ubuntu24:~# vim /etc/apt/sources.list

 # 定制阿里云鏡像倉庫
deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe 
multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe 
multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe 
multiverse

 # 定制清華源鏡像倉庫
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe 
multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted 
universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted 
universe multiverse
dpkg 包管理器
命令格式:
	dpkg [<option> ...] <command>
常用選項:
	-i		#安裝軟件
	-r		#卸載軟件
	-v		#檢查包是否安裝
	-s		#顯示已安裝包詳細的信息
	-L		#列出包內所有文件
	-S		#根據文件查詢包信息
apt 命令
命令格式
	apt [options] command
一般選項
	list			#根據名稱列出軟件包			                                   
	search			#搜索軟件包描述                                  
	show|info		#顯示軟件包細節                               
	install			#安裝軟件包		                                 
    purge			#移除軟件包及配置文件                     
	update			#更新可用軟件包列表,只更新索引文件 
	upgrade			#通過 安裝/升級 軟件來更新系統
	
徹底卸載并清理某軟件的完整流程:
apt purge <軟件名>
apt autoremove

? 軟件源更新 APT與YUM

ubuntu rocky
獲取軟件源 apt update yum makecache
清理軟件源緩存 yum clean
更新軟件 apt upgdate yum update

? 軟件本地安裝 dpkg與rpm

ubuntu rocky
安裝軟件 dpkg -i rpm -i
刪除軟件 dpkg -r rpm -e
查看軟件 dpkg -l rpm -q
軟件信息 dpkg -s rpm -qi
軟件文件列表 dpkg -L rpm -ql
反查文件 dpkg -S rpm -qf

源碼包部署

? 雖然有很多開源軟件將軟件打成包,供人們使用,但并不是所有源代碼都打成包,如果想使用開源軟件, 可能需要自已下載源碼,進行編譯安裝。另外即使提供了包,但是生產中需要用于軟件的某些特性,仍然需要 自行編譯安裝。

1 部署make編譯環境
2 獲取項目源代碼文件
3 解壓軟件包
4 編譯安裝軟件
	- configure定制配置 
		-> make編譯生成配置文件 
			-> make install轉移文件到安裝目錄
5 將可執行文件路徑加入PATH環境變量
6 測試效果

系統默認啟動模式設置為 多用戶文本模式
systemctl set-default multi-user.target

文件系統

文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。

操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統

內核中的模塊:ext4, xfs, vfat 
Linux的虛擬文件系統:VFS 
用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
查看磁盤使用的文件系統類型
lsblk -f
lsblk -f /dev/sdb
常見的文件系統類型
Linux:
ext4		#ext 文件系統的最新版。
xfs			#SGI 支持最大8EB的文件系統
swap		#交換分區專用的文件系統
iso9660		#光盤文件系統

Windows:
FAT32		#最多只能支持16TB的文件系統和4GB的文件
NTFS		#最多只能支持16EB的文件系統和16EB的文件
mkfs命令*
命令格式
	mkfs [options] [-t <type>] [fs-options] <device> [<size>]
	mkfs.ext4
	
將 /dev/sdb 磁盤格式化為 ext4 文件系統
mkfs.ext4 /dev/sdb

磁盤存儲

設備文件
字符設備文件:
	--字符設備文件是一種按字節流進行操作的設備,如串口、鍵盤、鼠標等。它們提供的是一種基于字符的輸入輸出接口,可以使用標準的文件操作函數(如read、write、open和close)對其進行操作。

塊設備文件:
	--塊設備文件是一種按塊進行操作的設備,如硬盤、U盤等。它們提供的是一種基于塊的輸入輸出接口,通常使用特定的塊設備操作函數(如request_queue、submit_bio等)進行操作。
	
網絡設備文件:
	--網絡設備文件是一種用于網絡通信的設備,如網卡等。它們提供的是一種基于數據包的輸入輸出接口,可以使用特定的網絡操作函數(如sendmsg、recvmsg等)進行操作。
硬盤接口
IDE:133MB/s,并行接口,早期家用電腦 
SCSI:640MB/s,并行接口,早期服務器,并行接口因為相互影響,所以可能會因為某個接口慢,導致整體
慢。
SATA:6Gbps,SATA數據端口與電源端口是分開的,即需要兩條線,一條數據線,一條電源線 
SAS:6Gbps,SAS是一整條線,數據端口與電源端口是一體化的,SAS中是包含供電線的,而 SATA中不包
含供電線。SATA標準其實是SAS標準的一個子集,二者可兼容,SATA硬盤可以插入SAS主板上,反之不行 
USB:480MB/s 
M.2
常見硬盤
硬盤(HDD)
    傳統的硬盤類型,采用磁性存儲技術,通過盤片的旋轉和磁頭的移動來讀寫數據。
    存儲容量大、價格相對較低,但讀寫速度相對較慢,且存在機械結構,易受震動影響。
    
固態硬盤(SSD)
    采用閃存芯片作為存儲介質的新型硬盤,沒有機械結構,因此讀寫速度極快,抗震性能優越。
    價格相對較高,但隨著技術進步逐漸親民;存儲容量雖然有限,但已能滿足大多數應用需求;適用于需要高讀寫速度和穩定性的場景。
MBR & ZBR
	在計算機存儲領域,MBR和ZBR分別代表了不同的硬盤分區方法和存儲優化技術。MBR主要應用于硬盤的引 導記錄和分區管理,而ZBR則是一種優化硬盤存儲空間的方法。

	MBR(Master Boot Record, MBR)的作用至關重要,硬盤的第一個扇區(0道0頭1扇區),包含硬盤的主引導程序和分區表。它是計算機啟動的關鍵,包含了引導代碼,能夠加載操作系統,并告訴計算機硬盤上的分區信息。
	
	ZBR(Zoned Bit Recording),即區位記錄,是一種物理優化硬盤存儲空間的方法。與傳統的硬盤存儲方式相比,ZBR不再采用每個磁道扇區數固定的方式,而是根據磁道半徑的不同,將更多的扇區放到磁盤的外部磁道,以獲取更多的存儲空間。這種設計使得外部磁道的數據傳輸速度要快于內部磁道,因為單位時間內掃過的扇區數在外部磁道更多。
常見命令
文件系統查看工具 df
命令格式:
    df [OPTION]... [FILE]...
    
df 查看文件系統相關信息
	df -Th
文件系統目錄信息統計工具 du
命令格式:
    du [OPTION]... [FILE]...
    du [OPTION]... --files0-from=F
    
查看指定目錄空間大小信息
	du -sh /etc
文件系統文件定制工具 dd
命令格式:
	dd [OPERAND]... 
	dd OPTION
常用格式
    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST  bs=N count=N
    
測試硬盤寫速度   
dd if=/dev/zero of=/tmp/1Gb.file bs=1024 count=1000000
查看磁盤起始扇區原始數據
hexdump -vC -n 512 /dev/sda
lsblk 顯示設備和分區的基本信息
命令格式:
    lsblk [options] [<device> ...]
常用選項
	-l|--list		#以列表顯示   

fdisk 操作管理分區

命令格式:
    fdisk [options] -l [<disk>]
    	-l  #顯示
    	
fdisk 分區管理
fdisk -l /dev/sda	查看分區信息
image-20250824224909727
創建分區
命令(輸入 m 獲取幫助):n    # 輸入n 創建新分區                               
分區類型
  p   主分區 (0 primary, 0 extended, 4 free)
  e   擴展分區 (邏輯分區容器)
選擇 (默認 p): # 按Enter 創建主分區

分區號 (1-4, 默認 1):      # 按Enter 創建編號1的主分區                               
第一個扇區 (2048-419430399, 默認 2048):    # 按Enter 使用默認空間起始點                
最后一個扇區,+/-sectors 或 +size{K,M,G,T,P} (2048-419430399, 默認 419430399): +10G
# 使用 +/-sectors 或 +size{K,M,G,T,P} 來設定分區空間大小

命令(輸入 m 獲取幫助):w    # 輸入 w 保存分區



非交互式創建分區-echo
echo -e 'n\np\n\n\n+10G\nw' | fdisk /dev/sdb
掛載信息
臨時掛載
mount 設備 掛載點
取消掛載
umount 設備 掛載點
永久掛載:vim /etc/fstab
#UUID="c8dd6954-1b4b-4f9f-a187-a9a27452be84" /mount/xfs xfs defaults 0 0
設備路徑|uuid	UUID="c8dd6954-1b4b-4f9f-a187-a9a27452be84"
掛載點			/mount/xfs
文件系統類型		xfs
掛載屬性		defaults
磁盤的使用邏輯
獲取 - 分區 - 格式化 - 掛載

RAID

? RAID的工作原理是在多個磁盤上分配數據,并以標準化方式促進輸入/輸出操作的重疊。通過將數據分布在多個磁盤上,RAID技術可以實現數據冗余,提高容錯能力,并在多個磁盤上并行讀寫數據,從而提升數據傳輸速度和存儲性能。

? 簡單來說,RAID把多個硬盤組合成為一個邏輯硬盤,因此,操作系統只會把它當作一個實體硬盤。

RAID分類
RAID-0
	以 chunk 單位,讀寫數據,因為讀寫時都可以并行處理,所以在所有的級別中,RAID 0的速度是最快
的。但是RAID 0既沒有冗余功能,也不具備容錯能力,如果一個磁盤(物理)損壞,所有數據都會丟失.
RAID-1
	也稱為鏡像(Mirroring),它將數據同時寫入兩個磁盤,實現數據的完全冗余。RAID 1提供了最高的數據安全性,在一些多線程操作系統中能有很好的讀取速度,理論上讀取速度等于硬盤數量的倍數,但磁盤利用率只有50%,且寫入速度相對較慢。它適用于保存關鍵性重要數據的場合。
RAID-5
	也稱為分布式奇偶校驗(Distributed Parity),它將數據和奇偶校驗信息分散在多個磁盤上。RAID 5可以容錯一個磁盤的故障,同時提供較高的讀寫速度和磁盤利用率。它是目前綜合性能最佳的數據保護解決方案之一,廣泛應用于數據中心等場景。
RAID-6
	與RAID 5類似,但提供了更強的容錯能力,可以容錯兩個磁盤的故障。然而,RAID 6需要更多的磁盤空間,成本更高,且寫入性能相對較差。它主要用于對數據安全等級要求非常高的場合。
RAID-10
	 RAID-10也被稱為RAID 1+0,是RAID 1與RAID 0的結合體。它首先創建多個RAID 1鏡像對,然后將這些鏡像對組合成一個RAID 0陣列。這種結構既提供了RAID 0的高性能,又具備了RAID 1的數據冗余和容錯能力。
	 由于采用了RAID 0的條帶化技術,RAID-10能夠并行讀寫多個磁盤,從而顯著提高數據傳輸速度。

LVM

? LVM 即邏輯卷管理器,是Linux系統下對磁盤分區進行管理的一種機 制。LVM在硬盤分區和文件系統之間添加了一個邏輯層,為文件系統屏蔽了下層的磁盤分區布局,提供了一個抽 象的卷組,用戶可以在這個卷組上創建文件系統。

物理存儲介質:
	指系統的存儲設備,如硬盤,是存儲系統的最低層存儲單元。
------
PV(物理卷):
是LVM存儲管理的最底層,可以是整個物理硬盤或實際物理硬盤上的分區。
物理卷在加入LVM之前需要經過特殊處理,以便LVM能夠識別和管理。
VG(卷組):
是建立在物理卷之上的一個邏輯層,它包含了一個或多個物理卷。
卷組將多個物理卷組合在一起,形成一個可管理的單元,類似于非LVM系統中的物理硬盤。
LV(邏輯卷):
是建立在卷組之上的一個邏輯層,它類似于非LVM系統中的硬盤分區。
邏輯卷可以在其上建立文件系統,并掛載到不同的掛載點,用于存儲數據。
------
PE(物理區域):
是物理卷中可用于分配的最小存儲單元。PE的大小是可配置的,默認為4MB。
在建立卷組時,物理區域的大小會被指定,并且一旦確定就不能更改。
同一卷組中的所有物理卷的物理區域大小必須一致。
LE(邏輯區域):
是邏輯卷中可用于分配的最小存儲單元。
邏輯區域的大小取決于邏輯卷所在卷組中的物理區域的大小,即一個LE對應一個PE。

image-20250824185914603

PE與PV的關系:
	PE是物理卷(PV)中可用于分配的最小存儲單元。
	每個物理卷都會被劃分為多個PE,這些PE是LVM進行存儲分配的基本單位。
------
LE與LV的關系:
	LE是邏輯卷(LV)中可用于分配的最小存儲單元。
	每個邏輯卷都會被劃分為多個LE,這些LE與卷組中的PE一一對應。
------
VG與PV的關系:
	卷組(VG)建立在物理卷(PV)之上,一個卷組可以包含多個物理卷。
	物理卷在加入卷組之前需要被初始化為LVM物理卷。
------
LV與VG的關系:
	邏輯卷(LV)建立在卷組(VG)之上,卷組中的未分配空間可以用于創建新的邏輯卷。
	邏輯卷在創建后可以動態地擴展和縮小空間,以適應不同的存儲需求。
環境部署
Rocky系統
    yum install -y lvm2
 Ubuntu系統
    apt install -y lvm2
基礎知識
物理卷信息查看命令:
	pvs						#簡要pv信息顯示
	pvdisplay				#顯示詳細信息
創建PV命令:
	pvcreate /dev/DEVICE	#創建物理卷
刪除PV命令
    pvremove /dev/DEVICE	
------

卷組信息查看命令:
    vgs						#簡要vg信息顯示           
    vgdisplay               #顯示詳細信息            
創建VG命令:
    vgcreate [-s Size ] vgname pv1 [pv2...] # 創建VG
	# -s 指定PE大小,數字加單位,單位為 k|K|m|M|g|G|t|T|p|P|e|E
刪除卷組命令
    vgremove vgname			#刪除vg之前,要先把對應的 pv 解除綁定 (pvmove) 

------
邏輯卷信息查看命令
    lvs                     #簡要lv信息顯示            
    Lvdisplay               #顯示詳細信息            
    lvscan                  #查看lv的具體名稱路徑            
創建LV命令:
    lvcreate {-L N[mMgGtT]|-l N} -n NAME VolumeGroup
	選項參數:
		-L|--size N[mMgGtT] #指定大小                      
		-l|--extents N      #指定PE個數,也可用百分比                    
		-n Name             #邏輯卷名稱  
刪除lv命令
    lvremove /dev/VG_NAME/LV_NAME
創建LVM流程
- pvcreate → 初始化物理設備為 PV
	- vgcreate → 將 PV 組合為 VG
		- lvcreate → 從 VG 劃分空間創建 LV
			- mkfs.xxx → 格式化 LV
				- mount → 掛載使用(并配置永久掛載)
將兩個物理磁盤分區,創建兩個pv
pvcreate /dev/sdb1 /dev/sdc1
檢測當前的pv信息
pvs
	查看/dev/sdb1的信息
	pvdisplay /dev/sdb1
	
將兩個物理卷,創建一個vg
vgcreate -s 16M testvg /dev/sdb1 /dev/sdc1
檢測當前的vg信息
vgs
	查看testvg的詳情信息
	vgdisplay testvg

從 testvg 中創建lv1,大小為 100個PE
lvcreate -l 100 -n lv1 testvg
檢測當前的vg信息
lvs
查看testvg的詳情信息
lvdisplay /dev/testvg/lv1

格式化lv
mkfs.ext4 /dev/testvg/lv1
掛載lv環境
mount /dev/testvg/lv1 /mount/lvm/
擴展邏輯卷
要先保證卷組上還有空間
擴展方式1: 
	先擴展邏輯卷      
	lvextend -L [+]N[mMgGtT] /dev/VG_NAME/LV_NAME
	再擴容文件系統     
	resize2fs /dev/VG_NAME/LV_NAME
    xfs_growfs MOUNTPOINT
    同步文件系統
		針對ext:resize2fs /dev/VG_NAME/LV_NAME
		針對xfs:xfs_growfs MOUNTPOINT
擴展方式2: 一步實現容量和文件系統的擴展
	lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
縮減邏輯卷
縮減邏輯卷:
縮減有數據損壞的風險,建議先備份再縮減,不支持在線縮減,要先取消掛載,xfs文件系統不支持縮減
1 取消掛載
	umount /dev/VG_NAME/LV_NAME
2 文件系統檢測,e2fsck可寫成fsck
	e2fsck -f /dev/VG_NAME/LV_NAME
3 縮減文件系統到指定大小
	resize2fs /dev/VG_NAME/LV_NAME N[mMgGtT]
4 縮減邏輯卷
	lvreduce -L [-] N[mMgGtT] /dev/VG_NAME/LV_NAME
5 重新掛載
mount /dev/VG_NAME/LV_NAME mountpoint
注意:
3+4 可以簡寫為 lvreduce  -L N[mMgGtT] -r /dev/VG_NAME/LV_NAME
lvm資源刪除
卸載邏輯卷:使用umount命令卸載邏輯
umount /mount/lvm
刪除邏輯卷:使用lvremove命令刪除邏輯卷。
lvremove /dev/testvg/lv1
刪除卷組:使用vgremove命令刪除卷組
vgremove testvg
刪除物理卷:使用pvremove命令刪除物理卷。
pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1