nginx
配置結構
主配置文件/etc/nginx
# --- 全局配置段 -- 控制軟件運行
user ...;
worker_processes ...;
...
# --- 事件驅動相關的配置 -- 接受連接用戶
events {
...;
}
# --- http/https 協議相關配置段 -- 處理連接
http {
...;
server { 具體的網站配置
...;
location { 具體的訪問url請求
...;
}
}
}
? 文件如何控制
? 流量訪問邏輯過程
1 解析域名對應的ip地址
2 建立TCP/IP連接
3 HTTP請求的處理
3.1 發送請求頭
3.2 處理請求
3.3 發送響應
3.4 關閉連接
node、npm
? Node.js 是?個基于 Chrome V8 引擎的 JavaScript 運?環境,讓 JavaScript 可以在服務器端運?。
? 創建node項目
? 運行程序,訪問網站

? npm 是 Node.js 的默認包管理器,類似于手機應用市場。其主要功能是管理 Node.js 項目中的各種依賴包。
? 默認配置快速創建
? 定制專屬的鏡像源
? 創建???件 index.js
? 運行程序,訪問網站

文件管理
? 將linux的文件系統拆分成兩部分:文件系統和文件管理系
文件系統:操作系統用于組織和存儲文件及數據的方法和數據結構。它定義了數據如何在存儲設備(如硬盤)上被組織、命名、訪問和修改。
文件管理系統:可以理解為操作系統中與文件管理相關的所有功能和工具的集合。
? 文件系統類型
FAT32常用于U盤、存儲卡等移動設備,因其簡單結構和廣泛兼容性而受歡迎。
NTFS是Windows操作系統的標準文件系統,支持高級功能,如文件權限、加密、壓縮和磁盤配額。
ext4是Linux系統中廣泛使用的文件系統,它繼承了ext3的優點,并在性能和穩定性方面有所提升。
HFS+是macOS系統早期使用的文件系統,而APFS是Apple為macOS、iOS等系統設計的最新文件系統。
? linux目錄結構
常見目錄
用戶:/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 文件解析
? /etc/shadow
用戶管理
用戶組
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 |
查看文件屬性
普通目錄的默認權限: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模式

內容定位編輯
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
浙公網安備 33010602011771號