【Linux】文件系统和软硬链接

在这里插入图片描述

👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++和算法
✈️专栏:Linux
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍


目录

  • 前言
  • 一、认识磁盘
      • 1.1 磁盘的物理结构
      • 1.2 磁盘的存储结构
      • 1.3 磁盘的逻辑抽象结构
  • 二、EXT2文件系统
      • 2.1 分区
      • 2.1 深入理解inode
      • 2.3 如何理解目录
      • 2.4 在磁盘上创建一个文件,操作系统做了什么
      • 2.5 在磁盘上删除一个文件,操作系统做了什么
      • 2.6 在磁盘上查找一个文件,操作系统做了什么
      • 2.7 在磁盘上修改一个文件,操作系统做了什么
  • 三、软硬链接
      • 3.1 软链接
      • 3.2 硬链接
      • 3.3 为什么要有软硬链接(实际用途)

前言

  • 前面我们学习文件相关的知识,如文件操作等,文件都是被进程打开(内存文件),根据冯诺依曼体系结构,被打开的文件一定会被加载到内存,由操作系统管理。(Linux学习目录)

  • 但并不是所有的文件都会被进程打开,那么没有打开的文件就只能在磁盘上呆着(磁盘文件)。当然了,没有打开的文件也应当进行管理,我们把做这部分管理工作称之为文件系统。

  • 文件系统属于操作系统中的一部分,通常通过磁盘或其他存储介质来管理文件(路径问题,存储问题,获取问题内容+属性,删除修改等效率问题)。因此,在学习文件系统之前,我们首先需要认识磁盘。

一、认识磁盘

1.1 磁盘的物理结构

磁盘可以指代任何一种使用磁性存储介质来存储数据的设备,包括硬盘、软盘、光盘等。在许多情况下,人们使用术语"磁盘"来泛指硬盘。

以下是磁盘的构成图:

请添加图片描述

  • 盘片:磁盘通常由盘片组成,每个盘片都被涂上磁性材料。每个盘片的两面都可以用来存储数据。因此,盘片的个数决定你的磁盘容量。

  • 磁头:每面盘片的上下方都会有一个磁头,用于读写数据。这些磁头可以在盘片的表面移动,以便访问不同的磁道和扇区(在后面会详细介绍)。注意:盘片和磁头不接触。磁头与盘片直接接触会导致它们之间的摩擦,从而造成磁头和盘片表面的损坏。这种损坏可能会导致数据丢失。因此磁头与盘片之间是通过一个微小的空气垫来读取和写入数据。

  • 其他自行了解 ~

1.2 磁盘的存储结构

上面我们说过,数据存储在盘片上,但具体是如何存储的呢?接着往下看 ~

请添加图片描述

  • 磁道:盘片表面被划分成多个同心圆,每个同心圆称为一个磁道。

  • 扇区:每个磁道被划分为多个扇区,扇区是存储数据的最小单位,通常包含512字节或4KB的数据。因此,磁头之所以在盘片表面上移动,其实是根据磁头(Header)确定哪个盘面,再根据柱面 (Cylinder)定位哪个磁道,然后再确定扇区(Sector) 并进行读写数据。我们称定位方式为:CHS寻址方式

  • 柱面:柱面是垂直于盘片表面的一组磁道的集合,这些磁道位于不同盘片上但在相同半径位置上。

1.3 磁盘的逻辑抽象结构

首先我们可以将磁盘想象成一个线性的存储介质,想想磁带:

在这里插入图片描述

磁带被卷起来时,就像盘片一样是圆形的,而当我们把磁带拉直后,就是线性的。那么我们可以等同把盘片“拉直”,即想象成线性的结构。那么,我们就可以把盘片当成是数组。

请添加图片描述

盘片表面被划分成多个同心圆,即磁道。

请添加图片描述

并且每个磁道被划分为多个扇区,是用来存储数据的

请添加图片描述

因此,在我们看来,整个磁盘不就可以抽象成是以扇区为单位拼接起来的数组吗?因此对磁盘的管理,就转化成为了对数组空间的管理。

二、EXT2文件系统

2.1 分区

有了上述的知识,此时我们就可以进入文件系统的学习了,文件系统的本质就是操作系统对磁盘上的数据进行管理的方式。那么假设现在有一个磁盘的大小是800GB,操作系统该如何管理这么大的磁盘空间呢?

请添加图片描述

操作系统为了更好的管理磁盘,于是对磁盘进行了分区(将大问题分解成小问题,采用分治的思想)。例如在Windows下的磁盘一样被分为C盘D盘两个区域。

请添加图片描述

操作系统还是通过先描述再组织的方式对一个一个分区进行管理

struct partion
{int start;int end;
}

当磁盘完成分区后,我们还需要对磁盘进行格式化。磁盘格式化就是对磁盘中的分区进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。简单来说,磁盘格式化就是对分区后的各个区域写入对应的管理信息。

以一个分区为例:

请添加图片描述

总结:操作系统对磁盘的管理,采用分治思想,把磁盘进行分区,然后进行区内分组,只要把一个组管理好,进而就能管理整个磁盘。

  • 启动块(Boot Block):在传统的文件系统中,磁盘上的每个分区通常都会以Boot Block开头。它包含了引导加载程序所需的信息,可以帮助计算机启动并加载操作系统,使得计算机可以正常启动。

  • 块组(Block Group):文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。如Super Block等。可以怎么理解:分区就相当于把中国分为数个省份,然后再对每个省份分组成数个市/县。那么如果将每个市/县管理好,不就把一个省管理好了吗?

  • 超级块(Super Block):存储了文件系统的整体信息,如文件系统的大小、块大小、inode数量、挂载时间等。超级块的信息被破坏,可以说整个文件系统结构就被破坏了。

  • 块组描述符(Group Descriptor Table):描述了文件系统中每个块组的布局和组织方式。

  • 块位图(Block Bitmap):记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。使用0/1状态表示。

  • inode位图(inode Bitmap):记录inode是否空闲可用,使用0/1状态表示。

  • 节点表(inode Table):实际上是一个数组,数组的每一个元素都对应一个inode编号,inode编号则对应一个inode结构,inode结构保存一个文件的所有属性。注意:每个文件都有自己的inode结构

  • 数据块(Data block):用于存储文件内容,以块的形式呈现。常见的文件系统数据块大小4KB

2.1 深入理解inode

从上我们可以得出一个结论:Linux中,文件的内容和属性是分开存储的!其中保存属性信息的结构称之为inode。除此之外,因为磁盘中一定会存在大量的文件,注定了存在大量的inode结构。因此为了区分每个文件的inode结构,操作系统给每个文件的属性集取一个唯一编号,即inode编号。总之,inode是一个文件的属性集合,但为了区分大量的inode,我们需要为每个inode设置唯一的inode编号。注意:inode编号只在自己的分区内有效。

  • inode编号的分配规则

ext2文件系统会从inode表中找到一个空闲的inode,然后标记相应的inode Bitmap位图,指示该inode已经被分配。因此,inode编号是根据inode表中的位置分配的

struct inode
{inode编号文件类型权限拥有者链接数所属组ACM时间指向文件数据块的指针...
}

在这里插入图片描述

注意:在Linux文件系统中,文件名通常不包含在文件属性集inode中。文件名只是用户用来标识和访问文件的一种便捷方式。实际上,文件系统通过inode来管理文件的属性和位置信息,而文件名只是与inode相关联的一个别名。

Linux中,我们可以使用-i选项来查看一个文件的inode编号,例如

请添加图片描述

2.3 如何理解目录

我们用户是拿文件名来对文件操作,可是操作系统只认inode编号来获取一个文件的属性,那么文件名和inode编号是如何建立关系的呢?

Linux中,我们知道一切皆文件。因此,每个目录也有自己属性,即也有自己的inode

请添加图片描述

而目录里也可以包含数据(目录/文件),因此也有自己的数据块。那么目录的数据块里存的是什么呢?

答:对于目录,数据块中存储的是该目录下文件名和该文件对应的inode编号的映射关系map<string, int>

所以文件名只是一个给用户使用的间接inode编号,用户只要拿到文件名,然后操作系统再去指定目录的数据块去找文件名和inode编号的映射关系,就可以进行对文件的读写!

总结:文件名和inode编号的关系是由目录来建立和维护的。其数据块存储着文件名和inode编号的映射关系。

2.4 在磁盘上创建一个文件,操作系统做了什么

  1. 当在Linux中创建一个新文件时,系统会拿着你新建的文件名在指定的目录下的数据块查找是否有已经存在的inode编号。如果有则创建失败。
  2. 如果在指定路径下没有同名文件,系统会检查当前分组的inode Bitmap是否有空闲的inode位,如果有并将其标记为已使用。然后根据其标记位为新文件分配一个空闲的inode编号。
  3. 找到空闲的inode后,系统会将新文件的所有属性写入inode Table中对应的inode结点当中。
  4. 此时,文件还没有分配实际的数据块用于存储内容,这就是所谓的"延迟分配"机制。文件系统会延迟分配数据块,直到用户向文件写入数据时才会触发实际的数据块分配。当用户开始向文件写入数据时,文件系统会根据需要分配适当数量的数据块,并将文件内容写入这些数据块中。这样可以更好地利用磁盘空间,避免不必要的空间浪费。

2.5 在磁盘上删除一个文件,操作系统做了什么

  1. 当要删除一个文件时,操作系统会拿着指定的文件名到指定目录下的数据块中查找inode编号。

  2. 一旦获得了要删除文件的inode编号,系统会在inode Bitmap中将对应的bit位由1置成0,来表示这个inode已经被删除。

  3. inode Bitmap中对应的bit位由1置成0并不会立即从磁盘中删除对应的inode和数据块,只是表示这个inode现在是可用的。实际上,文件系统通常会保留已删除文件的inode和数据块,以便在将来需要时能够重新分配给新创建的文件使用。这也是为了避免频繁地在磁盘上进行分配和释放操作,从而提高性能和减少磁盘碎片化。(在计算机领域中,删除并不是真的都删了,而是覆盖)

因此,我们就可以理解:为什么拷贝文件的时候很慢,而删除文件的时候很快

因为拷贝文件需要先创建文件,然后再对该文件进行写入操作,该过程需要先在inode Bitmap中将对应的bit位置成1,然后根据其标记位为新文件分配一个空闲的inode编号并填入文件的属性信息,之后还要申请数据块,最后才能进行文件内容的拷贝,而删除文件仅需将对应的inode Bitmap置为0即可。

就像建一座高楼大厦,想要完工的时间是非常长,而要拆掉一座楼,仅仅在墙上写上字即可。

2.6 在磁盘上查找一个文件,操作系统做了什么

  1. 操作系统会拿着指定的文件名到指定目录下的数据块中查找inode编号。

  2. 一旦拿到inode编号后,系统就可以通过该编号找到对应的inode,其中包含了文件的各种属性

  3. 系统会检查inode中的权限属性,确保用户是有权限来执行对应操作的

2.7 在磁盘上修改一个文件,操作系统做了什么

  1. 查找指定文件: 首先,操作系统会通过文件路径找到指定文件的inode编号,获取文件的属性信息,包括文件的权限设置、所有者信息等。

  2. 权限验证: 在进行文件修改操作之前,系统会检查当前用户的权限是否足够以及是否具有对文件的写入权限。如果用户具有足够的权限,系统将允许用户对文件进行修改;否则,修改操作将被拒绝。

  3. 分配数据块: 当需要对文件进行修改时,系统会为该文件分配足够的数据块来存储修改后的内容。如果文件已经存在且需要扩展,系统会分配额外的数据块来容纳新的内容。

  4. 更新inode 在将内容写入到数据块后,系统会更新文件的属性信息,如文件的大小、修改时间等。这样可以确保文件的属性信息与实际内容保持一致。

三、软硬链接

3.1 软链接

软链接是一种特殊的文件类型。我们可以使用以下命令来创建软连接

ln -s  [source_file] [link_name]
# ln - 建立链接
# -s - 建立软链接
# 创建名为link_name的硬链接,指向名为source_file的原始文件。

请添加图片描述

从上我们可以看出,原文件file和软连接file_sortinode编号是不一样的(各自具有独立的inode编号),说明软连接是一个独立的文件

如何理解软连接?

软连接是独立的文件,有独立的inode和独立的数据块,而软连接的数据块里面保存的是原文件路径,因此软链接类似于Windows系统中的快捷方式。它们不包含实际的数据,而只是指向原始文件或目录的路径。因此,如果删除快捷方式,即软连接,不会有任何影响;但如果软链接指向的文件或目录被删除了,软链接就会成为死链接。

3.2 硬链接

硬链接同样也是一种特殊的文件类型。我们可以使用以下命令来创建硬连接

ln <source_file> <link_name>
# 创建名为link_name的硬链接,指向名为source_file的原始文件。

请添加图片描述

当我们查看文件的属性时,发现硬链接和原文件第二列的数字都变成2了,这个数字其实是硬链接数;并且它们inode编号还是一模一样的(不具有独立的inode编号),因此硬链接不是独立的文件。

如何理解硬链接?

源文件和硬链接的inode一模一样,即文件属性是一模一样的,而在inode的结构中,存在一个指针指向对应的文件数据块,那么就注定了数据块也是一模一样,即文件的内容也是一模一样!我们可以来验证验证

向原文件写入内容

请添加图片描述

向硬链接文件写入内容

请添加图片描述

那现在假设我要将原文件删除,即将inode编号删除,那么对应的相同硬链接的inode编号是否也会被删除呢?

请添加图片描述

答案是不会的!只是将硬链接数由2变成了1

这是因为 inode结构中维护了一个称为链接计数link_count的字段。链接计数表示了指向该inode的硬链接的数量。每当创建一个新的硬链接时,相应文件的链接计数就会增加。当删除一个硬链接时,链接计数就会减少。只有当链接计数减到0时,文件的数据块才会被释放。

因此所谓的硬链接就相当于将一个文件进行重命名而已。

请添加图片描述

3.3 为什么要有软硬链接(实际用途)

  • 软连接

创建快捷方式。软链接可以让你在不同的位置引用同一个文件或目录,方便快速访问。(最常见)

比如我创建了一个cpp文件,并将其生成可执行文件myexe。内容如下:

请添加图片描述

那么我们可以为myexe创建一个快捷方式到/home/wj下(相当于Windows桌面),方便快速访问。

请添加图片描述

请添加图片描述

  • 硬链接

当创建一个普通文件时,操作系统会在文件系统中为该文件分配一个inodeinode中包含链接计数link count的字段,因此这个链接计数会初始化为1,因为此时文件只有一个文件名(inode编号)指向struct inode

但是当我们创建一个目录的时候,硬链接数却是2,这是为什么?

请添加图片描述

别忘了,一个目录就算是空目录,其还有两个隐藏目录,分别是...。一个.表示当前路径,表示的也就是dir目录,两个..表示上级目录,也就是当前目录dir的上一个目录。

请添加图片描述

此时我们将dir目录文件的inode编号和.inode编号打印出来,发现两者的inode编号是一模一样的。

请添加图片描述

所以可以得出结论:Linux系统中,每个目录下都包含一个名为.的隐藏文件,它表示当前目录本身。这个.文件实际上就是指向当前目录的硬链接,它和当前目录共享同一个inode编号。因此,.文件导致了目录的硬链接数为2。(两个..同理)

因此,现在我们就可以解释为什么我们cd ..可以返回到上级目录了,原因就是:..和上级目录的inode编号是相同的,本质就是建立了硬链接关系,又因为它们的inode编号相等,使得共享数据块。因此cd ..等价于cd 当前路径的上级路径名

需要注意的是:目录文件时不允许我们私自建立硬链接的,我们只允许对普通文件建立硬链接,而上述的隐藏文件可以是因为系统本身规定的,而用户不允许私自对目录建立硬链接原因如下:

请添加图片描述

比方说创建硬链接目录dir指向的是根目录/,假设执行find / -name test.c,当递归搜索到硬链接目录dir时,由于dir和/的inode编号一样,由于与根目录/共享相同的inode,操作系统会认为它们是同一个目录,然后继续搜索/目录下的子目录和文件,就会发生无限递归问题。

那有的人就有疑问,...同样也会发生无限递归问题啊。可是很不好意思,系统默认在做搜索时,不会对...这两个隐藏目录做搜索 ~

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

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

相关文章

redux相关源码

1、createStore 实现 2、connct实现 3、bindActionCreators实现 4、Provider实现 5. thunk

html+css web前端 多边形

<!DOCTYPE html><html><head><meta charset"UTF-8"><title>多边形</title><style type"text/css">#pentagon_6_1 {position: absolute;top: 0px;height: 0; width: 100; border-left: 100px solid rgb(255, 255…

【记忆化搜索 】2312. 卖木头块

本文涉及知识点 记忆化搜索 LeetCode2312. 卖木头块 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每…

网络四层、七层协议

一、OSI七层模型 物理层&#xff1a;建立、维护、断开物理连接。 数据链路层&#xff1a;逻辑连接、寻找硬件地址——地址解析协议&#xff1a;ARP、PARP 反向地址转换协议 网络层&#xff1a;寻找逻辑地址&#xff0c;实现不同网络之间的路径选择——ICMP(互联网控制信息协议…

Vue前端平台的搭建

文章目录 前端平台搭建(`Vue2.6`,App:`HBulderX`)创建`Vue2.6`项目下载相应插件方便开发路由配置对连接后端进行一些配置(`main.js`文件)导入ElementUI组件[组件 | Element](https://element.eleme.cn/#/zh-CN/component/icon)同步与异步`axios`异步请求框架前端平台搭建(Vue2.…

YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…

windows 在cmd 使用cd命令无法进入指定目录解决方法

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用cmd命令想要快速进入某个目录&#xff0c;发现没有跳转&#xff0c;如下&#xff1a; 二、原因分析 cmd 切换目录跨磁盘的话&#xff0c;需要先进行磁盘的转换&#xff0c;也就是要进入到另外一…

使用pkg打包了一个使用了sqlite3的nodejs项目,启动后闪退

从截图来看&#xff0c;问题出在 sqlite3 模块上。说明在打包过程中&#xff0c;sqlite3 模块的 .node 文件没有正确加载。 紧急解决方法&#xff1a; 其实就是exe文件还需要node_modules中的sqlite3 依赖&#xff0c;我们直接在系统顶级放一个node_modules&#xff0c;且其中只…

极简朋友圈rmoments多用户版

什么是 moments &#xff1f; moments 是仿照微信朋友圈开发的个人极简朋友圈。但目前不支持多用户。 什么是 rmoments &#xff1f; rmoments 复刻自 moments&#xff0c;除了支持全部原生功能外&#xff0c;最大的特点是支持多用户。 原版 moments 目前不支持多用户。rmoment…

✅order by 是怎么实现的?

首先排序功能由 ORDER BY 实现&#xff0c;具体排列顺序取决于优化器的选择。若优化器认为索引排序更有效率&#xff0c;则使用索引排序&#xff1b;反之&#xff0c;则使用 filesort&#xff08;执行计划中额外信息提示&#xff1a;使用 filesort&#xff09;。然而&#xff0…

如何制定精益生产团队的目标和考核机制?

当下&#xff0c;精益生产已经成为企业追求高效运营和持续竞争优势的重要策略。而要实现精益生产的最大化效益&#xff0c;制定科学合理的团队目标与考核机制显得尤为重要。本文&#xff0c;深圳天行健企业管理咨询公司将分享如何制定精益生产团队的目标和考核机制&#xff0c;…

【Test 19】 数据结构 快速排序详解!

文章目录 1. 快速排序的非递归版本2. 快速排序2.1 hoare 版本一2.2 挖坑法 &#x1f427;版本二2.3 前后指针 版本三2.4 调用以上的三个版本的快排 3. 快速排序的优化 1. 快速排序的非递归版本 &#x1f192;&#x1f427;关键思路&#xff1a; &#x1f34e;① 参数中的begin…

vue3第三十六节(自定义插件)

一、首先什么是插件 插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。 主要应用于以下四个方面 1、通过 app.component() 和 app.directive() 注册一到多个全局组件或自定义指令。 2、通过 app.provide() 使一个资源可被注入进整个应用。 3、向 app.config.globalPro…

【乐吾乐3D可视化组态编辑器】数据集与数据订阅

对于物联网或者数字孪生项目来说&#xff0c;单纯的静态场景展示是无法满足需求的&#xff0c;它需要系统可以提供一种方式将后台数据与模型数据关联&#xff0c;当后台数据推送更新时&#xff0c;模型数据能自动同步。接下来&#xff0c;我们将向您介绍如何在系统中实现这一需…

Linux--线程的分离、线程库的地址关系的理解、线程的简单封装(二)

线程系列&#xff1a; 线程的认识&#xff1a;讲解线程的概念和线程的基本控制 线程的分离 线程分离是指将一个线程从主线程中分离出来&#xff0c;使其能够独立运行。当一个线程被设置为分离状态时&#xff0c;它结束时系统会自动回收其资源&#xff0c;而不需要其他线程使用…

ArcGIS空间数据处理、空间分析与制图;PLUS模型和InVEST模型的原理,参量提取与模型运行及结果分析;土地利用时空变化以及对生态系统服务的影响分析

工业革命以来&#xff0c;社会生产力迅速提高&#xff0c;人类活动频繁&#xff0c;此外人口与日俱增对土地的需求与改造更加强烈&#xff0c;人-地关系日益紧张。此外&#xff0c;土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

北京大学第一医院与智源研究院共同发布基于可信执行环境的AI医学影像挑战赛

肾动脉狭窄是导致继发性高血压及肾功能不全的常见原因&#xff0c;而目前针对肾动脉狭窄功能学的评估尚处于探索阶段。数据保护和可信计算环境是目前人工智能技术应用于临床研究的一大瓶颈。北京大学第一医院与北京智源人工智能研究院心脏AI 联合研究中心特发布基于可信执行环境…

Ubuntu22.04之解决:Flameshot无法截图问题(二百三十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Ant design vue的表格双击编辑功能(即双击开始编辑并自动获得焦点,失去焦点时完成编辑)

本文基于Ant Design Vue官方网站的表格&#xff08;可编辑单元格&#xff09;&#xff08;表格 Table - Ant Design Vue (antdv.com))中的样板代码获得双击编辑且获得焦点、失去焦点时完成编辑的功能。 要点&#xff1a; &#xff08;1&#xff09;双击时候实现编辑&#xff…

如何使用Cloudways搭建WordPress网站(附最新Cloudways优惠码)

如今&#xff0c;搭建网站已经变得非常简单&#xff0c;这主要得益于开源的CMS建站系统的兴起。即使是不懂编程的人也能轻松搭建自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自己的网站。 WordPress是目…