nginx

配置結構
主配置文件/etc/nginx

# --- 全局配置段 --			控制軟件運行
user ...;
worker_processes ...;
...
# --- 事件驅動相關的配置 --			接受連接用戶
events {
	...;
}

# --- http/https 協議相關配置段 --			處理連接
http {
	...;
	server {							具體的網站配置
		...;
		location {						具體的訪問url請求
			...;
		}
	}
}

? 文件如何控制

image-20250817151649414

? 流量訪問邏輯過程

1 解析域名對應的ip地址

2 建立TCP/IP連接

3 HTTP請求的處理
	3.1 發送請求頭
	3.2 處理請求
	3.3 發送響應
	3.4 關閉連接
node、npm

? Node.js 是?個基于 Chrome V8 引擎的 JavaScript 運?環境,讓 JavaScript 可以在服務器端運?。

? 創建node項目

image-20250817154442570

? 運行程序,訪問網站

image-20250817155144853

? npm 是 Node.js 的默認包管理器,類似于手機應用市場。其主要功能是管理 Node.js 項目中的各種依賴包。

? 默認配置快速創建

image-20250817155526056

? 定制專屬的鏡像源

image-20250817160852042

? 創建???件 index.js

image-20250817161335995

? 運行程序,訪問網站

image-20250817161854942


文件管理

? 將linux的文件系統拆分成兩部分:文件系統和文件管理系

	文件系統:操作系統用于組織和存儲文件及數據的方法和數據結構。它定義了數據如何在存儲設備(如硬盤)上被組織、命名、訪問和修改。
	
	文件管理系統:可以理解為操作系統中與文件管理相關的所有功能和工具的集合。

? 文件系統類型

FAT32常用于U盤、存儲卡等移動設備,因其簡單結構和廣泛兼容性而受歡迎。

NTFS是Windows操作系統的標準文件系統,支持高級功能,如文件權限、加密、壓縮和磁盤配額。

ext4是Linux系統中廣泛使用的文件系統,它繼承了ext3的優點,并在性能和穩定性方面有所提升。

HFS+是macOS系統早期使用的文件系統,而APFS是Apple為macOS、iOS等系統設計的最新文件系統。

? linux目錄結構

image-20250817164101630
常見目錄
	用戶:/root、/home
	設備:/dev
	命令:/bin、/sbin、/user/bin、/usr/sbin
	系統:/var、/usr、/etc、/proc

? 文件類型

普通文件:最常見的文件類型,包含文本、數據、程序代碼等。

目錄文件:目錄用于存儲其他文件的路徑名和相關信息,被視為一種特殊的文件。

鏈接文件:鏈接文件分為硬鏈接和軟鏈接。
	硬鏈接指向文件的inode節點,允許多個文件名與同一個文件關聯。
	軟鏈接是一個特殊的文件,它指向另一個文件或目錄的路徑,可以跨文件系統。
	
特殊文件:特殊文件主要指的是設備文件,它們通常位于/dev目錄下。

可執行文件:可執行文件是包含程序代碼的文件,可以被操作系統直接執行。

其他文件:
	管道文件:管道文件主要用于進程間通訊。
	套接字文件:用于進程間的網絡通信,也可以用于本機之間的非
網絡通信

? 文件顏色

藍色:表示目錄文件。
白色:表示普通文件。
淺藍色(或青藍色):表示鏈接文件。
綠色:表示可執行文件。
紅色:表示壓縮文件或歸檔文件(如tar包)。
黃色:表示設備文件。
紅色閃爍:表示鏈接文件有問題或無法訪問。

? 查看文件信息

ll
file 文件
stat 文件
鏈接文件

? 在Linux系統中,鏈接文件是一種特殊的文件類型,它允許文件或目錄在文件系統中以多種方式被引用或 訪問。鏈接文件主要分為兩種類型:硬鏈接和軟鏈接

創建硬鏈接  
    ln 源文件 目標文件  
創建符號鏈接  
    ln -s 源文件 目標文件
查看鏈接指向的文件
    readlink 鏈接文件
    
硬鏈接:
	硬鏈接不會增加inode的數量,也不會消耗額外的磁盤空間(除了鏈接本身所占用的少量空間)。
	刪除任何一個硬鏈接文件名,只要還有其他的硬鏈接存在,文件數據就不會被刪除。
	硬鏈接有一些限制,如不能跨文件系統創建,也不能直接鏈接到目錄
	
軟鏈接:
	符號鏈接的大小通常很小,因為它只包含路徑名。
	刪除符號鏈接不會影響它所指向的文件,但如果刪除了所指向的文件,符號鏈接就會失效。
	符號鏈接可以跨文件系統創建,也可以鏈接到目錄。
	
	簡單來說,硬連接像一間屋子多開了扇門,軟鏈接像多了個導航。

IO實踐

? 重定向

覆蓋式重定向:
	> 表示將符號左側的內容,以覆蓋的方式輸入到右側文件中
	< 表示將符號右側的內容,以覆蓋的方式輸入到左側文件或命令中
追加式重定向:
	>> 表示將符號左側的內容,以追加的方式輸入到右側文件的末尾行中
	<< 表示將符號右側的內容,以追加的方式輸入到左側文件的末尾行中

? 管道符

命令1 | 命令2
管道符左側命令1 執行后的結果,傳遞給管道符右側的命令2使用

? 終端輸出

& 就是將一個命令從前臺轉到后臺執行,使用格式如下:
命令 &

? 信息符號

Linux給程序提供三種 I/O 設備
	標準輸入(STDIN) -0   默認接受來自終端窗口的輸入
	標準輸出(STDOUT)-1   默認輸出到終端窗口,正確的輸出信息
	標準錯誤(STDERR)-2   默認輸出到終端窗口,錯誤的輸出信息
信息代指:
	2>&1 代表所有輸出的信息

?

read

? 命令可以實現我們腳本內外的信息自由傳遞功能。

read answer			#從標準輸入讀取輸入并賦值給變量answer。
	-s				#不輸入效果
	-p				#打印提示,等待輸入
	-t				#等待時長

用戶管理與權限管理

用戶基礎
Linux系統的用戶
	1 用戶分類
		超級用戶 root 0
		普通用戶 1+
        	系統用戶 1~999
        		-- 系統軟件程序
        	普通用戶 1000+
        		-- 手工創建
	2 用戶批量管理
    	用戶組里面 --常見資源的 通用操作權限
    				方便用戶操作某些資源
		用戶組:
			可以自己創建
			創建用戶時,會自動創建一個同名的用戶組
安全上下文 --程序所處的環境

Ubuntu --AppArmor 比較嚴格

Rocky --SELinux 比較寬松

? SELinux --建議禁用

查看SELinux是否運行
getenforce
臨時關閉
setenforce 0
永久關閉
vim /etc/selinux/config
SELINUX=enforcing 改為 SELINUX=disabled
reboot

? firewalld --建議禁用

#查看防火墻狀態
systemctl status firewalld.service
#關閉
systemctl stop firewalld.service
用戶登錄和退出
Rocky的日志:
	/var/log/secure
	/var/log/audit/audit.log
Ubuntu的日志:
	/var/log/auth.log

配置文件*

用戶的操作 [增改]  
			useradd
			userdel
用戶管理文件
		/etc/passed #用戶及其屬性信息
		/etc/shadow #用戶密碼及其相關屬性
		
		/etc/group #租及其屬性信息
		/etc/gshadow #組密碼及其相關屬性
		

? /etc/passwd 文件解析

image-20250811163918890

? /etc/shadow

image-20250811164330179
用戶管理

用戶組

groupadd 組名	#新建用戶組
		-g 指定GID
grep 組名 /etc/group	#查看組信息
groupdel 組名	#刪除組
		-f 強制刪除    
gpasswd -a 用戶名 組名 #將用戶添加到用戶組
			-d 刪除

用戶

ip 用戶名| id #查看用戶信息

useradd #新建用戶
		-m 創建家目錄 -g 指定組 -u 指定GID
用戶創建的配置文件 /etc/default/useradd 
passwd 用戶名 #修改密碼
	root用戶無視限制,普通用戶長度限制、弱密碼限制等,且只能修改自己的。
echo '用戶名:密碼' | chpasswd #修改密碼

echo '密碼'| passwd --stdin 用戶名 (Rocky專用)
usermod -L 用戶名 #禁用用戶
userdel -r 用戶名 刪除用戶,并清理家目錄

用戶配置文件

/etc/default/useradd  #新增用戶默認配置
/etc/skel	#新用戶的默認環境

權限管理

? - 文件的用戶屬性

? - 文件的操作權限

文件是誰的

文件所有者 owner   u 
文件歸屬組 group   g
其他人	other      o

文件如何操作

read R write W excutable X
看 讀 執行權限
普通權限 cat vim、> 、sed 文件執行
目錄文件 ls touch、mkdir、rm cd

查看文件屬性

image-20250813173230481 image-20250813173244945

普通目錄的默認權限:755

普通文件的默認權限:644

chown own owner 擁有者
chmod mod mode 權限模式

#修改文件屬性
chown 所有者:用戶組 文件
		-R 遞歸,對所有文件執行
#修改文件權限
chmod (u、g、o) (+、=、-) (r、w、x) 文件 
chomd XXX 文件

默認權限

Linux #創建文件時有一個默認權限。
	普通文件是 644
	目錄文件時 755
與通過 umask(用戶文件創建掩碼)相關,通常情況下022。
	計算權限:
666(普通文件最大權限)- 022(umask)= 644
777(普通文件最大權限)- 022(umask)= 755
特殊權限
權限 字符表示 八進制表示 備注
SUID s 4 如果原屬主沒有可執行權限,再加SUID權限,則顯示為S
SGID s 2 如果原屬組沒有可執行權限,再加SGID權限,則顯示為S
STICKY t 1 如果other沒有可執行權限,再加STICKY權限,則顯示為T

? SUID:能夠讓普通用戶 在執行這個文件時,臨時擁有root用戶權限

? SGID:當一個目錄擁有 xx SGID 權限的時候,那么無論是誰在我的目錄下創建文件,所有者是他們自己但歸屬組是 xx

? Sticky bit:只有該目錄的所有者、文件的所有者或root用戶才能刪除或重命名該目錄下的文件。

特殊屬性*

? 在Linux系統中,文件的特殊屬性提供了 "額外的" 安全性和穩定性保障。這些特殊屬性通過chattr命 令來設置,通過lsattr命令來查看。

lsattr #查看特殊屬性
chattr #修改特殊屬性
	-i #不可修改
	-a #只可增加

準入控制

項目解決方案
	綁定
	準入控制

文本處理

vim模式

image-20250813220723177

內容定位編輯

vim 文件
	#(如果存在則打開,不存在則新建)
vim 文件 +N #定位到第N行
vim 文件 +/關鍵字 #定位到第一個關鍵字行
vim 文件1 文件2 +d #對比兩個文件

進入編輯模式 (主要 a、o

i	#insert, 在光標所在處輸入
I	#在當前光標所在行的行首輸入
a	#append, 在光標所在處后面輸入
A	#在當前光標所在行的行尾輸入
o	#在當前光標所在行的下方打開一個新行
O	#在當前光標所在行的上方打開一個新行

常見命令

:wq		#寫入并退出 
:q!		#強制退出

? 查找

/關鍵字	#從當前光標所在處向文件尾部查找
	/		#查找下一個
	?		#查找上一個

? 替換

:s/要查找的內容/替換為的內容/修飾符  #替換
:%s 	#表示全文查找替換
:n,ms 	#第n行到m行

	i	#忽略大小寫
	g	#全局替換

? 邊界范圍

M,N		#從左側M表示起始行,到右側N表示結尾行
M:+N    #從第M行處開始,往后數N行
$		#最后一行
%		#全文
.		#當前行

? 光標跳轉

$ 		#所在行行首
^		#所在行行尾
gg		#第一行
G		#最后一行

? 動作

d		#刪除
p		#粘貼
y		#復制
u		#撤銷

? 常見屬性

:set nu #設置行號
:set nonu #取消行號

:set cul #給光標所在行加下劃線
:set nocul #取消光標下劃線

:set paste #復制時保留源格式
:set nopaste #禁用復制時保留源格式

:set et #使用空格替代Tab  默認8格
:set ts=N #指定N個空格代替Tab 

:set ai #自動縮進

? vimrc文件

.vimrc文件是vim編輯工具的一套預定義規則文件。一般情況下,該文件是不存在的,需要手工創建。

set tabstop=4      " 設置制表符寬度為4
set shiftwidth=4   " 設置縮進寬度為4
set expandtab      " 使用空格代替制表符進行縮進
set number         " 顯示行號
syntax on          " 啟用語法高亮
set background=dark " 設置背景色為深色
colorscheme desert " 設置顏色主題為desert

? 可視化模式

ctrl+v  #進入可視化模式
移動光標可以進行選擇
輸入大寫字母 I 切換至插入模式
d 刪除
按 ESC 鍵【兩次】退出
內容處理

? 切割

cut	選項 文件  #切割命令
	-d  #分割符
    -f	#指定要提取的字段

# cut -d: -f1,6,7 1.txt		
#以:冒號分割,截取第1,6,7列內容

? 替換

tr 選項 SET1 [SET2]	#替換命令
	-s #聚合

#用法1:把commands命令輸出做為tr輸入進行處理
commands | tr  'string1'  'string2'
#用法2:把文件中的內容輸入給tr進行處理
tr  'string1'  'string2' < filename

tr 'a-z' 'A-Z' 替換大小寫
tr -s ' ' 將空格聚合成一個

? 排序

sort 選項 file
	-u #去除重復項
	-r #降序排序
	-n #以數字排序
	-R #隨機排序
	
	-o #將輸出結果輸出到文件中
	-t #分隔符
	-N #第N列

? 去重

uniq #去重
	-c #統計重復次數
	-d #只顯示重復的行
	-i #忽略大小寫
	-u #只顯示唯一的行
	
uniq -c #統計次數

? 合并

paste 文件 #合并內容

? 命令結果傳遞

? xargs:主要用于將標準輸入的數據轉換為命令行參數,傳遞給其他命令執行。

xargs 
	-a #讀取文件內容
	-n #逐行讀取
	-I {} #將讀取到的內容放到臨時空間
	
xargs -a num.txt -n1 -I {} echo {}--bak
	#將num.txt文件逐行讀取,然后臨時存儲在{},然后輸出。

假設num.txt文件內容
1
3
2
結果:
1--bak
3--bak
2--bak

三劍客

grep*
grep 關鍵字 文件名 	
命令 | grep 關鍵字	
	-i		#不區分大小寫
	-n		#顯示行號
	-r		#逐層遍歷目錄查找
	-v		#查找不包含指定內容的行,反向選擇
	-E		#使用擴展正則匹配
	^key	#以關鍵字開頭
	key$ 	#以關鍵字結尾
	^$		#匹配空行
	一般選項:
	-w		#按單詞搜索
	-c		#統計匹配到的次數
	-A		#顯示匹配行及后面多少行
    -B		#顯示匹配行及前面多少行
    -C		#顯示匹配行前后多少行


grep -nir 關鍵字 目錄
grep '^abd' 行首匹配
sed*
sed [參數] '<匹配條件> [動作]' 文件
	sed 關鍵字 文件名 	
	命令 | sed 關鍵字
	
	-n		#不輸出模式空間內容到屏幕
	-e		#多點編輯操作
	-f		#從指定文件中讀取編輯文件
	-r		#使用擴展正則匹配
	-i		#對文件進行編輯
 

? 匹配條件

數字行號:
	空		#表示所有行
    n,m		#表示第n到m行內容		
	~ 步進 
		1~2 #表示奇數行
    	2~2 #表示偶數行
    n		#表示第n行 
	n,+m	#表示第n到n+m行		
	$		#表示末尾行
	
	關鍵字匹配格式:'/關鍵字/'
注意:	
	隔離符號 / 可以更換成 @、#、!等符號
	根據情況使用,如果關鍵字和隔離符號有沖突,就更換成其他的符號即可。
	/關鍵字1/,/關鍵字2/ 表示關鍵字1所在行到關鍵字2所在行之間的內容
	n,/關鍵字2/ 表示從第n行到關鍵字2所在行之間的內容

? 動作

-a[\text]		#在匹配到的內容下一行增加內容
-i[\text]		#在匹配到的內容當前行增加內容        
-c[\text]		#在匹配到的內容替換內容    
-d|p			#刪除|打印匹配到的內容                
-s				#替換匹配到的內容                  
W /path/somefile	#保存模式匹配的行至指定文件    
r /path/somefile	#讀取指定文件的文本至模式空間中    
=			#為模式空間中的行打印行號                   
!			#模式空間中匹配行取反處理                   

? 替換

 's#原內容#替換后內容#'
 	隔離符號 / 可以更換成 @、#、!等符號
 	
樣式一:替換指定匹配的內容:
sed -i '行號s#原內容#替換后內容#列號' [文件名]
echo "源數據" | sed -i '行號s#原內容#替換后內容#列號'

樣式二:替換所有的內容:
sed -i 's#原內容#替換后內容#g' [文件名]
echo "源數據" | sed -i '行號s#原內容#替換后內容#g'

樣式三: 替換指定的內容:
sed -i '行號s#原內容#&新增信息#列號' [文件名]
這里的&符號代表源內容,實現的效果是 '原內容+新內容'

? 追加

#在指定行號的下一行增加內容
sed -i '行號a\增加的內容' 文件名

? 插入

#在指定行號的當行增加內容
sed -i '行號i\增加的內容' 文件名

? 刪除

#指定行號刪除
sed -i '行號d' 文件名

? 替換

#指定行號進行整行替換
sed -i '行號c\內容' 文件名

? 加載、替換

#加載文件內容到指定行號的位置
sed -i '行號r 文件名1' 文件名

#指定行號保存到其他位置
sed -i '行號w 文件名' 文件名
awk*

? awk的工作方式是逐行讀取文本數據,將每一行數據視為一條記錄(record),每條記錄以字段分隔符分成若干字段(column),然后輸出各個字段的值.然后以查找匹配某個特定模式的文本行,并對這些文本執行制定動作。

格式:
	awk [參數] '[動作]' [文件名]
	awk [參數] –f 動作文件 var=value [文件名]
	awk [參數] 'BEGIN段 [動作] END段' [文件名]
注意:
	動作的格式  '匹配條件{打印動作}'
	
	awk 動作 文件名 	
	命令 | awk 動作

? 參數

-F' '		#自定義分隔符
-v			#定義環境變量
動作

? 查看

$0		#表示整行文本
$1		#表示文本行中的第一個數據字段
$2		#表示文本行中的第二個數據字段
$N		#表示文本行中的第N個數據字段
$NF		#表示文本行中的最后一個數據字段
NR		#代表行的行號,在動作外部表示特定行
#如果打印多列信息,需要使用逗號隔開,否則是內容合并

? 打印

print		#打印

awk '{print $1}' awk.txt		#打印第一列
awk '{print $0}' awk.txt		#打印全部
awk '{print $1,$3}' awk.txt		#打印第一、第三列
awk	'NR==1 {print NR,$1,$3}' awk.txt	
#打印第一行的行號和一、三列內容
awk -F ':' '{print $0}' passwd.txt
#設定分隔符為':'實現信息的分隔效果

? 格式化打印

printf		#格式打印

awk '{printf "%d--%s--%s\n", NR,$1,$NR}' awk.txt
結果:
1--nihao--nihao
2--nihao--awk4
3--nihao--awk8

? 內置變量

FILENAME	#當前輸入文件的文件名,該變量是只讀的
NR	#指定顯示行的行號
FNR	#多文件時候,分別計數     
NF	#表示字段數量      
OFS	#輸出格式的列分隔符,缺省是空格   
FS	#輸入文件的列分隔符,缺省是連續的空格和Tab    
RS	#輸入記錄分隔符,指定輸入時的換行符,原換行符($)仍有效
ORS	#輸出記錄分隔符,輸出時用指定符號代替換行符    


借助于-v方式為命令行輸出相關信息
awk -F ':' -v OFS="~~~" '{print $1,$7}' passwd.txt
結果:
	root~~~/bin/bash
在BEGIN內部同時實現多個環境變量
awk 'BEGIN{FS=":";OFS="-"}NR==1{print $1,$3,$NF}' passwd.txt
結果:
	root-0-/bin/bash

? 優先級

awk為了體現程序的邏輯順序,劃分了三個代碼段
	BEGIN{}: 讀入第一行文本之前執行的語句,初始化操作
	{}: 逐行處理的執行命令
	END{}: 處理完最后以行文本后執行,處理輸出結果
	
awk 'BEGIN{print "第一列\t第二列\n--------";total=0;} {print $1"\t"$2;total = NR}END{printf "-------\n行數總計: %2d\n", total}' awk.txt
結果:
	第一列  第二列
	-------------
	nihao   awk1
 	nihao   awk4
 	nihao   awk7
 	-------------
	行數總計:  3