目錄
- 硬碟儲存術語CHS
- 磁碟儲存管理
- LVM
- RAID硬碟陣列
- 軟體包管理
- 搭建私有yum倉庫
- 系統安裝之後的常用初始化步驟
- OSI七層模型
- linux埠的簡單介紹
- TCP簡單介紹
- ip地址分類
硬碟儲存術語CHS
- head:磁頭 磁頭數=盤面數
- track:磁軌 磁軌=柱面數
- sector:扇區,512bytes
- cylinder:柱面 1柱面=512 * sector數/trackhead數=51263*255=7.84M
#檢視CHS
[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda:30 GiB,32212254720 位元組,62914560 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x69b7b195
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 62914559 60815360 29G 8e Linux LVM
#0代表SSD,1代表機械
[root@localhost ~]# lsblk -d -o name,rota
NAME ROTA
sda 1
sr0 1
磁碟儲存管理
磁碟分割槽的優點:
- 最佳化I/O效能
- 實現磁碟空間配額限制
- 提高修復速度
- 隔離系統和程式
- 採用不同檔案系統
分割槽方式:
兩種分割槽方式:MBR,GPT
MBR結構
Boot Sector(引導扇區):
位置:硬碟的第一個扇區(LBA 0)。
大小:512 位元組。
內容:
Bootstrap Code(引導程式碼):佔用前 446 位元組,用於啟動作業系統的程式碼。
Partition Table(分割槽表):佔用接下來的 64 位元組,包含最多 4 個主分割槽的描述資訊。
Signature(簽名):最後 2 位元組,固定為 0xAA55,用於標識這是一個有效的 MBR 扇區。
Partition Table(分割槽表):
每個分割槽條目:16 位元組。
條目數量:最多 4 個條目。
內容:
Status(活動標誌):1 位元組,表示該分割槽是否為活動分割槽。
CHS Address(柱面-磁頭-扇區地址):6 位元組,表示分割槽的起始和結束位置。
Partition Type(分割槽型別):1 位元組,表示分割槽的型別(如 NTFS、FAT32 等)。
LBA Address(邏輯塊地址):8 位元組,表示分割槽的起始 LBA 地址和分割槽的大小。
Extended Partitions(擴充套件分割槽):
邏輯分割槽:擴充套件分割槽可以包含多個邏輯分割槽,每個邏輯分割槽有自己的分割槽表。
鏈式結構:邏輯分割槽的分割槽表位於擴充套件分割槽的第一個扇區,每個邏輯分割槽指向下一個邏輯分割槽的分割槽表。
優點
相容性:廣泛支援舊作業系統和 BIOS。
簡單:結構簡單,容易理解和實現。
缺點
分割槽限制:最多隻能有 4 個主分割槽(或 3 個主分割槽加 1 個擴充套件分割槽)。
最大容量:支援的最大分割槽大小為 2 TB(使用 512 位元組扇區)
GPT結構
Protective MBR(保護性 MBR):
位置:硬碟的第一個扇區(LBA 0)。
內容:類似於傳統的 MBR,但只有一個佔位的分割槽,用於防止舊的作業系統誤認為硬碟是未分割槽的。
Primary GPT Header(主 GPT 頭):
位置:硬碟的第二個扇區(LBA 1)。
大小:通常為 512 位元組。
內容:
Signature(簽名):固定為 EFI PART。
Version(版本號):GPT 規範的版本。
Size(大小):GPT 頭的大小。
CRC32 Checksum(校驗和):用於驗證 GPT 資料的完整性。
Current LBA(當前 LBA 地址):GPT 頭所在的位置。
Backup LBA(備份 LBA 地址):備份 GPT 頭所在的位置。
Partition Entries LBA(分割槽條目 LBA 地址):分割槽條目表的起始位置。
Number of Partition Entries(分割槽條目數量):分割槽條目的總數。
Size of Partition Entry(分割槽條目大小):每個分割槽條目的大小。
Partition Entries(分割槽條目表):
位置:從 Partition Entries LBA 開始。
內容:
Partition Type GUID(分割槽型別 GUID):表示分割槽的型別。
Unique Partition GUID(唯一分割槽 GUID):表示分割槽的唯一標識。
Starting LBA(起始 LBA 地址):分割槽的起始位置。
Ending LBA(結束 LBA 地址):分割槽的結束位置。
Attributes(屬性):分割槽的屬性。
Name(名稱):分割槽的名稱。
Backup GPT Header(備份 GPT 頭):
位置:硬碟的最後一個扇區(LBA -1)。
內容:與主 GPT 頭相同,用於冗餘和恢復。
優點
分割槽數量:支援最多 128 個分割槽。
最大容量:支援超過 2 TB 的分割槽大小,理論上支援到 EB(Exabyte)級別的分割槽。
冗餘:主 GPT 頭和備份 GPT 頭提供冗餘,增強了資料的可靠性。
唯一標識:每個分割槽都有唯一的 GUID,便於管理和識別。
缺點
相容性:不被所有舊作業系統和 BIOS 支援,需要 UEFI 引導。
複雜性:結構相對複雜,實現和管理較為複雜
總結
-
MBR:適用於小容量硬碟(<= 2 TB),最多支援 4 個主分割槽,相容舊作業系統和 BIOS。
-
GPT:適用於大容量硬碟(> 2 TB),支援更多分割槽(最多 128 個),提供冗餘和唯一標識,需要 UEFI 引導。
分割槽管理
#列出塊裝置
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 29G 0 part
├─rl-root 253:0 0 26G 0 lvm /
└─rl-swap 253:1 0 3G 0 lvm [SWAP]
sr0 11:0 1 2G 0 rom
#檢視分割槽情況
[root@localhost ~]# blkid
/dev/sdb1: UUID="b47109a2-041c-4c77-97c3-bf37caf8b307" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="058053f9-01"
/dev/sdb5: UUID="1687a324-305d-4821-aa09-c6ce363ff5be" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="058053f9-05"
/dev/sda1: UUID="982d5922-9968-45a9-9859-6ef07c69a7ec" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="69b7b195-01"
/dev/sda2: UUID="98V7kE-7aau-G2sA-extU-3uaQ-Oq56-5AfVXZ" TYPE="LVM2_member" PARTUUID="69b7b195-02"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-14-09-30-59-00" LABEL="Rocky-8-5-x86_64-dvd" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
/dev/mapper/rl-root: UUID="30bcee18-3966-47e9-8b91-cd0e8ae0312a" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rl-swap: UUID="eda505fd-1f26-4fd4-89fd-980c9789c618" TYPE="swap"
建立分割槽命令
fdisk 管理MBR分割槽
gdisk 管理GPT分割槽(和fdisk用法類似)
parted 高階分割槽操作,可以是互動或非互動方式
分割槽型別
主分割槽
標識:主分割槽的編號通常是從 1 開始的連續數字,例如 /dev/sda1、/dev/sda2。
限制:最多 4 個主分割槽。
擴充套件分割槽
標識:擴充套件分割槽通常編號為 /dev/sda4(如果前三個是主分割槽)。
限制:一個磁碟上只能有一個擴充套件分割槽。
邏輯分割槽
標識:邏輯分割槽的編號從 5 開始,例如 /dev/sda5、/dev/sda6。
限制:邏輯分割槽只能從擴充套件分割槽裡分,例如:擴充套件分割槽有10G,那麼建立邏輯分割槽時最大隻有10G,且建立個數沒有限制。
fdisk命令
fdisk [裝置名]
常用選項:
p:列印當前磁碟的分割槽表
n:建立新分割槽
d:刪除分割槽
t:更改分割槽型別
w:儲存更改並退出 fdisk
q:不儲存更改並退出 fdisk
l:列出所有已知的分割槽型別
m:顯示所有可用的命令
範例:
#建立主分割槽
[root@localhost ~]# lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 29G 0 part
sdb 8:16 0 20G 0 disk
sr0 11:0 1 2G 0 rom
rl-root 253:0 0 26G 0 lvm /
rl-swap 253:1 0 3G 0 lvm [SWAP]
[root@localhost ~]# lsblk /dev/sdb -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
[root@localhost ~]# fdisk /dev/sdb
裝置不包含可識別的分割槽表。
建立了一個磁碟識別符號為 0x058053f9 的新 DOS 磁碟標籤。
命令(輸入 m 獲取幫助):n #建立新分割槽
分割槽型別
p 主分割槽 (0個主分割槽,0個擴充套件分割槽,4空閒)
e 擴充套件分割槽 (邏輯分割槽容器)
選擇 (預設 p):p #建立主分割槽
分割槽號 (1-4, 預設 1): #選擇分割槽號
第一個扇區 (2048-41943039, 預設 2048): #從2048往後開始
上個扇區,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 預設 41943039): +5G
建立了一個新分割槽 1,型別為“Linux”,大小為 5 GiB。
命令(輸入 m 獲取幫助):p #檢視分割槽表
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
命令(輸入 m 獲取幫助):w #儲存退出
分割槽表已調整。
將呼叫 ioctl() 來重新讀分割槽表。
正在同步磁碟。
[root@localhost ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part
#建立擴充套件分割槽和邏輯分割槽
[root@localhost ~]# fdisk /dev/sdb
命令(輸入 m 獲取幫助):n
分割槽型別
p 主分割槽 (1個主分割槽,0個擴充套件分割槽,3空閒)
e 擴充套件分割槽 (邏輯分割槽容器)
選擇 (預設 p):e
分割槽號 (2-4, 預設 2):
第一個扇區 (10487808-41943039, 預設 10487808):
上個扇區,+sectors 或 +size{K,M,G,T,P} (10487808-41943039, 預設 41943039): +5G
建立了一個新分割槽 2,型別為“Extended”,大小為 5 GiB。
命令(輸入 m 獲取幫助):p
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 5 擴充套件
命令(輸入 m 獲取幫助):n
分割槽型別
p 主分割槽 (1個主分割槽,1個擴充套件分割槽,2空閒)
l 邏輯分割槽 (從 5 開始編號)
選擇 (預設 p):l
新增邏輯分割槽 5
第一個扇區 (10489856-20973567, 預設 10489856):
上個扇區,+sectors 或 +size{K,M,G,T,P} (10489856-20973567, 預設 20973567): +2G
建立了一個新分割槽 5,型別為“Linux”,大小為 2 GiB。
命令(輸入 m 獲取幫助):p
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 5 擴充套件
/dev/sdb5 10489856 14684159 4194304 2G 83 Linux
命令(輸入 m 獲取幫助):w
分割槽表已調整。
將呼叫 ioctl() 來重新讀分割槽表。
正在同步磁碟。
[root@localhost ~]# lsblk /dev/sdb -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdb1 8:17 0 5G 0 part
sdb2 8:18 0 1K 0 part
sdb5 8:21 0 2G 0 part
擴充套件分割槽:顯示為 1K 是正常的,因為它是一個容器分割槽,不直接儲存資料。
驗證方法:使用 fdisk -l 或 parted print 命令可以檢視擴充套件分割槽和邏輯分割槽的詳細資訊
檔案系統
- 建立好分割槽後,只是相當於建立了一個容量空間,需要建立一個檔案系統來負責管理和儲存檔案資訊。
- 從系統角度來看,檔案系統是對檔案儲存裝置的空間進行組織和分配,負責檔案儲存並對存入的檔案進行保護和檢索的系統。具體地說,它負責為使用者建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存取,安全控制,日誌,壓縮,加密等。
- 建立檔案系統可以理解為windows的磁碟格式化,一個新加盤,如果沒有進行格式化處理是沒有辦法使用的。
- 在建立檔案系統時可以指定塊大小,塊即存放檔案的最小單位,例如:指點塊大小為4k,無論存放的檔案有多小,它都要佔據4k的儲存空間。
linux中常用的檔案系統
Ext4 (Fourth Extended File System)
特點:
* EXT4是Linux系統下的日誌檔案系統,是EXT3檔案系統的後繼版本
* Ext4的檔案系統容量達到1EB,而支援單個檔案則達到16TB
* 理論上支援無限數量的子目錄
* Ext4檔案系統使用64位空間記錄塊數量和 inode數量
* Ext4的多塊分配器支援一次呼叫分配多個資料塊
* 修復速度更快
應用場景:目前最常用的 Linux 檔案系統之一,廣泛應用於各種 Linux 發行版。
XFS (Extended File System)
特點:
* 根據所記錄的日誌在很短的時間內迅速恢復磁碟檔案內容
* 用最佳化演算法,日誌記錄對整體檔案操作影響非常小
* 是一個全64-bit的檔案系統,最大可以支援8EB的檔案系統,而支援單個檔案則達到8EB
* 能以接近裸裝置I/O的效能儲存資料
應用場景:適用於需要高效能儲存的場景,如資料庫伺服器和檔案伺服器。
掛載
- 掛載:將額外檔案系統與根檔案系統某現存的目錄建立起關聯關係,進而使得此目錄做為其它檔案訪問入口的行為。
- 解除安裝:為解除此關聯關係的過程。
- 掛載點下原有檔案在掛載完成後會被臨時隱藏,因此,掛載點目錄一般為空。
- 程序正在使用中的裝置無法被解除安裝。
建立檔案系統
#sda的檔案系統是xfs,掛載到了/root下,sdb什麼都沒有
[root@localhost yum.repos.d]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 982d5922-9968-45a9-9859-6ef07c69a7ec /boot
└─sda2 LVM2_membe 98V7kE-7aau-G2sA-extU-3uaQ-Oq56-5AfVXZ
├─rl-root xfs 30bcee18-3966-47e9-8b91-cd0e8ae0312a /
└─rl-swap swap eda505fd-1f26-4fd4-89fd-980c9789c618 [SWAP]
sdb
├─sdb1
├─sdb2
└─sdb5
sr0 iso9660 Rocky-8-5-x86_64-dvd 2021-11-14-09-30-59-00
#給sdb1建立了ext4
[root@localhost yum.repos.d]# mkfs.ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
建立含有 1310720 個塊(每塊 4k)和 327680 個inode的檔案系統
檔案系統UUID:b47109a2-041c-4c77-97c3-bf37caf8b307
超級塊的備份儲存於下列塊:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配組表: 完成
正在寫入inode表: 完成
建立日誌(16384 個塊)完成
寫入超級塊和檔案系統賬戶統計資訊: 已完成
#給sdb5建立xfs
[root@localhost ~]# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#檢查和修復檔案系統錯誤
[root@localhost /]# fsck.ext4 /dev/sdb1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1 已掛載。
e2fsck: 無法繼續,已中止。
[root@localhost /]# xfs_repair /dev/sdb5
xfs_repair: /dev/sdb5 contains a mounted filesystem
Unmount or use the dangerous (-d) option to repair a read-only mounted filesystem
fatal error -- couldn't initialize XFS library
#顯示 XFS 檔案系統的詳細資訊
[root@localhost /]# xfs_info /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
掛載命令
mount [options] file
常見選項:
-t fstype 指定要掛載的裝置上的檔案系統型別,如:ext4,xfs
-o ro 只讀掛載
-o rw 只寫掛載
-o remount 重新掛載
-w read and write, 讀寫掛載,此為預設設定,可省略
-n 不更新/etc/mtab,mount不可見
-a 自動掛載所有支援自動掛載的裝置(定義在了/etc/fstab檔案中,且掛載選項中有
auto功能)
-L 'LABEL' 以卷標指定掛載裝置
-U 'UUID' 以UUID指定要掛載的裝置
-B, --bind 繫結目錄到另一個目錄上
#檢視掛載情況
[root@localhost ~]# mount
#臨時掛載
[root@localhost ~]# mount /dev/sdb1 /logs
#只讀掛載,只能在/mysql目錄裡讀檔案
[root@localhost /]# mount -o ro /dev/sdb5 /mysql
#取消掛載
[root@localhost ~]# umount /dev/sdb1 /logs
#永久掛載(defaults代表預設規則即rw,也可以直接修改為ro)
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="b47109a2-041c-4c77-97c3-bf37caf8b307" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="058053f9-01"
#複製sdb1的UUID,按照格式寫入
[root@localhost ~]# vim /etc/fstab
/dev/mapper/rl-root / xfs defaults 0 0
UUID=982d5922-9968-45a9-9859-6ef07c69a7ec /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
UUID=b47109a2-041c-4c77-97c3-bf37caf8b307 /logs ext4 defaults 0 0
#配置檔案生效 (-a代表新增加的行會生效,如果是在原基礎上進行修改則不會生效)
[root@localhost ~]# mount -a
#重新掛載(只修改了fstab的內容,沒有新加行)
[root@localhost ~]# mount -o remount /logs
swap虛擬記憶體
檢視swap大小
[root@localhost /]# free -h
total used free shared buff/cache available
Mem: 3.6Gi 205Mi 3.0Gi 8.0Mi 440Mi 3.2Gi
Swap: 3.0Gi 0B 3.0Gi
禁用swap
[root@localhost /]# swapoff -a
#用#註釋掉swap那行
[root@localhost /]# vim /etc/fstab
啟用swap
[root@localhost /]# swapon -a
#刪除swap那行的#
[root@localhost /]# vim /etc/fstab
新增swap分割槽
#使用 l 檢視id編號 , 使用 t 修改id為82,即swap
[root@localhost /]# fdisk /dev/sdb
命令(輸入 m 獲取幫助):n
分割槽型別
p 主分割槽 (1個主分割槽,1個擴充套件分割槽,2空閒)
l 邏輯分割槽 (從 5 開始編號)
選擇 (預設 p):l
新增邏輯分割槽 6
第一個扇區 (14686208-20973567, 預設 14686208):
上個扇區,+sectors 或 +size{K,M,G,T,P} (14686208-20973567, 預設 20973567): +1G
建立了一個新分割槽 6,型別為“Linux”,大小為 1 GiB。
命令(輸入 m 獲取幫助):l
0 空 24 NEC DOS 81 Minix / 舊 Linu bf Solaris
1 FAT12 27 隱藏的 NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隱藏 或 In c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 擴充套件 c7 Syrinx
5 擴充套件 41 PPC PReP Boot 86 NTFS 卷集 da 非檔案系統資料
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 純文字 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可啟動 4f QNX4.x 第3部分 93 Amoeba e1 DOS 訪問
a OS/2 啟動管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 ea Rufus 對齊
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 擴充套件 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 隱藏的 FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC
12 Compaq 診斷 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 隱藏的 FAT16 <3 61 SpeedStor ab Darwin 啟動 f4 SpeedStor
16 隱藏的 FAT16 63 GNU HURD 或 Sys af HFS / HFS+ f2 DOS 次要
17 隱藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST 智慧睡眠 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b 隱藏的 W95 FAT3 70 DiskSecure 多啟 bb Boot Wizard 隱 fd Linux raid 自動
1c 隱藏的 W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e 隱藏的 W95 FAT1 80 舊 Minix be Solaris 啟動 ff BBT
命令(輸入 m 獲取幫助):t
分割槽號 (1,2,5,6, 預設 6): 6
Hex 程式碼(輸入 L 列出所有程式碼):82
命令(輸入 m 獲取幫助):p
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 5 擴充套件
/dev/sdb5 10489856 14684159 4194304 2G 83 Linux
/dev/sdb6 14686208 16783359 2097152 1G 82 Linux swap / Solaris
已將分割槽“Linux”的型別更改為“Linux swap / Solaris”。
命令(輸入 m 獲取幫助):p
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 5 擴充套件
/dev/sdb5 10489856 14684159 4194304 2G 83 Linux
/dev/sdb6 14686208 16783359 2097152 1G 82 Linux swap / Solaris
建立 swap 檔案系統
[root@localhost /]# mkswap /dev/vdb6
掛載swap
[root@localhost /]# vim /etc/fstab
#新增這一行
UUID=b47109a2-041c-4c77-97c3-bf37caf8b345 swap swap defaults 0 0
#swap生效
[root@localhost /]# swapon -a
修改swap的啟動閾值
[root@localhost /]# vim /etc/sysctl.conf
#新增這行
vm.swappiness = 10
#檔案生效
[root@localhost /]# sysctl -p
#檢視閾值
[root@localhost /]# cat /proc/sys/vm/swappiness
10
LVM
LVM 的基本概念
- Physical Volume (PV):物理卷,即物理硬碟或分割槽,它是 LVM 的基礎。
- Volume Group (VG):卷組,由一個或多個物理卷組成,相當於一個大的儲存池。
- Logical Volume (LV):邏輯卷,從卷組中劃分出來的虛擬分割槽,可以格式化為檔案系統並掛載使用。
LVM 的基本操作流程
- 建立物理卷 (PV)
- 建立卷組 (VG)
- 建立邏輯卷 (LV)
- 格式化和掛載邏輯卷
#在原有盤的空閒空間裡再分出一個分割槽作為物理卷
[root@localhost ~]# fdisk /dev/sdb
命令(輸入 m 獲取幫助):n
分割槽型別
p 主分割槽 (1個主分割槽,1個擴充套件分割槽,2空閒)
l 邏輯分割槽 (從 5 開始編號)
選擇 (預設 p):p
分割槽號 (3,4, 預設 3):
第一個扇區 (20973568-41943039, 預設 20973568):
上個扇區,+sectors 或 +size{K,M,G,T,P} (20973568-41943039, 預設 41943039): +5G
建立了一個新分割槽 3,型別為“Linux”,大小為 5 GiB。
命令(輸入 m 獲取幫助):t
分割槽號 (1-3, 預設 3): 3
Hex 程式碼(輸入 L 列出所有程式碼):8e #修改id編碼為8e
已將分割槽“Linux”的型別更改為“Linux LVM”。
命令(輸入 m 獲取幫助):p
Disk /dev/sdb:20 GiB,21474836480 位元組,41943040 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x058053f9
裝置 啟動 起點 末尾 扇區 大小 Id 型別
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 5 擴充套件
/dev/sdb3 20973568 31459327 10485760 5G 8e Linux LVM
命令(輸入 m 獲取幫助):w
分割槽表已調整。
正在同步磁碟。
#建立 物理卷
[root@localhost ~]# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
#建立卷組,testvg是卷組名
[root@localhost ~]# vgcreate testvg /dev/sdb3
Volume group "testvg" successfully created
#建立邏輯卷, -L 2G是卷大小, -n後接卷組名 log_lv是邏輯卷名
[root@localhost ~]# lvcreate -L 2G -n testvg log_lv
Volume group "log_lv" not found
Cannot process volume group log_lv
常用查詢命令:
pvdisplay #檢視物理卷詳細資訊
vgdisplay #檢視卷組詳細資訊
lvdisplay #檢視邏輯卷詳細資訊
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <5.00 GiB
PE Size 4.00 MiB #PE是指塊大小,在建立卷組的時候可以指定塊的大小(-s 16M即一個塊的大小是16M)
Total PE 1279 #1279*4就等於卷組的大小
Alloc PE / Size 512 / 2.00 GiB
Free PE / Size 767 / <3.00 GiB
VG UUID OEKnZ4-HsGz-ZfZD-v4iS-mjZu-BbWD-PKxjlw
#給邏輯卷建立檔案系統
[root@localhost ~]# mkfs.ext4 /dev/testvg/log_lv
mke2fs 1.45.6 (20-Mar-2020)
建立含有 524288 個塊(每塊 4k)和 131072 個inode的檔案系統
檔案系統UUID:92eef0d9-7839-4588-ac59-44f36dae360b
超級塊的備份儲存於下列塊:
32768, 98304, 163840, 229376, 294912
正在分配組表: 完成
正在寫入inode表: 完成
建立日誌(16384 個塊)完成
寫入超級塊和檔案系統賬戶統計資訊: 已完成
#新增掛載點
[root@localhost ~]# vim /etc/fstab
UUID=92eef0d9-7839-4588-ac59-44f36dae360b /logs ext4 defaults 0 0
#注意:不能掛載到原有的目錄上,會導致覆蓋,資料丟失,需要掛載到新目錄。
#配置生效
[root@localhost ~]# mount -a
擴容邏輯卷
#將卷組剩餘的儲存大小全部加到邏輯卷裡
[root@localhost ~]# lvextend -l +100%free /dev/mapper/testvg/log_lv
Size of logical volume testvg/log_lv changed from 2.00 GiB (512 extents) to <5.00 GiB (1279 extents).
Logical volume testvg/log_lv successfully resized.
#將原來的邏輯卷的檔案系統同步到新加入的儲存裡
[root@localhost ~]# resize2fs /dev/testvg/log_lv
resize2fs 1.45.6 (20-Mar-2020)
/dev/testvg/log_lv 上的檔案系統已被掛載於 /logs;需要進行線上調整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/testvg/log_lv 上的檔案系統現在為 1309696 個塊(每塊 4k)。
卷組擴容
#建立lvm分割槽
[root@localhost ~]# fdisk /dev/sdb
命令(輸入 m 獲取幫助):n
分割槽型別
p 主分割槽 (2個主分割槽,1個擴充套件分割槽,1空閒)
l 邏輯分割槽 (從 5 開始編號)
選擇 (預設 p):p
已選擇分割槽 4
第一個扇區 (31459328-41943039, 預設 31459328):
上個扇區,+sectors 或 +size{K,M,G,T,P} (31459328-41943039, 預設 41943039):
建立了一個新分割槽 4,型別為“Linux”,大小為 5 GiB。
命令(輸入 m 獲取幫助):t
分割槽號 (1-4, 預設 4): 4
Hex 程式碼(輸入 L 列出所有程式碼):8e
已將分割槽“Linux”的型別更改為“Linux LVM”。
命令(輸入 m 獲取幫助):w
分割槽表已調整。
正在同步磁碟。
#建立物理卷
[root@localhost ~]# pvcreate /dev/sdb4
Physical volume "/dev/sdb4" successfully created.
#將物理卷加入到testvg卷組裡
[root@localhost ~]# vgextend testvg /dev/sdb4
Volume group "testvg" successfully extended
#邏輯卷擴容,在原基礎上+2G(-L 10G則是總大小變成10G)
# -r 是自動同步檔案系統
[root@localhost ~]# lvextend -r -L +2G /dev/testvg/log_lv
RAID硬碟陣列
RAID 0
工作原理:資料被分割成塊,然後交替寫入多個硬碟。每個硬碟上儲存一部分資料.
利用率:100%。
冗餘性:無冗餘。任何一塊硬碟故障都會導致資料丟失。
效能:讀寫效能非常高,因為資料可以並行讀寫。
最少硬碟數:2 塊硬碟。
RAID 1
工作原理:資料被完全複製到兩個或多個硬碟上。每個硬碟上儲存相同的完整資料,相當於備份。
利用率:50%。只有總容量的一半被用於儲存資料。
冗餘性:高冗餘。任何一個硬碟故障都不會影響資料的完整性。
效能:讀效能高,因為可以從任意一個硬碟讀取資料;寫效能一般,因為需要同步寫入所有硬碟。
最少硬碟數:2 塊硬碟。
RAID 5
工作原理:把資料和相對應的奇偶校驗資訊儲存到組成的RAID5的各個磁碟上,並且奇偶校驗資訊和相對應的資料分佈儲存於不同的磁碟上,當RAID5的一個磁碟資料發生損壞後,利用剩下的資料和相應的奇偶校驗資訊區恢復被損壞的資料.
利用率:(n-1)/n,其中 n 是硬碟的數量。例如,4 塊硬碟的利用率是 75%。
冗餘性:中等冗餘。可以容忍一個硬碟故障而不會丟失資料。
效能:讀效能高,因為資料可以並行讀取.
最少硬碟數:3 塊硬碟。
RAID 10
工作原理:先將硬碟分成兩個或多個 RAID 1 組,然後在這幾個 RAID 1 組之間進行 RAID 0 條帶化。
利用率:50%。每個 RAID 1 組的利用率是 50%,再進行條帶化後的利用率仍然是 50%。
冗餘性:高冗餘。可以容忍每個 RAID 1 組中的一個硬碟故障。
效能:讀寫效能都非常高,因為資料可以並行讀寫。
最少硬碟數:4 塊硬碟
RAID 10
工作原理:先將硬碟分成兩個或多個 RAID 0 組,然後在這幾個 RAID 0 組之間進行 RAID 1 映象。
利用率:50%。每個 RAID 0 組的利用率是 100%,再進行映象後的利用率是 50%。
冗餘性:高冗餘。可以容忍每個 RAID 0 組中的一個硬碟故障。
效能:讀寫效能都非常高,因為資料可以並行讀寫。
最少硬碟數:4 塊硬碟。
軟體包管理
常見的程式包管理器
RPM
RPM 是一個低階別的包管理工具,主要用於處理 .rpm 包檔案。它提供了基本的包管理功能,如安裝、刪除、查詢和驗證軟體包。
rpm命令
安裝 .rpm 檔案:
rpm -ivh <package_file.rpm>
安裝 .rpm 檔案並忽略依賴關係:
rpm -ivh --nodeps <package_file.rpm>
刪除已安裝的包:
rpm -e <package_name>
刪除已安裝的包並忽略依賴關係:
sudo rpm -e --nodeps <package_name>
檢視已安裝包的資訊:
rpm -q <package_name>
檢視已安裝包的檔案列表:
rpm -ql <package_name>
檢視已安裝包的配置檔案列表:
rpm -qc <package_name>
檢視已安裝包的依賴關係:
rpm -qR <package_name>
查詢包含特定檔案的包:
rpm -qf <file_path>
列出所有已安裝的包:
rpm -qa
更新 .rpm 檔案:
rpm -Uvh <package_file.rpm>
重新整理包資料庫並更新包:
rpm -Fvh <package_file.rpm>
驗證已安裝包的完整性:
rpm -V <package_name>
驗證所有已安裝包的完整性:
rpm -Va
YUM/DNF(centos)
DNF是 CentOS 8 及更高版本以及其他基於 Red Hat 的發行版中的預設包管理器。(是YUM的升級版)
yum客戶端配置
/etc/yum.conf #為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo #為倉庫提供配置檔案
[root@localhost etc]# cat yum.conf
[main]
gpgcheck=1 #安裝包前要做包的合法和完整性校驗
installonly_limit=3 #同時可以安裝3個包,最小值為2,如設為0或1,為不限制
clean_requirements_on_remove=True #刪除包時,是否將不再使用的包刪除
best=True #升級時,自動選擇安裝最新版,即使缺少包的依賴
skip_if_unavailable=False
搭建yum倉庫
[root@localhost yum.repos.d]# cat Rocky-BaseOS.repo
[baseos]
name=Rocky Linux $releasever - BaseOS
#mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[root@localhost yum.repos.d]# cat Rocky-AppStream.repo
[appstream]
name=Rocky Linux $releasever - AppStream
#mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=AppStream-$releasever
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
yum命令
yum repolist all # 顯示倉庫列表
yum repolist -v # 顯示倉庫的詳細資訊
yum update # 更新所有已安裝的包
yum install <package_name> # 安裝包sudo yum remove <package_name> # 刪除包
yum clean all # 清理快取
yum makecache # 構建快取
APT/dpkg(ubuntu)
dpkg:主要用於處理 .deb 包檔案,提供低階別的包管理功能,適合於手動安裝、刪除和查詢單個包檔案。
apt:高階的包管理工具,提供了更高階別的包管理功能,如依賴解析、包列表更新、多源管理等。
dpkg用法:
#安裝包,不支援包的依賴
dpkg -i package.deb
#刪除包,不建議,不自動解除安裝依賴於它的包
dpkg -r package
#刪除包(包括配置檔案)
dpkg -P package
#列出當前已安裝的包,類似rpm -qa
dpkg -l
#顯示該包的簡要說明
dpkg -l package
#列出該包的狀態,包括詳細資訊,類似rpm –qi
dpkg -s package
#列出該包中所包含的檔案,類似rpm –ql
dpkg -L package
#搜尋包含pattern的包,類似rpm –qf
dpkg -S <pattern>
#配置包,-a 使用,配置所有沒有配置的軟體包
dpkg --configure package
#列出 deb 包的內容,類似rpm –qpl
dpkg -c package.deb
#解開 deb 包的內容
dpkg --unpack package.deb
dpkg範例:
#列出系統上安裝的所有軟體包
dpkg -l
#列出軟體包安裝的檔案
dpkg -L bash
#檢視/bin/bash來自於哪個軟體包
dpkg -S /bin/bash
#安裝本地的 .deb 檔案
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
#解除安裝軟體包
dpkg -r zip
注意:一般建議不要使用dpkg解除安裝軟體包。因為刪除包時,其它依賴它的包不會解除安裝,並且可能無法再
正常執行
apt範例:
修改阿里雲的APT源為清華源
sed -i 's/mirrors.aliyun.com/mirrors.tuna.tsinghua.edu.cn/'
/etc/apt/sources.list
#安裝包:
apt install tree zip
#安裝deb包,注意:包檔案前必須加路徑
apt install ./mongodb-database-tools-ubuntu1804-x86_64-100.5.1.deb
#安裝圖形桌面
apt install ubuntu-desktop
#刪除包:
apt remove tree zip
#說明:apt remove中新增--purge選項會刪除包配置檔案,謹慎使用
#更新包索引,相當於yum clean all;yum makecache
apt update
#升級包:要升級系統,請首先更新軟體包索引,再升級
apt upgrade
#apt列出倉庫軟體包,等於yum list
apt list
#搜尋安裝包
apt search nginx
#檢視某個安裝包的詳細資訊
apt show apache2
#線上安裝軟體包
apt install apache2
#解除安裝單個軟體包但是保留配置⽂件
apt remove apache2
#刪除安裝包並解決依賴關係
apt autoremove apache2
#更新本地軟體包列表索引,修改了apt倉庫後必須執⾏
apt update
#解除安裝單個軟體包刪除配置⽂件
apt purge apache2
#升級所有已安裝且可升級到新版本的軟體包
apt upgrade
#升級整個系統,必要時可以移除舊軟體包。
apt full-upgrade
#編輯source源⽂件
apt edit-sources
#檢視倉庫中軟體包有哪些版本可以安裝
apt-cache madison nginx
#安裝軟體包的時候指定安裝具體的版本
apt install nginx=1.14.0-0ubuntu1.6
軟體管理案例
#查詢存在的檔案來自於哪個包
#dpkg -S filename :在當前安裝的包裡查詢檔案
dpkg -S /bin/ls
#檢視包相關資訊
#顯示系統安裝包的統計資訊,可以統計已經安裝包的數量,大小,佔用空間等
apt-cache stats
#顯示xxx包的資訊,可以看到某個包的源、版本等資訊
apt-cache show xxx #更詳細
apt show xxx
#檢視倉庫中的指定軟體的所有版本
apt-cache madison xxx
#檢視檔案的依賴
#查詢軟體xxx依賴哪些包
apt depends xxx
apt-cache depends xxx
#查詢軟體xxx被哪些包依賴
apt rdepends xxx
apt-cache rdepends xxx
#ubuntu常用包
apt purge ufw lxd lxd-client lxcfs liblxc-common
apt install iproute2 ntpdate tcpdump telnet traceroute nfskernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev
zlib1g-dev gcc openssh-server iotop unzip zip
搭建私有yum倉庫
YUM的工作原理:
- 配置檔案:
YUM 使用 /etc/yum.repos.d/ 目錄下的 .repo 檔案來配置倉庫。每個 .repo 檔案定義了一個或多個倉庫,指定了倉庫的名稱、URL 和其他屬性。 - 後設資料同步:
YUM 會從配置的倉庫中下載後設資料(如包列表、依賴關係等)。後設資料通常包括包的名稱、版本、依賴關係等資訊。 - 依賴解析:
YUM 使用下載的後設資料來解析依賴關係,確保安裝的包及其依賴都能正確安裝。YUM 會自動處理依賴關係,確保所有必要的包都被安裝。 - 事務管理:
YUM 在執行安裝、更新或刪除操作時,會建立一個事務,確保操作的原子性和一致性。如果某個操作失敗,YUM 會回滾事務,確保系統的一致性。 - 快取管理:
*YUM 會快取下載的包和後設資料,以減少網路流量和提高效能。快取通常儲存在 /var/cache/yum/ 目錄下。
DNF工作原理:
- 配置檔案:
DNF 使用與 YUM 相同的配置檔案,即 /etc/yum.repos.d/ 目錄下的 .repo 檔案。每個 .repo 檔案定義了一個或多個倉庫,指定了倉庫的名稱、URL 和其他屬性。 - 後設資料同步:
DNF 會從配置的倉庫中下載後設資料。後設資料通常包括包的名稱、版本、依賴關係等資訊。DNF 使用更高效的後設資料格式,提高了下載和解析速度。 - 依賴解析:
DNF 使用更高效的依賴解析演算法,能夠更好地處理複雜的依賴關係。DNF 會自動處理依賴關係,確保所有必要的包都被安裝。 - 模組支援:
DNF 支援模組,允許使用者在多個軟體包集合中選擇特定的模組流。模組化功能使得使用者可以更容易地管理和更新軟體包集合。 - 事務管理:
DNF 在執行安裝、更新或刪除操作時,會建立一個事務,確保操作的原子性和一致性。如果某個操作失敗,DNF 會回滾事務,確保系統的一致性。 - 快取管理:
DNF 會快取下載的包和後設資料,以減少網路流量和提高效能。快取通常儲存在 /var/cache/dnf/ 目錄下。
以本機作為yum倉庫的伺服器,讓其他主機能夠使用本機配置的私有倉庫。
第一步:安裝httpd(或者nginx),讓其他主機能夠訪問服務
[root@localhost etc]# yum install -y httpd
第二步:建立yum目錄
[root@localhost etc]# mkdir -p /var/www/html/rockylinux/8/{BaseOS,extras,AppStream}
[root@localhost etc]# tree /var/www/html
/var/www/html
└── rockylinux
└── 8
├── AppStream
├── BaseOS
└── extras
5 directories, 0 files
注意:/var/www/html 是 Apache HTTP 伺服器的預設文件根目錄。當使用者透過瀏覽器訪問你的網站時,Apache 會從這個目錄中讀取檔案併傳送給客戶端。所以我們的倉庫需要放在這個目錄下。
#使用光碟作為yum倉庫
第三步:掛載光碟,並將光碟內自帶的BaseOS複製到/var/www/html/rockylinux/8/下
[root@localhost BaseOS]# mount /dev/cdrom /mnt
[root@localhost BaseOS]# cp -r /mnt/* /var/www/html/rockylinux/8/
第四步:在客戶機上配置新的yum倉庫,原先的yum源記得先備份
[root@localhost yum.repos.d]# cat /etc/yum.repos.d/test.repo
[BaseOS]
name=my BaseOS
baseurl=http://192.168.93.200/rockylinux/8/BaseOS
gpgkey=0
[AppStream]
name=appstream
baseurl=http://192.168.93.200/rockylinux/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=my extras
baseurl=http://192.168.93.200/rockylinux/8/extras/
gpgcheck=0
#檢查是否生效
[root@localhost yum.repos.d]# yum repolist
Repository extras is listed more than once in the configuration
倉庫 id 倉庫名稱
AppStream appstream
baseos my BaseOS
epel Extra Packages for Enterprise Linux 8 - x86_64
extras my extras
#清除快取
[root@localhost yum.repos.d]# yum clean all
#生成快取
[root@localhost yum.repos.d]# yum makecache
從網上拉取extras倉庫拉取到本地
[root@localhost yum.repos.d]# dnf reposync --repoid=extras --download-metadata -p /var/www/html/rockylinux/8/
系統安裝之後的常用初始化步驟
Rocky linux
# 更新所有已安裝的包
dnf upgrade
# 安裝常用的開發工具和庫
dnf install epel-release
dnf groupinstall "Development Tools"
dnf install vim wget curl git
# 啟動or關閉 防火牆
systemctl enable firewalld
systemctl stop firewalld
# 檢視當前的防火牆規則
firewall-cmd --list-all
# 永久關閉 SELinux(可選)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置時區
timedatectl set-timezone Asia/Shanghai
ubuntu
# 更新包列表
apt update
# 升級所有已安裝的包
apt upgrade
# 安裝常用的開發工具和庫
apt install build-essential
apt install vim wget curl git
# 配置時區
timedatectl set-timezone Asia/Shanghai
OSI七層模型
物理層
作用:最底層,負責物理傳輸。(簡單理解就是網線)。
協議:Ethernet、ISDN、SONET、SDH、USB、HDMI、Wi-Fi等。
資料鏈路層
作用:負責節點之間的可靠傳輸。
協議:Ethernet、PPP(點對點協議)、HDLC(高階資料鏈路控制)、ATM(非同步傳輸模式)等。
網路層
作用:負責資料包的路由選擇和轉發。
協議:IP(網際網路協議)、ICMP(網際網路控制訊息協議)、ARP(地址解析協議)、RARP(反向地址解析協議)、RIP(路由資訊協議)等。
傳輸層
作用:負責兩個節點之間的資料傳輸,確保資料能夠被可靠的傳輸到目標地址。
協議:TCP(傳輸控制協議)、UDP(使用者資料包協議)等。
會話層
作用:負責建立和管理會話。
協議:NetBIOS、RPC(遠端過程呼叫)、SQL(結構化查詢語言)、SMB(伺服器訊息塊)、TLS(傳輸層安全)、SSL(安全套接層)等。
表示層
作用:負責資料的表示和轉換。
協議:JPEG、MPEG、ASCII、PNG、GIF、TLS、SSL等。
應用層
作用:負責應用程式之間的通訊,提供使用者介面和服務。它是 OSI 模型的最高層,直接面向使用者。
協議:HTTP(超文字傳輸協議)、HTTPS(安全超文字傳輸協議)、FTP(檔案傳輸協議)、SMTP(簡單郵件傳輸協議)、IMAP(網際網路郵件訪問協議)、DNS(域名系統)、SNMP(簡單網路管理協議)、Telnet等。
linux埠的簡單介紹
埠號範圍:
0-1023:系統埠,通常由系統服務使用。
1024-49151:註冊埠,可以被使用者程序使用。
49152-65535:動態埠,通常由作業系統自動分配給客戶端連線。
埠型別:
TCP(傳輸控制協議):面向連線的協議,提供可靠的傳輸。
UDP(使用者資料包協議):無連線的協議,提供不可靠但高效的傳輸。
#檢視所有監聽的 TCP 埠
[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
#檢視所有監聽的 UCP 埠
[root@localhost ~]# netstat -uln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
#檢視監聽的指定埠
[root@localhost ~]# netstat -tuln | grep 80
tcp6 0 0 :::80 :::* LISTEN
#檢視firewalld防火牆規則
[root@localhost ~]# firewall-cmd --list-all
# 新增允許特定埠的規則
[root@localhost ~]# firewall-cmd --add-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --add-port=53/udp --permanent
# 重新載入firewalld防火牆規則
[root@localhost ~]# firewall-cmd --reload
# 刪除允許特定埠的規則
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --remove-port=53/udp --permanent
# 重新載入防火牆規則
[root@localhost ~]# firewall-cmd --reload
# 檢視當前的 iptables 規則
[root@localhost ~]# iptables -L -v -n
# 儲存 iptables 規則
[root@localhost ~]# service iptables save
# 刪除特定埠的規則
[root@localhost ~]# iptables -D INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -D INPUT -p udp --dport 53 -j ACCEPT
# 儲存 iptables 規則
[root@localhost ~]# service iptables save
# 測試與遠端主機的特定埠的連線
[root@localhost ~]# telnet 192.168.93.201:80
# 臨時調整動態埠範圍
[root@localhost ~]# sysctl -w net.ipv4.ip_local_port_range="20000 60000"
# 永久調整
[root@localhost ~]# nano /etc/sysctl.conf
net.ipv4.ip_local_port_range = 20000 60000
[root@localhost ~]# sysctl -p
# 檢視當前的動態埠範圍
[root@localhost ~]# sysctl net.ipv4.ip_local_port_range
TCP簡單介紹
TCP特性:
工作在傳輸層
面向連線協議
全雙工協議
半關閉
將資料打包成段,排序
確認機制
資料恢復,重傳
錯誤檢查
流量控制,滑動視窗
擁塞控制,慢啟動和擁塞避免演算法
TCP包頭結構:
欄位 | 長度(位元組) | 描述 |
---|---|---|
源埠 | 2 | 傳送方的埠號 |
目標埠 | 2 | 接收方的埠號 |
序列號 | 4 | 當前資料包的第一個位元組的序列號 |
確認號 | 4 | 下一個期望接收的資料包的序列號 |
資料偏移 | 1 | 表示 TCP 頭部的長度,以 32 位(4 位元組)為單位 |
保留 | 1 | 保留欄位,必須設為 0 |
控制標誌 | 1 | 包含多個標誌位,每個位表示一個標誌 |
視窗大小 | 2 | 接收方的接收視窗大小,表示傳送方可以傳送的最大資料量 |
校驗和 | 2 | 用於檢查整個 TCP 報文段的完整性 |
緊急指標 | 2 | 如果 URG 標誌被設定,表示緊急資料的偏移量 |
選項 | 可變 | 用於提供額外的功能,如最大段大小(MSS)、視窗縮放等 |
填充 | 可變 | 用於確保頭部長度為 32 位的倍數 |
控制標誌
標誌 | 位 | 描述 |
---|---|---|
URG | 5 | 緊急指標有效 |
ACK | 4 | 確認號欄位有效 |
PSH | 3 | 推送資料,要求接收方立即將資料傳遞給上層應用 |
RST | 2 | 重置連線,用於強制斷開連線 |
SYN | 1 | 同步序列號,用於建立連線 |
FIN | 0 | 結束連線,用於關閉連線 |
TCP 三次握手
TCP 三次握手是建立連線的過程,確保雙方準備好進行資料傳輸。以下是三次握手的詳細步驟:
第一次握手:
客戶端傳送一個帶有 SYN 標誌的 TCP 段到伺服器。
客戶端的序列號為 seq=x。
客戶端進入 SYN_SENT 狀態。
第二次握手:
伺服器收到客戶端的 SYN 段後,回覆一個帶有 SYN 和 ACK 標誌的 TCP 段。
伺服器的序列號為 seq=y,確認號為 ack=x+1。
伺服器進入 SYN_RECV 狀態。
第三次握手:
客戶端收到伺服器的 SYN+ACK 段後,回覆一個帶有 ACK 標誌的 TCP 段。
客戶端的序列號為 seq=x+1,確認號為 ack=y+1。
客戶端進入 ESTABLISHED 狀態。
伺服器收到客戶端的 ACK 段後,進入 ESTABLISHED 狀態。
簡單總結:客戶端傳送 SYN,伺服器回覆 SYN+ACK,客戶端再傳送 ACK,雙方進入 ESTABLISHED 狀態
TCP 四次揮手
TCP 四次揮手是斷開連線的過程,確保雙方都準備好結束連線。以下是四次揮手的詳細步驟:
第一次揮手:
客戶端傳送一個帶有 FIN 標誌的 TCP 段到伺服器。
客戶端的序列號為 seq=x。
客戶端進入 FIN_WAIT_1 狀態。
第二次揮手:
伺服器收到客戶端的 FIN 段後,回覆一個帶有 ACK 標誌的 TCP 段。
伺服器的序列號為 seq=y,確認號為 ack=x+1。
伺服器進入 CLOSE_WAIT 狀態。
客戶端收到伺服器的 ACK 段後,進入 FIN_WAIT_2 狀態。
第三次揮手:
伺服器完成資料傳輸後,傳送一個帶有 FIN 標誌的 TCP 段到客戶端。
伺服器的序列號為 seq=y+1。
伺服器進入 LAST_ACK 狀態。
第四次揮手:
客戶端收到伺服器的 FIN 段後,回覆一個帶有 ACK 標誌的 TCP 段。
客戶端的序列號為 seq=x+1,確認號為 ack=y+2。
客戶端進入 TIME_WAIT 狀態,等待 2MSL(最大段生存時間)後完全關閉連線。
伺服器收到客戶端的 ACK 段後,進入 CLOSED 狀態。
簡單總結:客戶端傳送 FIN,伺服器回覆 ACK,伺服器傳送 FIN,客戶端回覆 ACK,雙方進入關閉狀態
ip地址分類
IPv4 地址主要分為五類:A 類、B 類、C 類、D 類和 E 類。其中,A 類、B 類和 C 類用於單播地址,D 類用於組播地址,E 類保留用於實驗和研究。
1. A 類地址
地址範圍:0.0.0.0 到 127.255.255.255
網路號:前 8 位(第一個位元組)
主機號:後 24 位(剩餘三個位元組)
子網掩碼:預設為 255.0.0.0 或 /8
示例:10.0.0.1,子網掩碼為 255.0.0.0
特點:適用於大型網路,每個網路最多可以有 16,777,214 臺主機。
2. B 類地址
地址範圍:128.0.0.0 到 191.255.255.255
網路號:前 16 位(前兩個位元組)
主機號:後 16 位(剩餘兩個位元組)
子網掩碼:預設為 255.255.0.0 或 /16
示例:172.16.0.1,子網掩碼為 255.255.0.0
特點:適用於中型網路,每個網路最多可以有 65,534 臺主機。
3. C 類地址
地址範圍:192.0.0.0 到 223.255.255.255
網路號:前 24 位(前三個位元組)
主機號:後 8 位(最後一個位元組)
子網掩碼:預設為 255.255.255.0 或 /24
示例:192.168.1.1,子網掩碼為 255.255.255.0
特點:適用於小型網路,每個網路最多可以有 254 臺主機。
4. D 類地址
地址範圍:224.0.0.0 到 239.255.255.255
用途:組播地址,用於多播通訊
特點:不用於單播地址,而是用於向多個主機傳送資料。
5. E 類地址
地址範圍:240.0.0.0 到 255.255.255.255
用途:保留用於實驗和研究
特點:不用於常規網路通訊。
IP 地址的組成
一個 IPv4 地址由 32 位二進位制陣列成,通常以點分十進位制的形式表示,分為四個 8 位(一個位元組)的部分,每個部分用一個點分隔。例如,192.168.1.1。
二進位制表示
192.168.1.1 的二進位制表示為:
192 -> 11000000
168 -> 10101000
1 -> 00000001
1 -> 00000001
組合起來就是:11000000.10101000.00000001.00000001
子網掩碼
子網掩碼用於區分網路地址和主機地址。子網掩碼也是一個 32 位的二進位制數,通常也以點分十進位制的形式表示。
A 類地址:預設子網掩碼為 255.0.0.0 或 /8
二進位制表示:11111111.00000000.00000000.00000000
B 類地址:預設子網掩碼為 255.255.0.0 或 /16
二進位制表示:11111111.11111111.00000000.00000000
C 類地址:預設子網掩碼為 255.255.255.0 或 /24
二進位制表示:11111111.11111111.11111111.00000000
特殊地址
迴環地址:127.0.0.1,用於本地主機的測試。
廣播地址:255.255.255.255,用於向網路內的所有主機傳送資料。
私有地址:用於內部網路,不直接連線到網際網路。
A 類:10.0.0.0 到 10.255.255.255
B 類:172.16.0.0 到 172.31.255.255
C 類:192.168.0.0 到 192.168.255.255
總結
A 類地址:適用於大型網路,網路號佔 8 位,主機號佔 24 位。
B 類地址:適用於中型網路,網路號佔 16 位,主機號佔 16 位。
C 類地址:適用於小型網路,網路號佔 24 位,主機號佔 8 位。
D 類地址:用於組播通訊。
E 類地址:保留用於實驗和研究。
舉例:
計算201.222.200.111/18計算主機數和子網掩碼
給定的 CIDR 表示法 /18 表示子網掩碼中有 18 位是網路位,其餘 14 位是主機位。
子網掩碼的二進位制表示
網路位:18 位
主機位:32 - 18 = 14 位
因此,子網掩碼的二進位制表示為:
11111111.11111111.11000000.00000000
將其轉換為點分十進位制表示:
255.255.192.0
計算主機數
主機數是指在一個子網中可以分配給主機的 IP 地址數量。由於主機位是 14 位,主機數的計算公式為:
主機數 = 2^主機位 - 2
這裡減去 2 是因為一個子網中的第一個地址通常用作網路地址,最後一個地址用作廣播地址。
主機位:14 位
計算主機數:
主機數 = 2^14 - 2
= 16384 - 2
= 16382
當A(10.0.1.1/16)與B(10.0.2.2/24)通訊,A如何判斷是否在同一個網段?A和B能否通訊?
1. 計算 A 的網路地址
IP 地址: 10.0.1.1
子網掩碼: /16,即 255.255.0.0
將 IP 地址和子網掩碼轉換為二進位制形式:
IP 地址: 10.0.1.1 -> 00001010.00000000.00000001.00000001
子網掩碼: 255.255.0.0 -> 11111111.11111111.00000000.00000000
進行按位與運算:
00001010.00000000.00000001.00000001
11111111.11111111.00000000.00000000
------------------------------------
00001010.00000000.00000000.00000000
將結果轉換為點分十進位制表示:
10.0.0.0
因此,A 的網路地址是 10.0.0.0。
2. 計算 B 的網路地址
IP 地址: 10.0.2.2
子網掩碼: /24,即 255.255.255.0
將 IP 地址和子網掩碼轉換為二進位制形式:
IP 地址: 10.0.2.2 -> 00001010.00000000.00000010.00000010
子網掩碼: 255.255.255.0 -> 11111111.11111111.11111111.00000000
進行按位與運算:
00001010.00000000.00000010.00000010
11111111.11111111.11111111.00000000
------------------------------------
00001010.00000000.00000010.00000000
將結果轉換為點分十進位制表示:
10.0.2.0
因此,B 的網路地址是 10.0.2.0。
3. 比較網路地址
A 的網路地址: 10.0.0.0
B 的網路地址: 10.0.2.0
由於 10.0.0.0 和 10.0.2.0 不相同,因此 A 和 B 不在同一個網段。
雖然 A 和 B 不在同一個網段,但是隻要網路中存在適當的路由配置,A 和 B 是可以相互通訊的。