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号