网站网络营销公司动漫网站开发毕业设计

张小明 2025/12/29 11:56:07
网站网络营销公司,动漫网站开发毕业设计,网络游戏工作室加盟,工业信息化部网站备案系统1. 缓冲区1.1 缓冲区的概念缓冲区是操作系统或标准库在内存中预留的一块连续存储空间#xff0c;专门用于暂存输入 / 输出数据。但它的核心作用不是 “存数据”#xff0c;而是减少 CPU 与外设的直接交互次数—— 因为 CPU 运算速度#xff08;GHz 级#xff09;与外设读写…1. 缓冲区1.1 缓冲区的概念缓冲区是操作系统或标准库在内存中预留的一块连续存储空间专门用于暂存输入 / 输出数据。但它的核心作用不是 “存数据”而是减少 CPU 与外设的直接交互次数—— 因为 CPU 运算速度GHz 级与外设读写速度磁盘 MB/s 级、键盘 / 显示器 KB/s 级相差数个数量级直接交互会导致 CPU 大量时间浪费在 “等待外设响应” 上。举个直观例子用打印机打印 100 行文档时若没有缓冲区CPU 需逐行发送数据并等待打印机完成有缓冲区时CPU 可一次性将 100 行数据写入缓冲区后续由打印机自行从缓冲区读取打印CPU 可同时处理其他任务。很多人误以为 “缓冲区只有一层”但实际上 Linux 中存在两层缓冲区二者分工不同层级实现者作用典型场景用户层缓冲区C 标准库如 Glibc减少用户程序调用系统调用的次数printf、fwrite 等库函数内核层缓冲区操作系统内核减少内核与硬件外设的直接交互write、read 等系统调用交互流程当调用 printf(hello) 时数据先写入 C 库的用户层缓冲区满足刷新条件后C 库调用 write 系统调用将数据写入内核层缓冲区内核再根据外设调度策略将数据刷到磁盘 / 显示器等外设。1.2 缓冲区的作用1. 减少系统调用次数降低 CPU 开销系统调用如 write需要切换 CPU 状态从用户态到内核态每次切换耗时约 1~10 微秒。若没有用户层缓冲区打印 1000 个字符需调用 1000 次 write有缓冲区时可一次性将 1000 个字符写入缓冲再调用 1 次 write 即可系统调用次数减少 99.9%。2. 协调外设速度差异提升用户体验以显示器输出为例若没有行缓冲printf(hello) 会立即触发 write但显示器刷新速度有限可能导致 “字符逐个显示” 的卡顿有行缓冲时数据会暂存到缓冲直到遇到 \n 或缓冲满再一次性刷新到显示器呈现 “整行输出” 的流畅效果。3. 避免数据丢失提升可靠性内核层缓冲区会缓存数据并根据 “延迟写” 策略刷盘如 Linux 的 Page Cache即使突然断电内核也会通过日志如 ext4 的 journal恢复缓冲区数据若直接读写磁盘断电时未完成的 IO 操作会导致数据损坏。1.3 缓冲区刷新的三种类型C 标准库如 Glibc将用户层缓冲区分为三类核心区别是 **“何时将数据从用户缓冲刷到内核缓冲”**这也是实际开发中最易踩坑的点。1全缓冲Full Buffer满了才刷触发条件缓冲区被填满默认大小通常为 4096 字节或 8192 字节、主动调用 fflush、进程正常退出。典型场景对磁盘文件的操作如 fopen(file.txt, w)。实战验证#include stdio.h #include fcntl.h #include unistd.h int main() { close(1); // 关闭stdoutfd1 // 打开文件fd1指向log.txt磁盘文件全缓冲 int fd open(log.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); printf(hello world); // 数据写入用户层缓冲未填满不刷新 close(fd); // 未主动fflush缓冲数据丢失 return 0; }运行结果运行后 log.txt 为空 —— 因为 printf 写入的 11 个字符未填满全缓冲默认 4096 字节正常来说我们退出进程就会刷新缓冲区然后将缓冲区的数据写入到 log.txt 中但是我们在退出进程前就用close将文件 log.txt 的文件描述符关闭了这样就算进程退出后刷新缓冲区也无法找到 log.txt 进而也就无法将数据写入到文件了此时缓冲区里的数据就丢失了。2行缓冲Line Buffer遇换行就刷触发条件遇到 \n、缓冲区填满、主动调用 fflush、进程正常退出。典型场景对终端的操作如 stdout默认指向显示器。实战验证#include stdio.h #include unistd.h int main() { printf(hello 1); // 无\n数据存行缓冲不输出 sleep(2); // 等待2秒终端无内容 printf(hello 2\n); // 有\n触发刷新终端输出“hello 1hello 2” sleep(2); return 0; }运行结果现象前 2 秒终端无输出第 2 秒时 “hello 1hello 2” 一起显示 —— 因为 hello 1 存于行缓冲hello 2\n 触发换行缓冲数据被一次性刷新。3无缓冲Unbuffered写了就刷触发条件数据写入后立即调用 write 刷到内核无需等待。典型场景标准错误流 stderr确保错误信息即时显示。实战验证#include stdio.h #include fcntl.h #include unistd.h int main() { close(2); // 关闭stderrfd2 // 打开文件fd2指向log.txt无缓冲 int fd open(log.txt, O_WRONLY | O_CREAT | O_TRUNC, 0666); perror(hello world); // perror输出到stderr无缓冲立即刷新 close(fd); return 0; }运行结果运行后 log.txt 包含 “hello world: Success”—— 因为 stderr 无缓冲perror 的数据直接刷到内核无需 fflush。1.4 场景注意我们来看以下场景#include stdio.h #include unistd.h int main() { //C函数调用 printf(hello printf\n); fputs(hello fputs\n, stdout); //系统函数调用 write(1, hello write\n, 12); fork(); return 0; }运行结果我们可以看到在打印到终端的时候是正常打印的但是如果重定向打印到 log.txt 文件的时候就出现了奇怪的现象C语言函数printf、fputs 都调用了两次而系统函数write 则正常调用了一次这是为什么呢这是因为我们在打印的时候如果带了\n打印到终端就是行缓冲遇到\n直接刷新。而如果是重定向打印到文件中此时刷新方式就会变成全缓冲也即除非用 fflush 函数等方法主动刷新否则将缓冲区填满后才会刷新。我们在调用C函数时会将数据存入到用户缓冲区中然后根据刷新条件写入到文件内核缓冲区中此时操作系统就会帮我们处理好数据自主决定如何写到硬件中相当于我们把快递交给了快递员后就默认已经能送到目的地了。在进程中我们调用了fork函数创建了子进程此时重定向到文件 log.txt 刷新方式为全缓冲我们知道创建的子进程会共享父进程的代码和数据只有更改的时候才会发生写时拷贝而其实父进程的缓冲区也会和子进程共享这个缓冲区就是用户缓冲区在进程结束后就会将用户缓冲区的数据刷新到 log.txt中这其实就相当于对数据进行更改了为了保证进程独立性就会发生写时拷贝此时父进程和子进程各自拥有自己的缓冲区其中的数据是一样的在进程结束后后父进程和子进程会将各自缓冲区中的数据写到 log.txt中此时也就有了两份数据了。那么为什么系统函数不会出现这种情况呢那是因为系统函数会直接将数据写入到文件内核缓冲区没有写入到用户缓冲区这一中间步骤子进程和父进程共享空的用户缓冲区也就不会发生写时拷贝所以只有一份 write数据。总结C 函数重复的原因重定向到文件时stdout是全缓冲printf/fputs的内容存在用户层缓冲区里fork后父子进程共享用户缓冲进程退出时刷新缓冲属于 “修改操作”触发写时拷贝 —— 父子各有一份缓冲数据最终都刷到文件导致重复。write正常的原因write是系统调用直接写入内核层缓冲区没有用户层缓冲的中间步骤fork时内核缓冲由 OS 管理不会触发用户层的写时拷贝所以只输出一次。以上我们谈论的都是打开的文件接下来我们来谈谈存在磁盘中未被打开的文件。2 磁盘结构与地址映射文件的底层存储依赖磁盘而磁盘的物理结构和地址寻址方式直接决定了文件存储的效率。理解这部分内容是掌握文件系统的前提。2.1 磁盘的物理结构磁盘是计算机中唯一的机械设备主要由盘片、磁头、磁头臂、主轴等部件组成盘片磁盘的核心存储介质每个盘片有上下两个盘面每个盘面对应一个磁头。磁道盘片表面的同心圆轨道从外圈到内圈依次编号0 磁道开始。扇区磁道被划分的扇形区域是磁盘存储的最小物理单位默认大小为 512 字节。柱面所有盘片上半径相同的磁道构成的虚拟圆柱是分区的最小单位。磁头通过磁头臂的径向移动定位磁道盘片通过主轴旋转定位扇区二者配合实现数据的读写。磁盘的存储结构图一个盘片有两个盘面一个盘面如上图a所示。一个盘面中有很多圆这些圆其实就是磁道。而一个磁道又有多个扇区扇区是磁盘存储的最小物理单位默认为512字节每个磁道存储的扇区数相同。虽然不同磁道间的扇区看起来大小不同但其实它们存储的数据大小是相同的有些先进的磁盘可以做出改进但本文暂且不讨论。我们再来看看图b图b中有三个盘片六个盘面而柱面其实是一种抽象结构我们可以理解为是六个盘面中所有半径相同的磁道构成一个虚拟圆柱而这就是柱面。如图中柱面k我们可以理解为是六个盘面中所有半径为k构成的圆柱体同样有多少半径不同的磁道就有多少柱面。我们再来看看加上磁头和机械臂的图磁盘表面不断旋转用以定位扇区而磁头则在半径方向不断移动用以定位磁道。六个盘面各有一个磁头传动臂带动所有磁头同步沿径向移动同步移动不代表一同修改数据这样能保证所有磁头同时定位到同一柱面的不同磁道这也是 “柱面是分区最小单位” 的原因。2.2 磁盘的地址寻址方式要访问磁盘上的某个扇区需要明确其物理位置主要有两种寻址方式1CHS 寻址Cylinder-Head-Sector核心逻辑通过柱面号C、磁头号H、扇区号S三者定位扇区。计算方式磁盘容量 磁头数 × 柱面数 × 每磁道扇区数 × 每扇区字节数。局限性支持的最大容量有限传统 CHS 仅支持 8.4GB无法满足大硬盘需求。柱面是一个逻辑上的概念其实就是每一面上相同半径的磁道逻辑上构成柱面。所以磁盘物理上分了很多面但是在我们看来逻辑上磁盘整体是由“柱面”卷起来的类似于山楂卷所以磁盘的真实情况是磁道某一盘面的某一个磁道展开一维数组柱面整个磁盘所有盘面的同一个磁道即柱面展开二维数组整盘所有的盘面的展开三维数组整个磁盘不就是多张二维的扇区数组表也就是可以看成三维数组。所以寻址一个扇区先找到在哪一个柱面(Cylinder) 再确定在柱面内哪一个磁道(其实就是磁头位置Head)再确定扇区Sector所以就有了CHS。​2LBA 寻址Logical Block Address核心逻辑将磁盘所有扇区按顺序编号形成线性地址从 0 开始屏蔽物理结构差异。优势操作系统无需关注磁盘物理结构仅通过线性地址即可访问扇区磁盘固件自动完成 LBA 与 CHS 的转换。我们学过C/C的数组所以在我们看来上面的三维数组其实全都是一维数组所以每一个扇区都有一个下标我们叫做LBA(Logical Block Address) 地址其实就是线性地址。所以怎么计算得到这个LBA地址呢​3CHS 与 LBA 的转换将CHS转换为LBA• 磁头数乘以每磁道扇区数等于单个柱面的扇区总数。• LBA 柱面号C×单个柱面的扇区总数 磁头号H×每磁道扇区数 扇区号S - 1。• 即LBA 柱面号C×(磁头数×每磁道扇区数) 磁头号H×每磁道扇区数 扇区号S - 1。• 扇区号通常从1开始而在LBA中地址从0开始。• 柱面和磁道均从0开始编号。• 总柱面数、磁道数量、扇区总数等信息在磁盘内部会自动维护上层开机时会获取到这些参数。LBA转成CHS• 柱面号C LBA // (磁头数*每磁道扇区数)【就是单个柱面的扇区总数】• 磁头号H (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数• 扇区号S (LBA % 每磁道扇区数) 1• //: 表示除取整示例假设某磁盘有盘面数磁头数 4 个对应磁头号 0、1、2、3每盘面磁道数 100 个磁道号 0~99每磁道扇区数 60 个扇区号 1~60第一步计算 “单个柱面的扇区总数”单个柱面包含 “所有盘面的同一磁道”所以单个柱面扇区总数 磁头数 × 每磁道扇区数 4 × 60 240 个案例 1CHS 转 LBA已知某扇区的 CHS 地址是柱面号 C 5磁头号 H 2扇区号 S 30根据公式LBA C× 单个柱面扇区总数 H× 每磁道扇区数 (S - 1)代入数值LBA 5×240 2×60 (30 - 1) 1200 120 29 1349案例 2LBA 转 CHS已知某扇区的 LBA 地址是 2500反向转换为 CHS 地址1. 计算磁头号 H磁头号 H (LBA ÷ 单个柱面扇区总数) 的余数 ÷ 每磁道扇区数先算2500 ÷ 240 10 余 100因为 240×1024002500-2400100再算100 ÷ 60 1 余 40 → 磁头号 H12. 计算柱面号 C柱面号 C LBA ÷ 单个柱面扇区总数 2500 ÷ 240 10 → 柱面号 C103. 计算扇区号 S扇区号 S (LBA ÷ 单个柱面扇区总数) 的余数 % 每磁道扇区数 1即100 % 60 1 40 1 41最终结果LBA2500 对应的 CHS 地址是 柱面 10、磁头 1、扇区 41。所以从此往后在磁盘使用者看来根本就不关心CHS地址而是直接使用LBA地址磁盘内部自己转换。所以从现在开始磁盘就是一个元素为扇区的一维数组数组的下标就是每一个扇区的LBA地址。OS使用磁盘就可以用一个数字访问磁盘扇区了。2.3 文件存储的最小单位磁盘的最小物理单位是扇区但操作系统读写数据时不会逐个扇区操作效率过低而是将连续的扇区组合成 “块”Block• 块是文件存取的最小逻辑单位大小由格式化时指定常见 4KB即 8 个扇区。• 块的存在减少了 I/O 操作次数同时便于内存缓存连续数据的缓存命中率更高。前面我们说一个LBA地址对应一个扇区而在操作系统重读写数据一次性操作一整个块8个扇区此时其实只需要这一块的首个扇区的LBA地址就可以根据偏移量来操作整个块的所有扇区的数据了。3. 文件系统磁盘的空间很大要如何进行管理呢我们假设磁盘有500G的空间那么我们不妨把它分为一个个分区进行管理我们把这些分区管理好了就能管理好整个磁盘。但是一个分区的大小其实还是很大我们可以把一个分区再划分为若干个块组我们把这些组管理好了就能管理好整个分区进而管理好整个磁盘了这其实就是分治思想。3.1 EXT 文件系统的整体结构EXT 文件系统将分区划分为多个大小相等的块组Block Group每个块组包含相同的结构便于管理启动块Boot Block位于分区最开头大小 1KB存储分区信息和启动程序不受文件系统管理。块组Block Group分区的核心管理单元每个块组包含超级块、块组描述符表、块位图、inode 位图、inode 表、数据块 6 个部分。3.2 块组的关键组成部分注该图未画出Boot Block可参考上一张图。超级块Super Block作用存储文件系统的全局信息相当于文件系统的 “户口本”。包含内容块总数、inode 总数、空闲块数、空闲 inode 数、块大小、inode 大小、最近挂载时间、最近写入时间等。冗余设计超级块在多个块组中备份第一个块组必存防止单个块损坏导致整个文件系统失效。块组描述符表GDT作用描述每个块组的属性每个块组对应一个描述符。包含内容块组内块位图、inode 位图、inode 表的起始位置以及该块组的空闲块数、空闲 inode 数等。冗余设计与超级块类似在多个块组中备份确保可靠性。块位图Block Bitmap作用记录数据块的使用状态每个比特位对应一个数据块1 表示占用0 表示空闲。优势通过位图可快速查找空闲数据块查询效率高仅需遍历对应比特位。inode 位图Inode Bitmap作用记录 inode 的使用状态每个比特位对应一个 inode1 表示占用0 表示空闲。与块位图配合实现 inode 和数据块的快速分配与释放。inode 表Inode Table作用存储文件的元信息属性每个文件对应一个 inode。inode 包含的属性文件类型、权限rwx、所有者uid、所属组gid、文件大小、访问时间Access、修改时间Modify、创建时间Change、数据块指针等。关键特性inode 大小固定128 字节或 256 字节与文件内容分离存储inode 编号唯一以分区为单位不可跨分区文件名不存储在 inode 中而是存储在目录的数据块中。操作系统就是通过每个文件的inode编号找到磁盘中文件的inode结构体的存放位置而inode结构体中又存放着该文件的数据块的指针通过这些指针可以找到文件的数据。所以我们也就知道了有了文件的inode就可以找到磁盘的文件的属性 内容了。注inode中不包括文件名在linux中文件名不属于文件的属性我们会在下面进行讲解。我们可以通过ls -i显示当前目录下的所有文件的inode编号数据块Data Blocks作用存储文件的实际内容大小与块一致常见 4KB。不同文件类型的存储方式普通文件数据直接存储在数据块中。目录数据块存储该目录下的文件名与 inode 编号的映射关系。链接文件软链接存储源文件路径硬链接无独立数据块与源文件共享 inode。3.3 inode与数据块的映射关系inode 通过数据块指针数组i_block[EXT2_N_BLOCKS]关联数据块EXT2 中该数组包含 15 个指针采用 “直接 间接” 的分级映射方式兼顾小文件效率和大文件存储12 个直接指针直接指向存储文件内容的数据块适合小文件≤48KB12×4KB。1 个一级间接指针指向一个存储数据块编号的中间块该中间块可存储 1024 个数据块编号4KB/4 字节对应 4MB 存储。1 个二级间接指针指向一个存储一级间接块编号的中间块对应 4GB 存储。1 个三级间接指针指向一个存储二级间接块编号的中间块对应 4TB 存储。4. 目录的本质先说结论在 Linux 中目录也是文件其核心作用是建立文件名与 inode 的映射关系让用户可以通过文件名访问文件。我们在上面说了操作系统是通过每个文件的inode找到它存储在硬盘中的哪个位置但我们平常运行我们的可执行程序或使用各种命令时一切皆文件都是使用的文件名啊这又是怎么回事呢其实这就好比我们之前学过的虚拟地址空间在操作系统中自然也存在一张张表记录着每个文件的文件名和它的inode的映射关系。而在linux中目录也是文件特殊文件那么它自然也有自己的数据块目录的数据块中存储的就是该目录下所有文件的文件名和inode的映射关系表进而让用户能通过文件名来访问文件。4.1 目录的存储结构目录的属性与普通文件一样目录有自己的 inode存储目录的权限、所有者、大小等属性。目录的数据块存储该目录下所有文件包括子目录的 “文件名 inode 编号” 映射关系格式为(文件名, inode编号)。示例使用ls -li命令可查看目录下文件的 inode 编号使用stat /可查看根目录的 inode通常固定为 2。4.2 目录的核心特性同名文件限制同一目录下不能有同名文件因为映射关系是 “一对一”文件名作为 keyinode 编号作为 value避免查找冲突。目录权限的意义r 权限允许读取目录下的文件名列表如ls命令。w 权限允许在目录下创建、删除、重命名文件需修改目录的数据块。x 权限允许进入目录如cd命令本质是允许将目录路径写入环境变量 PWD。4.3 路径解析用户访问文件时通过路径绝对路径或相对路径指定位置路径解析的过程就是从根目录出发逐层查找目录的映射关系最终找到目标文件的 inode解析流程以/home/nep/test.c为例先访问根目录/inode2从其数据块中找到home对应的 inode再访问home目录的 inode找到nep对应的 inode最后访问nep目录的 inode找到test.c对应的 inode完成解析。递归终止条件根目录/没有上级目录其 inode 编号固定是路径解析的起点。4.4 路径缓存我们是否每次访问一个文件都要从根目录开始解析一次次进行IO操作来查找对应的信息呢其实不是的这样做会有很大损耗操作系统对此做出了处理。频繁的路径解析会产生大量磁盘 I/O效率低下Linux 内核通过 dentry目录项结构体缓存路径信息dentry 的作用将已解析的路径文件名与 inode 的映射关系存储在内存中形成树形结构下次访问时直接从缓存查找无需重复遍历磁盘。dentry 的特性• 每个文件包括目录对应一个 dentry 结构体包含父目录指针、子目录列表、inode 指针等。• 加入 LRU最近最少使用淘汰机制当内存不足时回收不常用的 dentry。• 支持哈希查找进一步提升路径查询效率。在有dentry之前我们要访问一个文件每次都要从根目录开始路径解析每往下解析到一个目录时都要涉及到IO操作到磁盘中寻找信息这样效率会很低下。在有了dentry之后我们除了首次访问某个文件还要从根目录开始解析之后都会将解析的路径数据存储在dentry中方便我们重复使用。当然操作系统不会无限的记录使用过的路径信息在记录到一定程度后会按需删除使用最少的路径信息保证内存有足够的空间使用。5. 文件的增删查改文件的所有操作本质都是对 inode、数据块、目录映射关系的修改结合文件系统的结构我们可以清晰理解其底层逻辑。5.1 创建文件touch1. 分配 inode遍历 inode 位图找到空闲 inode比特位为 0将其标记为占用置 1并写入文件属性权限、所有者、创建时间等。2. 分配数据块若文件有内容遍历块位图找到空闲数据块比特位为 0标记为占用置 1将数据写入数据块。3. 建立映射关系在当前目录的数据块中添加 “文件名 新 inode 编号” 的映射条目。4. 关联 inode 与数据块将数据块的编号写入 inode 的i_block数组中。5.2 删除文件rm1. 解除目录映射从所在目录的数据块中删除该文件的 “文件名 inode 编号” 映射条目。2. 标记空闲状态将 inode 位图中该文件对应的比特位置 0块位图中对应数据块的比特位置 0。3. 无需清空数据文件的属性和内容采用 “覆盖写” 方式删除时仅需标记空闲无需清空数据后续新文件会覆盖原有数据因此删除速度极快。5.3 查找文件ls/cat1. 路径解析从根目录出发逐层解析路径找到目标文件的 inode 编号会查看dentry。2. 验证 inode 有效性查看 inode 位图确认该 inode 处于占用状态比特位为 1。3. 访问文件属性从 inode 表中读取文件的元信息如stat命令。4. 访问文件内容通过 inode 的i_block数组找到数据块读取其中的内容如cat命令。5.4 修改文件echo/vi1. 修改属性如chmod直接修改 inode 表中该文件对应的属性字段同时更新 inode 的 Change 时间。2. 修改内容如echo test test.c• 若原有数据块足够直接覆盖数据块中的内容更新 inode 的 Modify 时间和 Change 时间。• 若原有数据块不足分配新的数据块将新数据写入更新 inode 的i_block数组同时更新相关时间字段。6. 挂载分区我们在上面说了磁盘管理内存会将内存分区管理同时inode编号不跨区如a分区有5000号inodeb分区也可以有5000号inode但它们不是一个inode那么一个inode编号怎么知道自己在哪个分区呢这里就需要引入挂载的概念。Linux 支持多个磁盘分区每个分区可格式化为不同的文件系统如 EXT4、XFS挂载机制让这些分区可以被统一访问挂载的本质将一个分区的文件系统与目录树中的某个目录挂载点关联访问该目录时实际访问的是分区的文件系统。关键概念• 挂载点必须是一个空目录挂载后该目录的原有内容被隐藏卸载后恢复。• 循环设备loop device允许将文件如磁盘镜像作为块设备挂载如mount -t ext4 ./disk.img /mnt/mydisk。• 分区识别通过路径前缀判断文件所在分区如/mnt/mydisk下的文件属于挂载的disk.img分区。7. 软硬链接Linux 支持软硬链接两种机制通过不同的方式关联文件满足不同的使用场景。7.1 软链接Symbolic Link本质创建一个独立的文件有自己的 inode其数据块中存储的是源文件的路径绝对路径或相对路径。特性• 是独立文件有自己的 inode 和属性大小为源文件路径的长度。• 源文件删除后软链接失效变成 “死链接”。• 可以跨分区创建支持链接目录。• 用途快捷方式如桌面图标指向程序、简化长路径访问。软链接文件一般就是对应路径文件的一种快捷访问方式。其中在Windows系统中我们桌面上软件图标就是访问对应程序的快捷方式本质其实就是一个软连接文件。在Linux中我们可以通过指令ln -s 文件名软链接名设置软连接我们可以发现link_code6的权限的最前方是l而不是-这代表它不是普通文件同时 code6和link_code6的 inode编号也不同证明了它是一个独立的文件。我们可以通过指令unlink 软连接名取消对应的软连接并且如果删除软连接所指向的文件那么该软连接文件也就没有意义了。7.2 硬链接Hard Link本质在目录中添加一个新的 “文件名 inode 编号” 映射条目与源文件共享同一个 inode。特性• 无独立 inode不是独立文件与源文件完全等价。• 硬链接数记录在 inode 的i_links_count字段创建时加 1删除时减 1仅当硬链接数为 0 时inode 和数据块才被标记为空闲。• 不能跨分区创建inode 编号以分区为单位跨分区无意义。• 用途文件备份修改一个另一个同步更新、目录的.和...是当前目录的硬链接..是父目录的硬链接。在Linux中我们可以通过指令ln 文件名 硬链接名建立对应的硬链接同样我们也能通过unlink 硬链接名取消对应的硬链接。我们可以发现 link_code6的inode编号和 code6的完全相同这就代表了它不是一个独立的文件最多算作一个“别名”每创建一个硬链接对应的硬链接数就会加一如图中数量为2。普通文件是这样我们知道目录也是文件那目录与普通玩家有什么不同呢我们来看看为什么我们刚创建这个目录test1它的硬链接数就是2呢答案很简单我们先进入test1目录谜底揭晓了当前目录下还存在一个隐藏文件.指向当前目录所以硬链接数为2如果我们在test01下再创建一个子目录就会发现它的硬链接数会变成3答案我们也不难猜到其实就是test01目录下存在一个..的隐藏目录也指向了test1所哟test1的硬链接数就变为了37.3 软硬链接对比结语好好学习天天向上有任何问题请指正谢谢观看
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

搭建个人视频网站十堰市公司网站建设

AutoGPT执行数学证明任务的可能性探究 在现代人工智能的发展浪潮中,一个引人深思的问题逐渐浮现:AI能否真正“理解”数学,并独立完成严谨的证明? 我们早已习惯让大型语言模型(LLM)回答数学题、解释公式含…

张小明 2025/12/29 16:48:30 网站建设

微信微网站开发百度云快速的宝安网站建设

第一章:Open-AutoGLM安全审计的背景与意义随着大语言模型在自动化推理、代码生成和智能决策等场景中的广泛应用,其安全性问题日益成为业界关注的焦点。Open-AutoGLM作为一个开源的自动代码生成与逻辑推理框架,集成了多模态理解与程序合成能力…

张小明 2025/12/29 16:53:41 网站建设

酒店网站设计模板情留 蚊子 pj wordpress

GPT-SoVITS语音克隆:当你的声音在数字世界中自我对话 想象这样一个场景:你轻声说了一分钟的话,录下一段普通到不能再普通的语音——可能是读诗、讲故事,或是对着空气自言自语。几天后,这个声音开始替你写日记、朗读从未…

张小明 2025/12/29 12:17:12 网站建设

可以以个人名义做网站么登录注册页面模板

还在为每天赶着去公司打卡而烦恼吗?🤔 XposedRimetHelper这款神奇的钉钉辅助模块,让你在任何地点都能轻松完成打卡!今天就来详细解析这个强大的位置模拟工具,让你的考勤管理从此变得轻松自如。 【免费下载链接】Xposed…

张小明 2025/12/29 16:48:38 网站建设

壹佰网站建设电销客户资源怎么找

2025最新!8个AI论文平台测评:本科生毕业论文写作全攻略 2025年AI论文平台测评:选对工具,轻松应对毕业写作 随着人工智能技术的不断进步,AI论文平台已经成为本科生撰写毕业论文的重要辅助工具。然而,面对市场…

张小明 2025/12/29 16:48:37 网站建设

寻花问柳一家专门做男人的网站柳江网站开发

第一章:VSCode 量子开发的环境备份在进行量子计算项目开发时,使用 Visual Studio Code(VSCode)作为集成开发环境已成为主流选择。为确保开发进度不因系统故障或配置丢失而中断,建立一套完整的环境备份机制至关重要。安…

张小明 2025/12/29 16:52:15 网站建设