101_Linux文件挂载系统相关

一、文件系统简介

传统的磁盘与文件系统应用中,一个分区就只能够被格式化成为一个文件系统,所以我们可以说一个文件系统就是一个硬盘分区。

随着新技术的出现如LMM与软件磁盘阵列software raid),这些技术可以将一个分区格式化为多个文件系统(例如LWM),也能够将多个分区合成一个文件系统(LM,RAID)。所以目前在格式化时已经不再说是针对硬盘分区来格式化了,通常可以称呼一个可被挂载的数据为一个“文件系统”而不是一个分区。

文件系统类型众多,包括:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系统的介绍)

不同文件系统采用不同的方法来管理磁盘空间,各有优劣;文件系统是具体到分区的,所以格式化针对的是分区,分区格式化是指采用指定的文件系统类型对分区空间进行登记、索引并建立相应的管理表格的过程。
在这里插入图片描述

Linux文件系统:
  • ext2具有极快的速度和极小的CPU占用率,可用于硬盘和移动存储设备。

  • ext3增加日志功能,可回溯追踪

  • ext4日志式文件系统,支持1EB(1024*1024TB),最大单文件16TB,支持连续写入可减少文件碎片。rhel6默认文件系统。

  • xfs可以管理500T的硬盘。rhel7默认文件系统

  • brtfs文件系统针对固态盘做优化
    格式化命令:
    mkfs -t <文件系统类型> <分区设备文件名>
    mkfs.xfs /dev/sdb1

  • zfs man 5 fs可以取得全部文件系统的简要介绍

ps:EXT(Extended file system)是延伸文件系统、扩展文件系统,ext1于1992年4月发表,是为linux核心所做的第一个文件系统

windows

  • FAT16:MS—DOS和win95采用的磁盘分区格式,采用16位的文件分配表,只支持2GB的磁盘分区,最大单文件2GB,且磁盘利用率低
  • FAT32:(即Vfat)采用32位的文件分配表,支持最大分区128GB,最大文件4GB
  • NTFS:支持最大分区2TB,最大文件2TB,安全性和稳定性非常好,不易出现文件碎片。

其他

  • RAMFS:内存文件系统
  • ISO 9660:光盘
  • NFS:网络文件系统
  • SMBAFS/CIFS:支持Samba协议的网络文件系统
  • Linux swap:交换分区,用以提供虚拟内存。

二、Linux一切皆文件

Linux操作系统的文件权限(mwx)与文件属性(拥有者、用户组、时间参数等b文件系统通常会将这两部分的数据分别存放在不同的区块:

  • 权限与属性放置到 inode中(inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的区块号码;数据区块:实际记录文件的内容,若文件太大时,会占用多个区块。)
  • 数据区块:实际记录文件的内容,若文件太大时,会占用多个区块
  • 另外,还有一个超级区块( superblock)会记录整个文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量以及文件系统的格式与相关信息等。
    超级区块可以理解成书的目录,df正是从这里读取数据的,因此特别快。

类Unix操作系统中一切皆文件(everything is a file),像打印机,CD碟片,硬盘,输入输出硬件都被视为一个文件,而这些被视为文件的物理介质就可以称为设备文件.

物理介质分为字符设备和块设备,除了物理介质,Unix操作系统还有一类设备文件,叫伪设备,这三类设备文件的具体含义是:

  • 字符设备(Character devices)
    每次与系统传输数据时,只传输一个字符.没有缓冲区,系统直接从物理设备读取字符.常用于流设备的通信.因为没有缓存,所以只能顺序读取字符,不支持随机读取.像串口和键盘就是字符设备.

  • 块设备(Block devices)
    与字符设备相反,块设备每次与系统传输数据时,是以块(Block)的方式来传输的.由于以块来读取,所以需要一定读取时间,故常设有缓存区,支持随机读取.常见的块设备有硬盘,CD-ROM驱动器和闪存等.

  • 伪设备(Pseudo-devices)
    前面两种设备文件是物理设备,而伪设备则不是,它们通常是为操作系统提供特定的功能而存在的.常见的伪设备有:

/dev/null: 接受和丢弃所有输入,即吞下输入,然后什么都不做./dev/zero:产生联系的NULL字符串流,用c语言表示就是”\0\0\0\0\0/dev/random:产生一个随机的字符串流/dev/full:模拟一个已经装满了内容的设备

伪设备的作用如:

dd if=/dev/zero of=testzero count=1024 bs=1024

会创建一个大小为1024的,文件名为testzero的空文件。

在linux下,/dev目录是很重要的,各种设备都在下面。

dev是设备(device)的英文缩写。/dev这个目录包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口,但是没有入口。必须通过挂载的方式对他们进行访问。

特定设备有特定的前缀,如对硬盘,前缀是sd,如sda就是第一块硬盘,并且sda1 、sda2、sda3、sda4是其分区。


三、文件系统和分区

1、分区

在这里插入图片描述
在这里插入图片描述

2、目录

在这里插入图片描述

3、文件系统分类

假设你有一个有2个SCSI磁盘的系统,一个在SCSI地址2,另一个在SCSI地址4。第一个磁盘(地址2)被命名为sda,第二个磁盘被命名为sdb。如果sda驱动器上有3个分区,这些分区将被命名为sda1、sda2和sda3。这同样适用于sdb磁盘及其分区。

其中sd代表的就是scsi硬盘,每个scsi磁盘上的分区通过在磁盘名后面加上一个十进制数字表示,例如sda1和sda2表示系统中名列前茅个SCSI磁盘驱动器的名列前茅个和第二个分区。

  • dev/fd0: 第一个软盘驱动器(dev/fd1: 第二个软盘驱动器)
  • dev/sda: 第一个小型计算机系统接口 (SCSI) 磁盘。(认为是第一个硬盘名,sda1和sda2表示系统中第一个SCSI磁盘驱动器的第一个和第二个分区。)
  • dev/sdb: 第二个 SCSI 磁盘地址或通用串行总线 (USB) 闪存驱动器针对 SCSI 模拟
    (但是,内核与多个驱动程序并行启动。这并不意味着您的 sda 或 sdb 驱动器是 USB 驱动器,但 USB 模块与驱动器模块同时启动并同时发送消息)(认为是第二个硬盘名)
  • dev/scd0 或 /dev/sr0: 第一个 SCSI CD-ROM
  • dev/hda: 集成驱动器电子 (IDE) 主控制器上的主磁盘
  • dev/hdb: IDE 主控制器上的辅助磁盘
  • dev/mmcblk0: 个人计算机存储卡上的安全数字高容量 (SDHC) 卡国际协会 (PCMCIA)
  • dev/hdc 和 /dev/hdd: 辅助控制器的主磁盘和辅助磁盘,较新的 IDE 控制器具有两个通道,就像两个控制器一样
  • tmpfs:tmpfs(临时文件系统)用于在虚拟存储器中保持文件。你可以随意地忽略这个虚拟文件系统。
  • udev:udev 文件系统 用于存储插入到你系统的设备(像 USB、网卡、CD ROM 等等)的相关信息。你也可以忽略它。
  • /dev/loop: 环回设备。由于 snap 应用程序,在 Ubuntu 中查看磁盘时可以看到很多的这样的设备。环回设备是虚拟设备,允许普通文件作为块设备文件来访问。使用环回设备,snap 应用程序在它们自己的虚拟磁盘中进行沙盒处理。尽管是在根分区下,但不需要单独计算它们使用的磁盘空间。
    (开发人员可以在一个文件中创建一个虚拟设备,像操作普通磁盘一样对其进行操作,loop devices可以模拟不同的设备,如光盘,硬盘等。)
    loop devices与RAM占用无关,用于安装磁盘映像,loop 100%占用,不会影响系统的正常使用,如果需要更多内存资源,Linux系统立即腾出loop的空间。
  • nvme0n1,nvme是SSD磁盘

串行高级技术附件 (SATA) 驱动器:
随着SATA驱动器的出现,约定发生了变化,现在硬盘驱动器大多被称为 sda 而不是 hda。其中 sd 代表 串行驱动器。

分区表:

分区表显示硬盘驱动器或任何其他存储设备的分区。分区表布局有两种标准:

  1. 主引导记录 (MBR):MBR,也称为 MS-DOS,您可以将其称为原始标准。MBR仍然是使用最广泛的分区表,但它有两个主要限制:
  • 它不允许您创建超过四个的主分区。这些分区称为 primary 分区。
  • 磁盘分区不得超过 2 TB。
  1. GUID 分区表 (GPT):GPT后来出现。虽然 MBR 仍在使用,但这些限制导致 GPT 的发展。GPT克服了MBR的两个限制。可以有多个主分区,并且驱动器大小可以超过 2 TB。

硬盘命名惯例:
首先要知道的是,Linux中没有 C盘 或 E盘 。您会看到类似 /dev/sda、 /dev/sdb、 /dev/sdc,以此类推。该 dev 是设备的缩写。该 sd 是 SCSI 大容量存储驱动器的缩写。

分区和分区编号:
要在硬盘上安装操作系统,必须将其分为若干不同的存储单元。我们将这些存储单元称为分区。在 MBR 下:这是几乎所有 Linux 发行版上的默认设置,有三种不同类型的分区 — 主分区、扩展分区和逻辑分区。在MBR中,任何未显式创建为扩展或逻辑分区的分区都是主要分区。任何未分配的空间都显示为 可用。虽然可能是可用,但您不能在该状态中使用它。就计算机而言,在对它进行分区之前,空闲空间是不存在的。

在这里插入图片描述

dev/loop0 满了的影响:

/dev/loop0 是Linux系统中的一个虚拟块设备,用于将一个文件挂载为块设备,通常用于挂载镜像文件、软件包、磁盘映像等等。因此,当/dev/loop0满了的时候,意味着所挂载的文件已经占用了全部的空间。当/dev/loop0满了的时候,会对系统产生一些影响,包括:

  • 挂载该设备的进程可能会无法继续写入数据,导致相关程序异常终止。

  • 如果该设备中存储的是重要的数据,且没有备份,那么当设备满了之后,新的数据将无法写入,可能会导致数据丢失。

  • 如果/dev/loop0满了,还会对其他进程和设备造成一定的影响,因为操作系统在运行时需要占用一定的系统资源,如果某个设备已经满了,会导致操作系统的部分功能无法正常工作。

因此,如果/dev/loop0满了,建议立即采取措施释放空间或者挂载其他设备替换它。可以通过删除不需要的文件或者扩容该文件所在的分区等方式来释放空间。

解决loop满了的方法:

#清理方法
sudo apt autoremove --purge snapd

其他命令

#查看所有回环设备
losetup
#把xxx.iso镜像文件挂载到一个目录下
mount -o loop xxx.iso /media
#等同
losetup /dev/loop0 xxx.iso
mount /dev/loop0 /media#在制作根文件系统时,核心步骤如下:
1. 用 dd 创建一个文件镜像
2. 用 mkfs 格式成需要的格式
3. 建立一个临时目录 temp
4. 将文件镜像 mount 到 temp 目录
5. 在 temp 目录下建立根文件系目录
6. umount temp 目录
dd if=/dev/zero of=rootfs.ext4 bs=1M count=2048 > /dev/null 2>&1
mkfs.ext4 -F -L linuxroot rootfs.ext4
mkdir temp
mount rootfs.ext4 temp # 这里需要 loop device 支持, 否则无法操作成功
......
umount temp
#确认内核是否开启 loop device 支持:
ls -l /dev/loop*
brw-rw---- 1 root disk  7,   0 1110 16:33 /dev/loop0
brw-rw---- 1 root disk  7,   1 1110 14:36 /dev/loop1$ losetup -f # 查询第一个空闲可用的 loop device
/dev/loop0
$ sudo losetup /dev/loop0 /path/to/test.img # 关联 loop device 和 普通文件 test.img
$ losetup -l # 查询 关联
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /path/to/test.img
$ sudo mount /dev/loop0 /path/to/mnt/dir # 挂载 loop device (test.img) 到 指定目录
$ sudo umount /dev/loop0 # 卸载
$ sudo losetup -d /dev/loop0 # 接除 loop device 和 普通文件 test.img 的 关联

snap应用:
Snap 包是 Ubuntu 16.04 LTS 发布时引入的新应用格式包。
Snap 使用了 squashFS 文件系统,一种开源的压缩,只读文件系统,基于 GPL 协议发行。一旦 snap 被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入。

squashFS 文件系统的引入,使得 snap 的安全性要优于传统的 Linux 软件包。同时,每个 snap 默认都被严格限制(confined),即限制系统权限和资源访问。但是,可通过授予权限策略来获得对系统资源的访问。这也是安全性更好的表现。


四、查看Linux分区文件系统方法

1、主要方法:

#1、 df -T 命令查看 
#文件系统类型在Type列输出。只可以查看已经挂载的分区和文件系统类型
df -T /dev/sdb
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sdb xfs 315467264 4356404 311110860 2% /mysql
#2、parted -l命令查看 
#parted -l 命令会输出文件系统类型(File system), 其中参数l表示列出所有设备的分区信息
parted -l
Model: ATA ST500DM002-1BD14 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdosNumber Start End Size Type File system Flags1 32.3kB 107MB 107MB primary ext3  boot 2 107MB 500GB 500GB primary  lvm #3、blkid命令查看 
#查看已格式化分区的UUID和文件系统。使用blkid可以输出分区或分区的文件系统类型,查看TYPE字段输出
blkid /dev/sda1
/dev/sda1: LABEL="/boot" UUID="582b189c-396c-4da8-a7a3-1effaa3e4000" TYPE="ext3" #4、命令lsblk -f 查看
#有些系统可能没有这个命令,需要安装。注意:lsblk -f也可以查看未挂载的文件系统类型 
lsblk -f
NAME FSTYPE LABEL UUID     MOUNTPOINT
fd0       
sda       
├─sda1 xfs  b98659b2-5f8c-493e-9304-658905ef1391 /boot
└─sda2 xfs  b7559ac5-b3a4-4b00-b98a-a2a2611806d0 /

2、df和du的区别

df和du都可以用来查看磁盘空间,但功能并不同:

  • df主要读取的数据几乎是针对整个文件系统的,可以理解为某个挂载卷的整体情况,底层是通过查看超级区块内的信息,因此速度快。

可以理解文件系统是一整本书,拥有目录,那么从目录中就知道有多少个章节;如果你删了一个目录,后台会延迟同步到目录中,因此,从目录中查看的话,速度块,但是不准。

  • du是查看某个具体的文件,可以是目录,也是一个txt文件。
    如果是个目录,这个命令会去查找该目录下的所有文件,然后计算一个大小;
    把某个文件夹理解成某个章节,du命令会去正文中扫描统计该章节的大小,因此速度慢,但是没有延迟,比较准。
df -a, --all:显示所有文件系统,包括虚拟文件系统
df -i, --inodes:显示 inode 使用情况而不是块使用情况
df 
Filesystem     1K-blocks    Used     Available Use% Mounted on 
/dev/sda6       29640780 4320704     23814388  16%     / 
udev             1536756       4     1536752    1%     /dev 
#Filesystem:文件系统的名称或标识符。
#1K-blocks:文件系统的总容量,以 1KB 块为单位。即文件系统总大小。
#Used:文件系统已经使用的容量,以 1KB 块为单位。
#Available:文件系统中仍然可用的容量,以 1KB 块为单位。
#Use%:文件系统已使用容量占总容量的百分比。
#Mounted on:文件系统被挂载到的目录或位置。
#查看硬盘状况
sudo fdisk -l
#删除分区
fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.34)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助): d  
分区号 (1,2, 默认  2): 2#查看挂载情况
mount -l
#取消挂载
umount /dev/sda2
#格式化
mkfs.ext4 /dev/sda
#查看磁盘或者硬盘信息
parted /dev/sda print

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/326411.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二讲:指针(4)

第十二讲&#xff1a;指针&#xff08;4&#xff09; 1.回调函数1.1什么是回调函数1.2深入理解并使用回调函数1.2.1简单写法1.2.2优化 2.qsort函数详解2.1函数简单介绍2.3qsort函数使用举例2.3.1qsort函数排序整形数据2.3.2qsort函数排序结构数据 3.qsort函数的模拟实现3.1冒泡…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着&#xff0c;发现很多都是需要收费的&#xff0c;当然如果平时工作需要用的比较多&#xff0c;支持一下还是ok的&#xff0c;但是多数人还是偶尔用一下所以没有必要买。 工作用的话&#xff0c;一般企业文件、个人隐私资料、重要合同...所有重要文…

嘎嘎好用的虚拟键盘第二弹之中文输入法

之前还在为不用研究输入中文而暗自窃喜 这不新需求就来了&#xff08;新需求不会迟到 它只是在路上飞一会儿&#xff09; 找到了个博主分享的代码 是好使的 前端-xyq 已经和原作者申请转载了 感谢~~ 原作者地址&#xff1a;https://www.cnblogs.com/linjiangxian/p/16223681.h…

OpenAI推出DALL·E 3识别器、媒体管理器

5月8日&#xff0c;OpenAI在官网宣布&#xff0c;将推出面向其文生图模型DALLE 3 的内容识别器&#xff0c;以及一个媒体管理器。 随着ChatGPT、DALLE 3等生成式AI产品被大量应用在实际业务中&#xff0c;人们越来越难分辨AI和人类创建内容的区别&#xff0c;这个识别器可以帮…

NSSCTF | [LitCTF 2023]我Flag呢?

这道题没啥好说的&#xff0c;题目标签为源码泄露&#xff0c;我们直接CtrlU查看网页源码就能在最后找到flag 本题完

如何用微信小程序实现远程控制4路控制器/断路器

如何用微信小程序实现远程控制4路控制器/断路器呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制4路控制器/断路器&#xff0c;支持4路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xf…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 &#xff08;1&#xff09;安装 node.js &#xff08;2&#xff09;安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&…

福建医疗器械展/2024厦门国际医疗器械展览会重磅来袭

2024中国&#xff08;厦门&#xff09;国际医疗器械展览会 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 地 点&#xff1a;厦门国际会展中心 Xiamen International Conference & Exhibition Center ​ ◆组织机构 主办单位&#xff1a; 中国技术市场协会医…

Mysql-用户变量的声明与使用

#声明变量 #1.标识符不能以数字开头 #2.只能使用_或$符号&#xff0c;不能使用其他符号 #3.不能使用系统关键字 setuserName刘德华; select userName:刘青云;#将赋值与查询结合 #查询变量、使用变量&#xff0c;匿名的时候建议加上as select userName as 读取到的userName变量…

TriCore:Interrupt 2

今天继续来看看 IR 模块。 名词缩写 缩写全称说明IRInterrupt Router SRService Request 包括&#xff1a; 1. External Resource 2. Internal Resource 3.SW&#xff08;Software&#xff09; SPService Privoder 包括&#xff1a; 1. CPU 2. DMA SRNService Request NodeS…

【linux-IMX6ULL-uboot初次编译及烧录

目录 1. uboot基本概念1. 1 uboot的编译 3. uboot的烧录2. uboot的烧录结果 第一次不进行原理性的探究&#xff0c;也不关注源码内容&#xff0c;只是进行一个直观的了解&#xff0c;对uboot进行初次编译并进烧录到IMX6ULL板卡中 1. uboot基本概念 U-Boot&#xff08;Universa…

java项目之智慧图书管理系统设计与实现(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智慧图书管理系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 智慧图书管理…

GT2712-STBD 三菱触摸屏12.1寸型

GT2712-STBD 三菱触摸屏12.1寸型 GT2712-STBD参数说明&#xff1a;12.1型, SVGA, TFT彩色液晶屏 65536色, 黑色边框, 电源DC24V。 一、三菱触摸屏GT2712-STBD性能规格&#xff1a; [显示部*1*2] . 显示软元件:TFT彩色液晶屏 . GT2712-STBD画面尺寸:12.1寸 . GT2712-STBD…

六级翻译笔记

理解加表达 除了专有名词不能自己理解翻译&#xff0c;其它都可以 时态一般唯一 题目里出现有翻译为 客观存在&#xff1a; there be 单词结尾加er和ee的区别&#xff1a;er是主动&#xff0c;ee是被动 中文句子没有被动&#xff0c;也可以英文翻译为被动 中文的状语可以不是…

使用AudioCraft(MusicGen)生成音乐

AudioCraft 是一个 PyTorch 库,用于音频生成的深度学习研究。AudioCraft 包含两个先进的AI生成模型:AudioGen和MusicGen,它们共同致力于生成高质量的音频内容。 MusicGen是一个简单且可控的音乐生成模型。它利用Meta提供的20K小时授权音乐进行训练,能够根据文本描述或已有…

web后端——netbeans ide +jsp+servlet开发学习总结

目录 jsp基础 netbeans开发工具问题访问网页失败,404,not found 等?HTTP Status 405 - HTTP method POST is not supported......netbeans 提示无法启动GlassFish Server 4.1.1:服务器未运行时, HTTP 或 HTTPS 监听程序端口已被占用404 问题netbeans中项目中有多个html文件,如…

嵌入式RTOS面试题目

用过哪些嵌入式操作系统&#xff1f;使⽤RTOS和裸机代码开发有什么区别&#xff08;优缺点&#xff09;&#xff1f; 之前的⼀个项⽬是采⽤裸机代码开发的&#xff0c;写起来还⾏&#xff0c;通过状态机来管理业务逻辑和各种外设。 但是随着外设的增加&#xff0c;任务之间的…

2024CCPC郑州站超详细题解(含题面)ABFHJLM(河南全国邀请赛)

文章目录 前言A Once In My LifeB 扫雷 1F 优秀字符串H 随机栈J 排列与合数L Toxel 与 PCPC IIM 有效算法 前言 这是大一博主第一次参加xcpc比赛&#xff0c;虽然只取得了铜牌&#xff0c;但是收获满满&#xff0c;在了解了和别人的差距后会更加激励自己去学习&#xff0c;下面…

基于PHP高考志愿填报系统搭建私有化部署源码

金秋志愿高考志愿填报系统是一款为高中毕业生提供志愿填报服务的在线平台。该系统旨在帮助学生更加科学、合理地选择自己的大学专业和学校&#xff0c;从而为未来的职业发展打下坚实的基础。 该系统的主要功能包括:报考信息查询、志愿填报数据指导、专业信息查询、院校信息查询…

面向对象设计之套路——设计模式

1、总则 面向对象的分析设计编程思想&#xff0c;通过封装、继承、多态把程序的耦合度降低&#xff0c;用设计模式使得程序更加灵活&#xff0c;容易修改&#xff0c;并且易于复用。 让业务逻辑与界面逻辑分开&#xff0c;让它们的耦合度下降&#xff0c;只有分离&#xff0c;…