Linux—Web架构全景—文件管理
一、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请求
请求由四部分组成:
-
请求行:
GET / HTTP/1.1—— 我要用GET方法,请求 / 这个路径,用HTTP/1.1协议 -
请求头:
Host: www.baidu.com(告诉服务器我访问的是哪个域名); Cookie: 登录Token (携带登录凭证,我是谁) -
空行:请求头和请求体之间的分隔符
-
请求体: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 |
| 删除原文件 | 仍可访问 | 失效 |
| 跨文件系统 | 不行 | 可以 |
| 链接目录 | 不行 | 可以 |
| 生产途径 | 关键文件多路径保护 | 版本切换,日志统一路径 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)