当前位置: 首页 > news >正文

在Linux中重定向,复制cp,硬链接的区别,Linux底层存储数据原理。

概念:

        我们可以用一句话简单概括一下三者

        重定向:>/>> 改变程序输出数据的目的地 (从屏幕改为文件),创建新文件

        cp       :重新创建一个新的文件副本,新文件与旧文件互不干扰,(新的inode和block,下面

                      会介绍到这个概念)

        硬链接:为一个数据块创建多个平等的入口(文件)

详细的比较:

特性重定向 > / >>复制 cp硬链接
本质Shell操作,改变数据流方向创建新的文件内容和新的inode创建新的目录项指向同一个inode
Inode号创建新文件,分配新的inode创建新文件,分配新的inode与源文件相同的inode号
磁盘空间占用新的数据块,增加磁盘使用量占用新的数据块,增加磁盘使用量不占用额外数据块空间,仅目录项大小
数据关系文件内容是命令输出的新内容独立的数据副本指向同一份数据
修改影响修改源文件或重定向文件,互不影响修改源文件或副本,互不影响修改任何一个“硬链接”,所有硬链接文件内容同步变化
删除影响删除重定向文件,只影响该文件本身删除源文件,副本不受影响删除任何一个硬链接,只要inode链接数不为0,数据依然可通过其他硬链接访问
跨文件系统支持支持不支持
对目录不能直接对目录重定向可以复制目录(需 -r 选项)通常不允许(超级用户在某些系统可创建,但不推荐)
命令示例echo "hi" > file.txtcp file.txt file_copy.txtln file.txt file_hardlink

Linux底层存储原理:

要理解他们的区别,要理解两个核心的区别:inodeData Block

你可以想象一个图书馆:

Data Block : 就是书架上实际上存放图书的地方。(硬盘存放的数据块)

inode          :就像图书馆的卡片,这张卡片不记录书的真实数据,记录着图书的元数据

inode 元数据:

        文件大小

        文件权限

        文件所有者和所属组

        文件创建/修改/访问时间

        指向数据块的指针(这本书放在哪个书架上)

        记录硬链接的数量

底层运行过程:

场景:假设现在有一个源文件source.txt

A: 重定向 > :

echo "New Data" > source.txt

1.shell解析命令发现>

2.shell会以截断模式打开(或创建)文件,如果发现source已经存在,会立即将文件大小截断为0

  字节

3.echo将New Data写入标准输出(studout)

4.由于重定向,shell将studout绑定到了source.txt的文件描述符

5.数据New Data 被写入source.txt分配的新数据块中(Data Block)

结果:source.txt的inode指向了新的数据块,旧数据已经被清空

B:追加重定向 >>:

echo "More Data" >> source.txt

1.shell 解析命令发现>>

2.shell以追加模式打开source.txt,文件指针直接直到文件末尾

3.echo将数据写道标准输出中(studout)

4.shell将studout绑定到source.txt的文件描述符

5.将“more Data” 追加到sourcce.txt的最后面,可能使用原有的数据块剩余部分或者创建新数据块

结果:source.txt对应的inode所对应的数据块数据增加,文件大小增加

C:复制 cp:

cp source.txt copy.txt

1.cp命令被调用

2.首先通过系统调用,获取source.txt的元数据

3.然后系统创建一个新文件,这会:

                在目录中增加一条:copy.txt -> 新的inode号

                为copy.txt分配元数据(权限,大小,通常继承源文件)

4.cp打开source.txt读取其数据块中所有的内容

5.同时将内容写到copy.txt,系统会将所有的数据写到为copy.txt新分配的数据块中

结果:两个文件名又有不同的inode,两个不同的inode又指向不同的数据块

D:硬链接 ln:

ln source.txt hardlink.txt

1.ln命令被调用

2.在当前目录(或者指定目录)创建新的目录项

3.这个新的目录项为hardlink.txt->source.txt的inode

4.系统会找到source的inode将其中的链接计数+1

5.整个过程不涉及任何数据复制和创建新数据

结果:现在有两个文件名,他俩指向同一个inode,而这个inode又指向同一个数据块


删除文件的真相:

在Linux中,rm底层命令就是“取消链接

执行rm source.txt时;

        在目录中取消source.txt对他inode的映射

        将对应的inode对应的链接计数减1

当该inode的连接技术减为0时,系统才会真正释放这个inode所对应的数据块。

所以对于硬链接当你删除source.txt时,只是将链接数减1,由于hardLink.txt依然映射这个inode,所以这个inode对应的数据块不会被释放

http://www.dtcms.com/a/446539.html

相关文章:

  • 软考~系统规划与管理师考试—知识篇—V2.0—考试科目2:系统规划与管理案例分析—题型分类—第七章 IT 服务持续改进—20192021
  • NopGraphQL 的设计创新:从 API 协议到通用信息操作引擎
  • 概率论:分布与检验
  • 网站后台视频教程视频号怎么付费推广
  • 浦江网站建设微信开发wordpress 浏览计数
  • 嵌入式开发学习日志35——stm32之超声波测距
  • 山东建设厅官方网站一级建造师搜索引擎平台
  • MATLAB计算有效干旱指数(Effective drought index, EDI)
  • 网站推广如何收费现在建一个网站一年费用只要几百元
  • 如何自己做游戏网站如何建设万网网站
  • 江苏省建设厅八大员考试报名网站石家庄有哪些公司可以做网站
  • 搭建Jenkins gitlab 环境
  • 企业做的网站费入什么科目江西网站备案
  • pink老师html5+css3day05
  • 哪里找人做网站织梦淘客网站
  • 网站开发原型法装个宽带多少钱
  • BTS7960 四轮运动控制 可行 前后左右
  • Linux学习笔记--i2c_Adapter驱动框架
  • 新乡做网站建设工程网站有哪些
  • liferay 做网站仿wordpress站
  • MySQL 中一条 SQL 语句的执行流程
  • 2025年--Lc162--H169.多数元素(数组和字符串)--Java版
  • wordpress搭建个人网站蚌埠市建设工程质监站网站
  • 中国建设銀行网站投诉电话wordpress 钩子列表
  • 腾讯云微服务平台TSF
  • 第125期:借助 n8n 构建 AI 智能体:10个自动化实践方案
  • 网站开发 案例wordpress怎么安装在宝塔软件
  • 网站权重对应的等级商丘至开网络科技有限公司
  • C++ 优先队列(priority_queue)深度解析
  • php 8.4.4 更新日志