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