目錄
前言
一、Web基礎概念
1.1 什么是Web?
1.2 B/S架構模型
1.3 Web請求與響應流程
1.4 靜態資源 vs 動態資源
二、HTTP/HTTPS協議詳解
2.1 HTTP與HTTPS區別
2.2 HTTPS握手流程
2.3 HTTP狀態碼大全
三、Nginx核心知識
3.1 Nginx簡介
3.2 Nginx vs Apache
3.3 Nginx進程結構
四、Nginx安裝與配置
4.1 下載Nginx
4.2 關閉防火墻,并且安裝
4.3 創建用戶并解壓
4.4 編譯安裝Nginx
4.5 檢查、啟動、重啟、停止 nginx服務
4.6 啟動
4.7 查看當前的版本
4.8添加Nginx服務系統
4.9 運行
五、awk的使用方法
5.1 統計以/bin/bash結尾的行數
5.2 統計/etc/passwd中第三列大于等于200的每一行
5.3 第三列大于等于1000的
5.4 打印行號和每一行
5.5 打印行數和每一行的第一列
5.6 先打印行號,再打印每一行
5.7 空間內存使用率
5.8 統計在線用戶數
5.9 getline 隔一行打印一下
5.10 getline 隔一行打印一下
5.11 獲取當前主機名
總結??
前言
在當今互聯網技術體系中,Web服務的高效運作離不開底層協議的支撐與服務器技術的優化。本書從HTTP/HTTPS協議的本質出發,深入解析Nginx高性能服務器的架構原理與實戰配置,并結合Shell與Awk等工具,探索自動化運維與數據處理的進階技巧。無論您是開發者、運維工程師還是技術愛好者,都將通過本書獲得構建穩定、安全、高性能Web服務的系統化知識體系。
一、Web基礎概念
1.1 什么是Web?
Web(World Wide Web,萬維網)是運行在互聯網之上的超文本信息系統,它依賴于HTTP/HTTPS協議實現瀏覽器與服務器之間的交互。
??核心特點:??
- ???分布式??:資源分布在世界各地的服務器上
- ???跨平臺??:只要有瀏覽器就能訪問資源
- ???無狀態??:每次HTTP請求都是獨立的(除非使用Cookie/Session)
1.2 B/S架構模型
Web采用B/S架構(Browser/Server):
- ???Browser(瀏覽器)??:用戶入口,發送請求、渲染頁面
- ???Server(服務器)??:接收請求,返回所需資源或動態內容
用戶瀏覽器 → Web服務器(Nginx/Apache) ↓ 應用服務器(PHP/Python/Java) ↓ 數據庫(MySQL/Redis)
1.3 Web請求與響應流程
- 1.用戶輸入URL
- 2.DNS解析域名
- 3.建立TCP連接(3次握手)
- 4.發送HTTP請求(GET/POST)
- 5.服務器處理請求:
- ?靜態資源直接返回
- ?動態請求轉發到應用服務器
- 6.返回HTTP響應
- 7.瀏覽器渲染頁面
1.4 靜態資源 vs 動態資源
類型 | 特點 | 示例 |
---|---|---|
靜態資源 | 直接返回,速度快 | HTML、CSS、圖片、JS文件 |
動態資源 | 服務器端生成,支持交互 | PHP腳本、Python/Java應用 |
二、HTTP/HTTPS協議詳解
2.1 HTTP與HTTPS區別
- ???HTTP??:明文傳輸,不安全
- ???HTTPS??:HTTP + SSL/TLS加密,防止中間人攻擊
2.2 HTTPS握手流程
- 1.客戶端Hello(支持的加密算法)
- 2.服務端Hello + 證書
- 3.客戶端驗證證書
- 4.協商臨時密鑰
- 5.開始加密通信
2.3 HTTP狀態碼大全
狀態碼 | 類別 | 說明 |
---|---|---|
1xx | 信息性 | 請求已接收,繼續處理 |
2xx | 成功 | 請求成功處理 |
3xx | 重定向 | 需要進一步操作 |
4xx | 客戶端錯誤 | 請求語法錯誤或無法實現 |
5xx | 服務器錯誤 | 服務器處理請求失敗 |
??常用狀態碼:??
- ?200 OK:請求成功
- ?301/302:重定向
- ?404:頁面不存在
- ?403:禁止訪問
- ?500:服務器內部錯誤
- ?502/504:網關錯誤
三、Nginx核心知識
3.1 Nginx簡介
Nginx是一個高性能的HTTP和反向代理服務器,特點:
- ?輕量級,內存占用小
- ?支持高并發(單機5萬+并發)
- ?熱部署能力
- ?優秀的反向代理和負載均衡
3.2 Nginx vs Apache
特性 | Nginx | Apache |
---|---|---|
架構 | 事件驅動 | 進程/線程驅動 |
并發能力 | 極強 | 一般 |
資源消耗 | 低 | 較高 |
熱部署 | 支持 | 不支持 |
靜態文件處理 | 高效 | 一般 |
3.3 Nginx進程結構
- ???Master進程??:管理Worker進程
- ???Worker進程??:實際處理請求(數量通常=CPU核心數)
四、Nginx安裝與配置
4.1 下載Nginx
[root@zard3 shelldemo]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
--2025-09-04 16:42:11-- https://nginx.org/download/nginx-1.20.2.tar.gz
正在解析主機 nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:5c0:2600::6, ...
正在連接 nginx.org (nginx.org)|52.58.199.22|:443... 已連接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:1062124 (1.0M) [application/octet-stream]
正在保存至: “nginx-1.20.2.tar.gz”100%[===========================================================================================>] 1,062,124 563KB/s 用時 1.8s 2025-09-04 16:42:14 (563 KB/s) - 已保存 “nginx-1.20.2.tar.gz” [1062124/1062124])
4.2 關閉防火墻,并且安裝
[root@zard3 ~]# yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 4.4 kB 00:00:00 * epel: d2lzkl7pfhq30w.cloudfront.net
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
正在嘗試其它鏡像。
mysql-connectors-community | 3.0 kB 00:00:00
mysql-tools-community | 3.0 kB 00:00:00
mysql80-community | 3.0 kB 00:00:00
updates | 2.9 kB 00:00:00
軟件包 gcc-4.8.5-44.el7.x86_64 已安裝并且是最新版本
軟件包 gcc-c++-4.8.5-44.el7.x86_64 已安裝并且是最新版本
軟件包 1:make-3.82-24.el7.x86_64 已安裝并且是最新版本
軟件包 pcre-8.32-17.el7.x86_64 已安裝并且是最新版本
軟件包 pcre-devel-8.32-17.el7.x86_64 已安裝并且是最新版本
正在解決依賴關系
--> 正在檢查事務
---> 軟件包 openssl.x86_64.1.1.0.2k-19.el7 將被 升級
---> 軟件包 openssl.x86_64.1.1.0.2k-26.el7_9 將被 更新
--> 正在處理依賴關系 openssl-libs(x86-64) = 1:1.0.2k-26.el7_9,它被軟件包 1:openssl-1.0.2k-26.el7_9.x86_64 需要
---> 軟件包 openssl-devel.x86_64.1.1.0.2k-26.el7_9 將被 安裝
--> 正在處理依賴關系 krb5-devel(x86-64),它被軟件包 1:openssl-devel-1.0.2k-26.el7_9.x86_64 需要
---> 軟件包 zlib.x86_64.0.1.2.7-18.el7 將被 升級
---> 軟件包 zlib.x86_64.0.1.2.7-21.el7_9 將被 更新
---> 軟件包 zlib-devel.x86_64.0.1.2.7-18.el7 將被 升級
---> 軟件包 zlib-devel.x86_64.0.1.2.7-21.el7_9 將被 更新
--> 正在檢查事務
---> 軟件包 krb5-devel.x86_64.0.1.15.1-55.el7_9 將被 安裝
--> 正在處理依賴關系 libkadm5(x86-64) = 1.15.1-55.el7_9,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在處理依賴關系 krb5-libs(x86-64) = 1.15.1-55.el7_9,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在處理依賴關系 libverto-devel,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在處理依賴關系 libselinux-devel,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在處理依賴關系 libcom_err-devel,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
--> 正在處理依賴關系 keyutils-libs-devel,它被軟件包 krb5-devel-1.15.1-55.el7_9.x86_64 需要
---> 軟件包 openssl-libs.x86_64.1.1.0.2k-19.el7 將被 升級
---> 軟件包 openssl-libs.x86_64.1.1.0.2k-26.el7_9 將被 更新
--> 正在檢查事務
---> 軟件包 keyutils-libs-devel.x86_64.0.1.5.8-3.el7 將被 安裝
---> 軟件包 krb5-libs.x86_64.0.1.15.1-50.el7 將被 升級
--> 正在處理依賴關系 krb5-libs(x86-64) = 1.15.1-50.el7,它被軟件包 krb5-workstation-1.15.1-50.el7.x86_64 需要
---> 軟件包 krb5-libs.x86_64.0.1.15.1-55.el7_9 將被 更新
---> 軟件包 libcom_err-devel.x86_64.0.1.42.9-19.el7 將被 安裝
---> 軟件包 libkadm5.x86_64.0.1.15.1-50.el7 將被 升級
---> 軟件包 libkadm5.x86_64.0.1.15.1-55.el7_9 將被 更新
---> 軟件包 libselinux-devel.x86_64.0.2.5-15.el7 將被 安裝
--> 正在處理依賴關系 libsepol-devel(x86-64) >= 2.5-10,它被軟件包 libselinux-devel-2.5-15.el7.x86_64 需要
--> 正在處理依賴關系 pkgconfig(libsepol),它被軟件包 libselinux-devel-2.5-15.el7.x86_64 需要
---> 軟件包 libverto-devel.x86_64.0.0.2.5-4.el7 將被 安裝
--> 正在檢查事務
---> 軟件包 krb5-workstation.x86_64.0.1.15.1-50.el7 將被 升級
---> 軟件包 krb5-workstation.x86_64.0.1.15.1-55.el7_9 將被 更新
---> 軟件包 libsepol-devel.x86_64.0.2.5-10.el7 將被 安裝
--> 解決依賴關系完成依賴關系解決=====================================================================================================================================Package 架構 版本 源 大小
=====================================================================================================================================
正在安裝:openssl-devel x86_64 1:1.0.2k-26.el7_9 updates 1.5 M
正在更新:openssl x86_64 1:1.0.2k-26.el7_9 updates 494 kzlib x86_64 1.2.7-21.el7_9 updates 90 kzlib-devel x86_64 1.2.7-21.el7_9 updates 50 k
為依賴而安裝:keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 kkrb5-devel x86_64 1.15.1-55.el7_9 updates 273 klibcom_err-devel x86_64 1.42.9-19.el7 base 32 klibselinux-devel x86_64 2.5-15.el7 base 187 klibsepol-devel x86_64 2.5-10.el7 base 77 klibverto-devel x86_64 0.2.5-4.el7 base 12 k
為依賴而更新:krb5-libs x86_64 1.15.1-55.el7_9 updates 810 kkrb5-workstation x86_64 1.15.1-55.el7_9 updates 821 klibkadm5 x86_64 1.15.1-55.el7_9 updates 180 kopenssl-libs x86_64 1:1.0.2k-26.el7_9 updates 1.2 M事務概要
=====================================================================================================================================
安裝 1 軟件包 (+6 依賴軟件包)
升級 3 軟件包 (+4 依賴軟件包)總計:5.7 M
總下載量:2.1 M
Downloading packages:
(1/7): keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm | 37 kB 00:00:00
(2/7): libselinux-devel-2.5-15.el7.x86_64.rpm | 187 kB 00:00:00
(3/7): libsepol-devel-2.5-10.el7.x86_64.rpm | 77 kB 00:00:00
(4/7): libcom_err-devel-1.42.9-19.el7.x86_64.rpm | 32 kB 00:00:00
(5/7): krb5-devel-1.15.1-55.el7_9.x86_64.rpm | 273 kB 00:00:01
(6/7): libverto-devel-0.2.5-4.el7.x86_64.rpm | 12 kB 00:00:00
(7/7): openssl-devel-1.0.2k-26.el7_9.x86_64.rpm | 1.5 MB 00:00:00
-------------------------------------------------------------------------------------------------------------------------------------
總計 1.0 MB/s | 2.1 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在更新 : zlib-1.2.7-21.el7_9.x86_64 1/21 正在更新 : krb5-libs-1.15.1-55.el7_9.x86_64 2/21 正在更新 : 1:openssl-libs-1.0.2k-26.el7_9.x86_64 3/21 正在更新 : libkadm5-1.15.1-55.el7_9.x86_64 4/21 正在更新 : zlib-devel-1.2.7-21.el7_9.x86_64 5/21 正在安裝 : libcom_err-devel-1.42.9-19.el7.x86_64 6/21 正在安裝 : libsepol-devel-2.5-10.el7.x86_64 7/21 正在安裝 : libselinux-devel-2.5-15.el7.x86_64 8/21 正在安裝 : libverto-devel-0.2.5-4.el7.x86_64 9/21 正在安裝 : keyutils-libs-devel-1.5.8-3.el7.x86_64 10/21 正在安裝 : krb5-devel-1.15.1-55.el7_9.x86_64 11/21 正在安裝 : 1:openssl-devel-1.0.2k-26.el7_9.x86_64 12/21 正在更新 : krb5-workstation-1.15.1-55.el7_9.x86_64 13/21 正在更新 : 1:openssl-1.0.2k-26.el7_9.x86_64 14/21 清理 : 1:openssl-1.0.2k-19.el7.x86_64 15/21 清理 : krb5-workstation-1.15.1-50.el7.x86_64 16/21 清理 : zlib-devel-1.2.7-18.el7.x86_64 17/21 清理 : libkadm5-1.15.1-50.el7.x86_64 18/21 清理 : 1:openssl-libs-1.0.2k-19.el7.x86_64 19/21 清理 : krb5-libs-1.15.1-50.el7.x86_64 20/21 清理 : zlib-1.2.7-18.el7.x86_64 21/21 驗證中 : 1:openssl-devel-1.0.2k-26.el7_9.x86_64 1/21 驗證中 : keyutils-libs-devel-1.5.8-3.el7.x86_64 2/21 驗證中 : libverto-devel-0.2.5-4.el7.x86_64 3/21 驗證中 : libkadm5-1.15.1-55.el7_9.x86_64 4/21 驗證中 : 1:openssl-libs-1.0.2k-26.el7_9.x86_64 5/21 驗證中 : libsepol-devel-2.5-10.el7.x86_64 6/21 驗證中 : libselinux-devel-2.5-15.el7.x86_64 7/21 驗證中 : krb5-devel-1.15.1-55.el7_9.x86_64 8/21 驗證中 : libcom_err-devel-1.42.9-19.el7.x86_64 9/21 驗證中 : krb5-libs-1.15.1-55.el7_9.x86_64 10/21 驗證中 : krb5-workstation-1.15.1-55.el7_9.x86_64 11/21 驗證中 : zlib-devel-1.2.7-21.el7_9.x86_64 12/21 驗證中 : zlib-1.2.7-21.el7_9.x86_64 13/21 驗證中 : 1:openssl-1.0.2k-26.el7_9.x86_64 14/21 驗證中 : 1:openssl-libs-1.0.2k-19.el7.x86_64 15/21 驗證中 : zlib-devel-1.2.7-18.el7.x86_64 16/21 驗證中 : krb5-workstation-1.15.1-50.el7.x86_64 17/21 驗證中 : 1:openssl-1.0.2k-19.el7.x86_64 18/21 驗證中 : zlib-1.2.7-18.el7.x86_64 19/21 驗證中 : krb5-libs-1.15.1-50.el7.x86_64 20/21 驗證中 : libkadm5-1.15.1-50.el7.x86_64 21/21 已安裝:openssl-devel.x86_64 1:1.0.2k-26.el7_9 作為依賴被安裝:keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-55.el7_9 libcom_err-devel.x86_64 0:1.42.9-19.el7 libselinux-devel.x86_64 0:2.5-15.el7 libsepol-devel.x86_64 0:2.5-10.el7 libverto-devel.x86_64 0:0.2.5-4.el7 更新完畢:openssl.x86_64 1:1.0.2k-26.el7_9 zlib.x86_64 0:1.2.7-21.el7_9 zlib-devel.x86_64 0:1.2.7-21.el7_9 作為依賴被升級:krb5-libs.x86_64 0:1.15.1-55.el7_9 krb5-workstation.x86_64 0:1.15.1-55.el7_9 libkadm5.x86_64 0:1.15.1-55.el7_9 openssl-libs.x86_64 1:1.0.2k-26.el7_9 完畢!
4.3 創建用戶并解壓
[root@zard3 ~]# useradd -M -s /sbin/nologin nginx # 創建用戶
[root@zard3 ~]# tar zxvf nginx-1.20.2.tar.gz -C /opt/ # 解壓
4.4 編譯安裝Nginx
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
4.5 檢查、啟動、重啟、停止 nginx服務
[root@zard3 nginx-1.20.2]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/ngnx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4.6 啟動
[root@zard3 nginx-1.20.2]# nginx
4.7 查看當前的版本
[root@zard3 nginx-1.20.2]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
4.8添加Nginx服務系統
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20 // 這是固定格式,2345表示運行級別,之后為開機執行順序和關機執行順序
#description:Nginx Service Control Script //這也是必須的
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0
4.9 運行
chmod +x /etc/init.d/nginx
chkconfig --add nginx #添加為系統服務
systemctl stop nginx
systemctl start nginxservice nginx start|stop|restart|reload
系統服務 服務名稱 啟動模式
五、awk的使用方法
5.1 統計以/bin/bash結尾的行數
[root@zard3 shelldemo]# awk 'BEGIN{x=0};/\/bin\/bash$/{x++;print x,$0};END{print x}' /etc/
1 root:x:0:0:root:/root:/bin/bash
2 zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
3 test1:x:1001:1001::/home/test1:/bin/bash
4 tom:x:1002:1002::/home/tom:/bin/bash
5 zard111:x:1003:1003::/home/zard111:/bin/bash
6 test3:x:1004:1004::/home/test3:/bin/bash
7 test4:x:1005:1005::/home/test4:/bin/bash
7
[root@zard3 shelldemo]# cat /etc/passwd|grep -c "/bin/bash"
7
5.2 統計/etc/passwd中第三列大于等于200的每一行
[root@zard3 shelldemo]# awk -F ":" '! ($3<200){print} ' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:990:984:User for sssd:/:/sbin/nologin
geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
test1:x:1001:1001::/home/test1:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash
zard111:x:1003:1003::/home/zard111:/bin/bash
test3:x:1004:1004::/home/test3:/bin/bash
test4:x:1005:1005::/home/test4:/bin/bash
5.3 第三列大于等于1000的
{FS=":"}也是以冒號作為分隔符
[root@zard3 shelldemo]# awk 'BEGIN {FS=":"} ;{if($3>=1000){print}}' /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
test1:x:1001:1001::/home/test1:/bin/bash
tom:x:1002:1002::/home/tom:/bin/bash
zard111:x:1003:1003::/home/zard111:/bin/bash
test3:x:1004:1004::/home/test3:/bin/bash
test4:x:1005:1005::/home/test4:/bin/bash
5.4 打印行號和每一行
[root@zard3 shelldemo]# awk -F ":" '{print NR,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18 colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
21 gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
22 saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
23 abrt:x:173:173::/etc/abrt:/sbin/nologin
24 setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
25 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
26 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
27 radvd:x:75:75:radvd user:/:/sbin/nologin
28 chrony:x:992:987::/var/lib/chrony:/sbin/nologin
29 unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
30 qemu:x:107:107:qemu user:/:/sbin/nologin
31 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32 sssd:x:990:984:User for sssd:/:/sbin/nologin
33 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
34 geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
35 ntp:x:38:38::/etc/ntp:/sbin/nologin
36 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
39 gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
40 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
41 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
42 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
43 tcpdump:x:72:72::/:/sbin/nologin
44 zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
45 test1:x:1001:1001::/home/test1:/bin/bash
46 tom:x:1002:1002::/home/tom:/bin/bash
47 mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
48 named:x:25:25:Named:/var/named:/sbin/nologin
49 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
50 zard111:x:1003:1003::/home/zard111:/bin/bash
51 test3:x:1004:1004::/home/test3:/bin/bash
52 test4:x:1005:1005::/home/test4:/bin/bash
5.5 打印行數和每一行的第一列
[root@zard3 shelldemo]# awk -F ":" '{print NR,$1}' /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
10 operator
11 games
12 ftp
13 nobody
14 systemd-network
15 dbus
16 polkitd
17 libstoragemgmt
18 colord
19 rpc
20 saned
21 gluster
22 saslauth
23 abrt
24 setroubleshoot
25 rtkit
26 pulse
27 radvd
28 chrony
29 unbound
30 qemu
31 tss
32 sssd
33 usbmuxd
34 geoclue
35 ntp
36 gdm
37 rpcuser
38 nfsnobody
39 gnome-initial-setup
40 sshd
41 avahi
42 postfix
43 tcpdump
44 zard3
45 test1
46 tom
47 mysql
48 named
49 apache
50 zard111
51 test3
52 test4
5.6 先打印行號,再打印每一行
[root@zard3 shelldemo]# sed -n '=;p' /etc/passwd
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8
halt:x:7:0:halt:/sbin:/sbin/halt
9
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10
operator:x:11:0:operator:/root:/sbin/nologin
11
games:x:12:100:games:/usr/games:/sbin/nologin
12
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13
nobody:x:99:99:Nobody:/:/sbin/nologin
14
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15
dbus:x:81:81:System message bus:/:/sbin/nologin
16
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
19
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20
saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
21
gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin
22
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
23
abrt:x:173:173::/etc/abrt:/sbin/nologin
24
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
25
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
26
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
27
radvd:x:75:75:radvd user:/:/sbin/nologin
28
chrony:x:992:987::/var/lib/chrony:/sbin/nologin
29
unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin
30
qemu:x:107:107:qemu user:/:/sbin/nologin
31
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32
sssd:x:990:984:User for sssd:/:/sbin/nologin
33
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
34
geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin
35
ntp:x:38:38::/etc/ntp:/sbin/nologin
36
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
39
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
40
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
41
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
42
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
43
tcpdump:x:72:72::/:/sbin/nologin
44
zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash
45
test1:x:1001:1001::/home/test1:/bin/bash
46
tom:x:1002:1002::/home/tom:/bin/bash
47
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
48
named:x:25:25:Named:/var/named:/sbin/nologin
49
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
50
zard111:x:1003:1003::/home/zard111:/bin/bash
51
test3:x:1004:1004::/home/test3:/bin/bash
52
test4:x:1005:1005::/home/test4:/bin/bash
5.7 空間內存使用率
[root@zard3 shelldemo]# free -m |awk '/Mem:/{print int($3/($3+$4)*100)"%"}'
29%
5.8 統計在線用戶數
[root@zard3 shelldemo]# awk 'BEGIN{n=0; while ("w"|getline)n++;{print n-2}}'
1
5.9 getline 隔一行打印一下
[root@zard3 shelldemo]# seq 10|awk '{getline; print $0}'
2
4
6
8
10
5.10 getline 隔一行打印一下
[root@zard3 shelldemo]# seq 10|awk '{print $0;getline}'
1
3
5
7
9
5.11 獲取當前主機名
[root@zard3 shelldemo]# awk 'BEGIN {"hostname"|getline;{print $0}}'
zard3
總結??
系統性地剖析了Web服務的核心架構與Nginx高性能實踐,從HTTP/HTTPS協議的安全機制、請求響應流程,到Nginx的進程模型、編譯優化與系統集成,最終延伸至Shell和Awk的自動化運維應用。通過理論結合實戰,不僅掌握了構建穩定、高效服務的核心技術,更培養了解決實際問題的能力。未來,無論是應對高并發場景還是優化系統性能,這些知識都將成為您技術體系中不可或缺的基石。