一、Web架构全景

1.1完整请求链路

第一步:网址输入

用户在浏览器中输入网址:https://www.baidu.com

浏览器做的第一件事就是将网址 https://www.baidu.com/ URL拆成三个部分:

部分 实例 说明
协议 https:// 浏览器和服务器之间用什么语言通信
域名 www.baidu.com 服务器的人类可读名称(需要DNS解析成IP)
路径 / 请求的具体资源位置(哪个页面/端口)

第二步:DNS解析(域名解析)

浏览器—(1.先查自己)—>操作系统—(2.再查系统)—>hosts文件—(3.最后查文件)—>递归DNS服务器

DNS把域名翻译成IP地址。计算机通信用的IP地址,而不是域名。

第三步:TCP三次握手

知道服务器IP地址后,浏览器需要和服务建立联系,这个建立过程叫TCP三次握手

关键协议 端口
TCP 80(HTTP) 或 443(HTTPS)

第四步:发送HTTP请求

TCP连接建立之后,浏览器开始发送HTTP请求

请求由四部分组成:

  1. 请求行:GET / HTTP/1.1 —— 我要用GET方法,请求 / 这个路径,用HTTP/1.1协议

  2. 请求头:Host: www.baidu.com (告诉服务器我访问的是哪个域名); Cookie: 登录Token (携带登录凭证,我是谁)

  3. 空行:请求头和请求体之间的分隔符

  4. 请求体:GET请求没有请求体。如果是POST请求,这里会放JSON数据

第五步:Nginx反向代理

请求达到Nginx之后,Nginx会判断请求的类型

  • 如果是静态资源请求(.html、.css、.js),Nginx直接返回文件,不经过后端(速度极快)

  • 如果是API请求(.system/* 或 /api/*),Nginx转发给Spring Boot,有若依后端处理业务逻辑

如果请求路径是/system/user,则属于Nginx请求,会被Nginx转发给Spring Boot第六步:Spring Boot处理

Nginx把请求转给Spring Boot,开始处理业务逻辑

第七八步:MySQL和Redis

MySQL(仓库):所有数据存在硬盘上,速度慢,但容量大。

Redis(缓存柜):热数据存在内存中,速度极快。

对比 MySQL Redis
存储位置 硬盘 内存
速度 毫秒级 微秒级(快1000倍+)
端口 3306 6379
用途 永久存储学员、合同数据 缓存Token、权限、字典

第九十步:返回HTPP响应

Spring Boot处理完业务逻辑后,返回HTTP响应给浏览器。这个响应由三部分组成:

① 状态行: 200 OK —— 表示请求成功

② 响应头: Content-Type: application/json —— 告诉浏览器返回的是JSON数据

③ 响应体:用户列表JSON数据 —— 实际的数据内容

浏览器收到JSON数据后,Vue前端框架进行解析和渲染,最终在页面上展示出用户列表表格。这就是从请求到响应的完整闭环。

整个过程中,状态码200表示一切正常。如果看到500、502、404等状态码,说明链路中某个环节出了问题,就是需要排查的地方。

二、命令通用格式

2.1 命令提示符

打开终端,会看到类似这样的提示符:

[root@iZk278w09xtp6iZ ~]# 
  • root:当前登陆的用户名

  • @:分隔符

  • iZk278w09xtp6iZ:服务器的主机名

  • ~:当前所在目录

  • #:提示符(#代表root用户,$代表普通用户)

2.1 命令的通用格式

Linux命令遵循格式:命令 + 选项 + 参数

command [options] [arguments]
# command:命令(要做什么)     
#options:选项(想做什么)   
#arguments:参数(对什么做)

2.3 初学注意

# 1. 大小写敏感:Linux命令几乎都是小写的
LS # 报错
ls # 正确
# 2. 空格很重要:命令和选项之间必须有空格
ls-l # 报错
ls -l # 正确
# 3. 出错没关系:系统会提示你,检查拼写再试一次
[root@magedu ~]# data
-bash: data: command not found

2.4 命令帮助

2.4.1 --help/man

  • 帮助方式--help / -h

    • 用法ls --help 、 date --help

    • 适用场景快速查看常用选项,最常用

  • 帮助方式man

    • 用法man ls 、 man 5 passwd

    • 适用场景完整手册,详细参数和说明

#1. --help 快速查看(最常用)
ls --help 查看ls的命令使用方法

#2.man 完整的手册
man ls 查看ls命令使用方法

三、文件系统

3.1 Linux目录

常见的目录结构

目录 作用
/bin 二进制命令所在目录(普通命令=>普通用户和超级管理员root)
/home 普通用户的家目录,每个用户一个文件夹
/root root用户的家目录,只有root能进
/opt 额外的应用软件包
/sbin 和管理系统相关的命令,【超级管理员】,s=super超级
/tmp 临时文件目录,这个目录被当作回收站使用。进程运行中临时存放的数据,在进程结束后会自动清除
/usr 用户或系统软件应用程序目录,类似windows中的program files
/dev /device缩写。设备文件目录,磁盘,光驱=>/dev/sr0
/etc 系统配置文件目录,启动程序,几乎所有的软件都会把自己的配置文件安装在/etc中。该配置请先备份。
/var 日志/缓存等在这,满了要清理
/boot 内核和启动程序存放
/proc 进程信息,虚拟的,查看系统状态

3.2 绝对路径 vs 相对路径

类型 定义 示例 如何识别
绝对路径 /开始写 /etc/ssh/sshd_config /开头
相对路径 相当于当前目录的路径 ./ssh/sshd_config、../logs 不以/开头

路径中的特殊字符:

  • cd /:切换到根目录

  • cd ~:切换到当前用户的家目录

  • cd ..:切换到上一级目录

  • cd .:当前目录

  • cd -:切换到上一次所在的目录

3.3 导航与查看

3.3.1 pwd - 显示当前工作目录

[root@iZk278w09xtp6iZ ~]# pwd
/root

3.3.2 cd - 目录切换

  • cd /:切换到根目录

  • cd ~:切换到当前用户的家目录

  • cd ..:切换到上一级目录

  • cd .:当前目录

  • cd -:切换到上一次所在的目录

案例

1.切换到绝对路径

2.切换到家目录

家目录的切换可使用 cd ~ 和 cd 命令

3.切换到根目录

4.使用相对路径切换到etc(当前在根目录)

5.切换到上级目录

6.切换到上一个所在目录

3.2.3 ls - 列出目录内容

  • -l:以长格式显示详细信息(权限、所有者、大小、修改时间)

  • -a:显示所有文件,包括以点开头的隐藏文件

  • -h:以人类易读的格式显示文件大小(KB/MB/GB)

  • -R:递归列出子目录内容

  • -t:按修改时间排序

  • -d:查看目录本身

案例:

1.显示所有文件详细信息

2.以只读的方式查看文件大小

3.查看目录本身的信息(不是目录里面的内容)

3.2.4 tree - 看目录树

  • -a:显示所有文件,包括以点开头的隐藏文件(默认不显示隐藏文件)

  • -d:仅显示目录,不显示文件

  • -L:限制显示层级深度(如 -L 2 只显示两层目录)

  • -f:为每个文件显示完整的路径前缀

  • -p:显示每个文件的权限信息

  • -h:以人类易读的格式显示文件大小(KB/MB/GB)

  • -s:显示每个文件的字节大小

  • -u:显示文件所有者或UID

  • -g:显示文件所属组或GID

  • -D:显示文件的最后修改日期

  • -P pattern:仅显示匹配指定模式的文件

  • -I pattern:不显示匹配指定模式的文件

  • -o filename:将输出结果保存到指定文件

  • -C:为文件和目录添加颜色区分

  • -i:不打印缩进线条

  • -l:将符号链接当作目录处理

  • -x:仅停留在当前文件系统,不跨设备

  • --dirsfirst:目录优先显示在文件前面

  • --noreport:不在输出末尾显示文件/目录统计信息

  • --du:计算并显示目录大小

3.4 文件操作 - 增删改查

3.4.1 mkdir - 创建目录

  • -p:递归创建目录,若父目录不存在则自动创建

  • -v:显示创建过程

  • -m:创建时直接设置目录权限

1.创建文件

2.一次创建多个文件

3.4.2 touch - 创建文件

1.创建文件

2.批量创建10个文件

3.批量创建2个文件

3.4.3 cp - 复制

  • -r:递归复制目录及其内容

  • -p:保留文件的属性(权限、时间戳等)

  • -i:覆盖前提示确认

  • -u:仅当源文件比目标文件新时才复制

  • -a:归档复制,相当于-dR --preserve=all

1.把file1.txt文件复制并重命名为file1_backup.txt

2.file1.txt文件复制到/tmp 3.复制目录和内容(-r)

3.4.4 mv - 移动、重命名

  • -i:覆盖前提示确认

  • -u:仅当源文件比目标文件新时才移动

  • -f:强制覆盖不提示

  • -b:若需覆盖,先备份目标文件(生成备份文件)

  • -v:显示移动过程

1.重命名file1.txt为data.txt

2.把data.txt移动到dir1/docs

3.4.5 rm - 删除

  • -r:递归删除目录及其内容

  • -f:强制删除,不提示确认

  • -i:删除前逐一确认

  • -v:显示删除的每个文件

rm命令删除文件之后,通常无法恢复

1.删除file1_backup.txt文件

2.删除dir1_backup目录(必须加-r)

3.5 查看文件内容

3.5.1 cat - 一次性查看显示整个文件里面的内容

cat 适合查看小文件

  • -n:显示行号

  • -b:显示行号(空白行不编号)

cat /etc/hosts
# 查看/etc/hosts文件内容

cat -n /etc/nginx/nginx.conf
# 显示nginx.conf内容并带行号

3.5.2 less - 分页查看大文件

  • -N:显示行号

  • -S:截断长行(默认换行)

  • -i:搜索时忽略大小写

操作说明

  • 空格/PgDn:向下翻页

  • PgUp:向上翻页

  • /关键词:向下搜索

  • ?关键词:向上搜索

  • q:退出

less /var/log/nginx/access.log
# 分页查看nginx访问日志

less -N /etc/passwd
#显示并带行号

3.5.3 head - 查看文件开头内容

  • -n:指定显示的行数

  • -c:显示前N个字节

head -20 /var/log/syslog
# 显示syslog文件的前20行

head -c 100 file.txt
#显示前100个字节

3.5.4 tail - 查看文件结尾内容

  • -n:指定显示的行数

  • -f:实时跟踪文件末尾新增内容(常用于日志)

  • -F:实时跟踪(支持文件轮转)

tail -f /var/log/nginx/access.log
# 实时跟踪nginx访问日志的新增内容

tail -100 /var/log/syslog
# 显示syslog文件最后100行

3.5.5 grep - 关键词搜索

  • -i:忽略大小写

  • -r:递归搜索目录

  • -n:显示匹配行的行号

  • -v:显示不匹配的行

  • -E:使用扩展正则表达式

grep "error" /var/log/messages
# 在/var/log/messages中搜索包含error的行

grep -i "warning" /var/log/*.log
# 在所有日志文件中忽略大小写搜索warning

grep -rn "mysql" /etc/
# 递归搜索/etc目录下包含mysql的文件并显示行号

3.6 命令辅助工具

3.6.1 type - 查看目录类型

# 查看 cd 的类型(Shell内置命令)
[root@iZk278w09xtp6iZ ~]# type cd
cd is a shell builtin

# -a 查看所有同名的命令
[root@iZk278w09xtp6iZ ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd

# 查看 date(外部程序)
[root@iZk278w09xtp6iZ ~]# type -a date
date is /usr/bin/date

# 查看 ll(别名)
[root@iZk278w09xtp6iZ ~]# type -a ll
ll is aliased to `ls -l --color=auto'

# 查看 for(Shell关键字)
[root@iZk278w09xtp6iZ ~]# type -a for
for is a shell keyword

3.6.2 file - 查看文件类型

[root@iZk278w09xtp6iZ ~]# file /etc
/etc: directory

[root@iZk278w09xtp6iZ ~]# file /etc/hosts
/etc/hosts: ASCII text

[root@iZk278w09xtp6iZ ~]# file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable

[root@iZk278w09xtp6iZ ~]# file /dev/sda
/dev/sda: block special

3.6.3 which - 查看命令位置

which nginx
# 显示nginx命令的完整路径,如:/usr/sbin/nginx

3.6.4 tab - 补全与历史命令

# Tab补全:敲一半按Tab
cd /etc/sys # 按Tab → 自动补全为 /etc/sysconfig/
ls /etc/hos # 按Tab → 自动补全为 /etc/hosts
# 按两次Tab → 列出所有匹配的可能
# 历史命令
↑ / ↓ # 翻看之前执行过的命令
history # 列出所有历史命令

3.7 文件类型与inode机制

3.7.1 文件类型

# 输出: -rw-r--r-- 1 root root 0 Jul 11 10:30 csidnci
#       ↑          ↑                             ↑
#    文件类型     硬链接数                        文件名
首字符 文件类型 示例
- 普通文件 /etc/hosts
d 目录 /etc
l 链接文件 /etc/os-releas ->../usr/lib/os-releas
b 块设备文件 /dev/sda(硬盘)
c 字符设备文件 /dev/tty终端

3.7.2 inode

        inode是Linux文件系统中的文件身份证,记录文件的元数据——权限、属主、大小、时间戳、数据块位置。文件名和文件数据是分开的,由inode连接。

查看inode编号: ls -li

同一硬盘分区内,inode编号唯一

3.8 文件压缩与归档

3.8.1 tar - 打包与解包

常用选项

  • -c:创建归档文件

  • -x:解压归档文件

  • -v:显示详细信息

  • -f:指定归档文件名

  • -z:使用gzip压缩/解压

  • -j:使用bzip2压缩/解压

  • -J:使用xz压缩/解压

  • -t:查看归档文件内容

参数组合 说明
-cvf 创建归档文件,俗称”打包“,打包后的文件后缀名为.tar
-xvf 解压归档文件,俗称”拆包“
-czvf 创建归档文件,并采用gzip进行压缩,压缩后的文件后缀名为.tar.gz
-xzvf 解压被gzip压缩的归档文件
-cjvf 创建归档文件,并采用bzip2进行压缩,压缩后的文件后缀名为.tar.bz2
-xjvf 解压被bzip2压缩的归档文件
tar -czvf archive.tar.gz /path/to/dir
# 将/path/to/dir目录压缩为archive.tar.gz
# -c:创建 -z:gzip压缩 -v:显示过程 -f:指定文件名
# archive.tar.gz表示压缩后的文件名,/path/to/dir是被压缩的目录

tar -xzvf archive.tar.gz
# 解压archive.tar.gz到当前目录
# -x:解压 -z:gzip解压 -v:显示过程 -f:指定文件名

tar -tzvf archive.tar.gz
# 查看archive.tar.gz的内容列表

tar -czvf backup_$(date +%Y%m%d).tar.gz /var/www/html
# 将html目录压缩并带日期命名的备份文件
工具 tar命令 压缩比 速度 后缀 生产用途
gzip tar czvf / tar xzvf .tar.gz 日志归档
bzip2 tar cjvf / tar xjvf .tar.bz2 少用
xz tar cjvf / tar xjvf 最高 最慢 .tar.xz 备份(节省空间)

3.8.2 zip/uzip

zip -r archive.zip /path/to/dir
# 将目录压缩为archive.zip

unzip archive.zip -d /target/dir
# 将archive.zip解压到/target/dir目录

3.9 vim文本编辑器

3.9.1 vim的三种模式

  • 命令模式:默认浏览,执行命令

  • 编辑模式:输入文字,修改内容

  • 扩展命令模式:保存/退出/搜索/替换

核心功能:移动光标、复制、粘贴、删除、撤销、查找等。

1. 光标移动 (Navigation):

基础移动: h (左), j (下), k (上), l (右)

行移动: 0 (行首), $ (行尾)

屏幕移动: gg (文件头), G (文件尾), :n 或 nG (跳至第n行)

2. 删除 (Delete - d ):

x - 删除当前字符

dw - 删除一个单词

dd - 删除整行 (最常用)

3dd - 删除3行 (数字+命令,表示重复执行)

D - 删除至行尾

dgg - 删除至文件头

dG - 删除至文件末尾

3. 复制 (Yank - y ) & 粘贴 (Paste - p ):

yy - 复制整行 (最常用)

3yy - 复制3行 (数字+命令,表示重复执行)

yw - 复制一个单词

p - 粘贴到光标

P - 粘贴到光标

4. 撤销与重做 (Undo/Redo):

u - 撤销上一次操作

Ctrl + r - 重做,即撤销掉刚才的撤销

四、硬链接与软链接

4.1 硬链接

硬链接 = 同一个inode的多个名字。删除一个名字不影响另一个访问。

例如两个文件名,同一个 inode,同一个数据块。链接数 = 2,删除任意一个,另一个仍可访问

1.创建测试文件并写入内容

2.查看创建的文件cs.txt inode编号

inode编号:52195459

链接数:1

3.为cs.txt创建硬链接

inode编号一致:52195459

链接数变为:2

4.删除原文件cs.txt,并查看硬链接是否还可以查看内容

删除原文件cs.txt之后,硬链接仍然可用

4.2 软链接

软链接=指向另一个文件路径的快捷方式,删除一个名字另一个无法访问

生产环境里,软链接目录通常用绝对路径

1.创建一个cs1.txt文件并写入内容

2.为cs1.txt文件创建软连接为cs1_backup.txt

3.删除原文件cs1.txt,在查看软链接是否正常

原文件cs1.txt删除之后,软链接失效

4.3 硬链接和软链接的区别

对比 硬链接 软链接
inode 共享同一个inode 独立inode
删除原文件 仍可访问 失效
跨文件系统 不行 可以
链接目录 不行 可以
生产途径 关键文件多路径保护 版本切换,日志统一路径

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐