【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

news2024/11/24 11:27:12

  • inode
  • 软硬链接
    • 创建软硬链接
    • 理解硬链接
    • 理解软链接

inode

了解一下文件系统:
在这里插入图片描述

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被
划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设
定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
    同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
    未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
    文件系统结构就被破坏了—备份
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • inode Table 节点表:存放文件属性 如 文件大小,所有者,最近修改时间等,保存了分组内部所有可用的inode(已经使用/没有使用)
  • Date blocks :保存的是分组内部所有文件的数据块

软硬链接

创建软硬链接

创建软链接:

我们先随便touch一个文件file.txt,我们使用ll -li命令查看到的前面的数字是inode的值,这里是658016
在这里插入图片描述

给一个文件创建软链接命令:

ln -s file.txt soft_file.link

软链接的inode值是658307
在这里插入图片描述

创建硬链接:

给一个文件创建硬链接命令:

ln file.txt hard_file.link

我们可以发现file.txthard_link的属性和inode都是一样的
在这里插入图片描述

理解硬链接

我们给file.txt文件中追加重定向一些数据:
在这里插入图片描述
我们使用cat命令查看file.txthard_file.link里面的数据,可以发现都是一样的内容
在这里插入图片描述

建立一个硬链接,究竟是做了什么?
 建立硬链接,根本没有创建新文件!因为没有给硬链接分配独立的inode既然没有创建文件,那么你一定没有自己的属性集合和内容集合你用的一定是别人的inode和内容
在这里插入图片描述
在这里插入图片描述
这个数字2,其实就是inode里面用来引用计数的硬链接数。

建立一个硬链接,就是在指导的路径下,新增文件名和inode编号的映射关系

什么时候一个文件算是被真正删除了?
 我们将file.txt删除后,它的硬链接个数会-1
在这里插入图片描述

当一个人文件的硬链接数变为0的时候,这个文件才算真正被删除了

理解软链接

我们将软链接的文件file.txt删除,我们会发现它的软链接标红了,且我们使用cat命令显示找不到这个文件,同样也可以说明,软链接不是通过inode编号去寻找file.txt,因为硬链接跟原文件inode编号是一样的,软链接是通过文件路径来寻找的。
在这里插入图片描述

比如我们重新创建一个同名文件,他有全新的inode,这时候软链接就恢复了,但是跟之前的硬链接已经没关系了:
在这里插入图片描述

一般情况下,软链接相当于windows下软件的快捷方式
在这里插入图片描述

总结软硬件链接:

  • 软硬链接有什么区别:是否具有独立的inode
  • 软链接具有独立的inode,可以被当做独立文件看待
  • 硬链接没有独立的inode

软链接的作用:

下面是完整的shell操作流程:

[AMY@VM-12-15-centos lesson_13]$ mkdir -p ./bin/exe/mydir/
[AMY@VM-12-15-centos lesson_13]$ cd ./bin/exe/mydir/
[AMY@VM-12-15-centos mydir]$ ll
total 0
[AMY@VM-12-15-centos mydir]$ touch hello.c
[AMY@VM-12-15-centos mydir]$ vim hello.c
[AMY@VM-12-15-centos mydir]$ cat hello.c
#include <stdio.h>
int main()
{
    printf("hello world!!\n");
    return 0;
}
[AMY@VM-12-15-centos mydir]$ gcc -o hello hello.c
[AMY@VM-12-15-centos mydir]$ ll
total 16
-rwxrwxr-x 1 AMY AMY 8360 Jun 24 16:28 hello
-rw-rw-r-- 1 AMY AMY   79 Jun 24 16:27 hello.c
[AMY@VM-12-15-centos mydir]$ cd -
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ pwd
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ ln -s ./bin/exe/mydir/hello myhello
[AMY@VM-12-15-centos lesson_13]$ ll -i
total 4
658016 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:26 bin
658313 lrwxrwxrwx 1 AMY AMY   21 Jun 24 16:30 myhello -> ./bin/exe/mydir/hello
[AMY@VM-12-15-centos lesson_13]$ ./myhello
hello world!!

上面的主要意思就是在该路径lesson_13下面创建一个目录到./bin/exe/mydir/,然后在这个路径写一个程序hello.c用来输出hello world!!,然后回到原路径,创建一个软链接ln -s ./bin/exe/mydir/hello myhello,运行程序./myhello输出hello world!!

硬链接的作用:

思考下面为什么普通文件的硬链接个数是1,而目录文件的硬链接是2
在这里插入图片描述

一个普通文件,本身就有一个文件名和自己的inode具有一个映射关系

在这里插入图片描述

而一个目录文件,除了本身文件名与自己的inode的一个映射关系,在目录里面还有.表示当前文件,与目录也具有一个映射关系,所以它的初始硬链接个数是2.

我们在mydir里面再创建一个目录,它的硬链接就是3

[AMY@VM-12-15-centos empty]$ ll -ia
total 8
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 .
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 ..
[AMY@VM-12-15-centos empty]$ cd ..
[AMY@VM-12-15-centos mydir]$ ll -ia
total 12
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 .
658301 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:47 ..
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 empty
[AMY@VM-12-15-centos mydir]$ cd ..
[AMY@VM-12-15-centos lesson_13]$ ll -ia
total 12
658301 drwxrwxr-x  3 AMY AMY 4096 Jun 24 16:47 .
664585 drwxrwxr-x 17 AMY AMY 4096 Jun 23 20:38 ..
658016 -rw-rw-r--  1 AMY AMY    0 Jun 24 16:47 file.txt
658307 drwxrwxr-x  3 AMY AMY 4096 Jun 24 16:57 mydir

在这里插入图片描述


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀

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

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

相关文章

【Qt】程序异常结束。The process was ended forcefully.(解决方法不一样哦)

环境 系统&#xff1a;win10 64bit Qt&#xff1a;5.14.1 编译器&#xff1a;MinGW 32-bit 问题 Qt工程编译正常&#xff0c;但无法调试&#xff0c;报错&#xff1a;程序异常结束。The process was ended forcefully. 步骤 已尝试网上方法仍然不行的&#xff0c;可以直接…

为什么JDK动态代理只能代理接口?

在Java中&#xff0c;动态代理是一种机制&#xff0c;允许在运行时动态地创建代理对象来代替某个实际对象&#xff0c;从而在其前后执行额外的逻辑。 为什么JDK动态代理只能代理接口实现类&#xff0c;原因是JDK动态代理是基于接口实现的。 当你使用Proxy类创建代理对象时&am…

第一章:Linux常用命令+VIM+SSH介绍+SSH密钥登录

目录 一、Linux常用命令 1&#xff09;# 与 $ 提示的区别 2&#xff09;ifconfig 3&#xff09; su 4&#xff09; cd 5&#xff09; 目录查看 6&#xff09; 查看文件内容 7&#xff09;创建目录及文件 8&#xff09;复制和移动 9&#xff09;其他 10&#xff09; …

Git 上传Github 超时问题

提交代码到GitHub总是超时&#xff0c;偶尔会直接上传成功。 提供一下解决方案 1.首先找到网络 2. 找到代理 3. 把自动检查设置全部关闭&#xff0c;然后打开手动设置代理&#xff0c;然后输入ip地址和你代理的端口号&#xff0c;保存即可。 4. 最后使用git push origin mast…

多边形偏移算法【Polygon Offsetting】

在本教程中&#xff0c;我们将描述一种膨胀或收缩多边形的算法。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、一般形式的同调 为了简单起见&#xff0c;让我们从一个形状开始&#xff0c;一个正方形。 我们可能熟悉通过放大或缩小形状来缩放形状的想法。 从技术…

Jmeter实现生成全局参数-随机数

我在做项目的过程中&#xff0c;用的比较多的是【前置处理中】-用户参数 步骤一&#xff1a;添加参数处理器 步骤二&#xff1a;填写项目中可能会用到的一些参数&#xff08;固定的或者随机的都可以&#xff09; teacher_name${__RandomString(1,赵钱孙李周吴郑王冯陈褚卫蒋沈…

Python指定函数参数和返回值的类型

先看一个简单的示例&#xff1a; # name指定为str类型&#xff0c;返回值为str类型 def greeting(name: str) -> str:return hello: nameif __name__ __main__:print(函数参数类型、返回值类型基本使用)s greeting(张三)print(s)try:s greeting(123) # 可以传递其他类…

学习网页设计html个人总结

学习网页设计html个人总结篇一 我在网上进行的逻辑教学工作已经完成了&#xff0c;闲暇无事之余&#xff0c;便想将个人的主页——《思东书屋》重新进行一下规划和设计&#xff0c;为此购买了几本有关网页设计和制作的书籍&#xff0c;开始学习网页的基本语言HTML。尽管网页制作…

postgresql 数据库 索引 介绍

postgresql 数据库 索引 介绍 文章目录 postgresql 数据库 索引 介绍前言一 什么是索引&#xff1f;二 简介三 索引的种类B-treeHash索引GiST索引GIN 索引BRIN 索引SP-GiST索引 CREATE INDEX1.大纲2.描述3. 参数UNIQUECONCURRENTLYIF NOT EXISTSINCLUDEnameONLYmethodcolumn_na…

Mysql之账号管理、建库以及四大引擎详解

目录 一、MySql数据库引擎 1.1 什么是数据库引擎&#xff1f; 1.2 MySQL常见数据库引擎 1.2.1.InnoDB(MySQL默认引擎) 1.2.2.MyISAM 1.2.3.MEMORY&#xff08;Heap&#xff09; 1.3 存储引擎查看 二、建库 2.1.默认数据库介绍 2.2.建库 2.3.查看数据库 2.4.删除数…

【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

在很多时候我们需要读写文本文件进行读写&#xff0c;比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本&#xff0c;比如修改了一个 txt 文件后保存&#xff0c;就需要对这个文件进行读写操作。本文介绍简单的文本文件读写&#xff0c;内容精简&#xff0c;让大家了解文本读写的…

linux 内核的学习

一、启动流程 二、进程调度 进程 进程控制块&#xff08;pid&#xff09;结构体 重要的信息 进程标识符 pid 状态&#xff1a;任务状态 优先级&#xff1a;相对其他进程 程序计数器&#xff1a;程序中即将被执行的下一条指令的地址 内存指针&#xff1a;包括程序代码…

echarts 柱状体点击空白处

点击红框里的空白区域&#xff1a; 再data里定义的idlist变量:idList: [800, 300, 500, 400, 800, 300, 500, 400, 800, 300, 500, 400, 800, 300,500, 400, 800, 300, 500, 400,]//以下是js代码var chartDom document.getElementById(echartsOne)this.myChart echarts.init…

数据产品经理的职业发展机会

在当今的数字时代&#xff0c;数据产品经理已成为许多企业中不可或缺的角色。随着越来越多的企业开始将数据应用于业务决策和产品开发中&#xff0c;数据产品经理的需求也不断增加。因此&#xff0c;学习成为一名数据产品经理成为了许多人的热门选择。下面说一说关于如何学习数…

tty(imx serial)(二)

基于linux-3.14.16 基于imx分析 一、串口设备注册 注册了一个uart设备驱动&#xff0c;和一个平台设备驱动 先一个一个看 1、serial_imx_driver平台设备驱动 看看匹配的设备树&#xff0c;imx6qdl.dtsi定义了很多&#xff0c;我们只看一个 如上图&#xff0c;设备树描述了…

基于 RK3399+fpga 的 VME 总线控制器设计(二)硬件和FPGA逻辑设计

3.2 FPGA 最小系统设计 FPGA 最小系统是指可以使 FPGA 正常工作的最基本的系统&#xff0c;主要包括电源电 路、配置电路、时钟和复位电路。本次设计使用的 FPGA 为紫光同创的 PG2L100H, 接下来具体介绍 FPGA 最小系统各个部分的电路设计。 &#xff08; 1 &#…

RflySim平台——高可信度的无人控制系统开发、测试与评估平台

01/RflySim平台背景 智能无人系统是一个复杂系统&#xff0c;涉及机械、控制、计算机、通信和材料等多个领域技术&#xff0c;而AI无疑是开发IUS所需的关键技术之一。随着新一代人工智能兴起&#xff0c;我们正面临一场新的工业革命&#xff0c;人类创造了各种无人系统&#x…

论文解读|点云分割中用于多尺度处理的金字塔结构

原创 | 文 BFT机器人 01 论文内容 这篇论文是关于点云分割中金字塔架构的多尺度处理的详细解读。 点云数据的语义分割是自动驾驶和其他应用中的关键任务。在这项工作中&#xff0c;作者指出了在点云分割中移动U形结构的紧迫需求和巨大好处&#xff0c;并受到图像分割领域最新进…

Fleet Farm EDI 需求详解

Fleet Farm 是一家成立于1955年的美国卖场&#xff0c;总部位于威斯康星州。作为一个全方位的零售商&#xff0c;Fleet Farm 提供了广泛的商品和服务&#xff0c;涵盖了农业用品、家居装饰、户外用品、汽车用品、园艺用品等多个领域。他们的使命是为客户提供高品质的产品和卓越…

《阿里大数据之路》读书笔记:第二章 日志采集

第二章 日志采集 一、浏览器的页面日志采集 浏览器的页面型产品/服务的日志采集可分为两大类&#xff1a; 页面浏览&#xff08;展现&#xff09;日志采集 指一个页面被浏览器加载呈现时采集的日志 此类日志是最基础的互联网日志 此类日志是目前所有互联网产品的两大基本指…