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

  • 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

在这里插入图片描述


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统详解

文章目录 引言1. 认识Linux1.1 操作系统概述1.2 认识Linux1.3 虚拟机介绍1.4 远程连接Linux操作系统1.5 WSL1.6 虚拟机快照 2. Linux基础命令2.1 Linux的目录结构2.2 命令入门2.3 目录切换相关命令&#xff08;cd/pwd&#xff09;2.4 相对路径&#xff0c;绝对路径和特殊路径符…

数据结构--特殊矩阵的压缩存储

数据结构–特殊矩阵的压缩存储 一维数组的存储结构 ElemType a[10]; //ElemType型一维数组各数组元素大小相同&#xff0c;且物理上连续存放。 数组元素a[i]的存放地址 LOC i * sizeof(ElemType) ( 0 ≤ i < 10 ) (0\le i < 10) (0≤i<10) 注:除非题目特别说明&…

go-zero的rpc服务案例解析

go-zero的远程调用服务是基于gRpc的gRPC教程与应用。 zero使用使用gRpc需要安装protoc插件&#xff0c;因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。 gRPC 的代码生成还依赖 protoc-gen-go&#xff0c;protoc-gen-go-grpc 插件来配合生成 Go…

论文阅读 (94):Substructure Aware Graph Neural Networks (SAGNN, AAAI2023)

文章目录 1 要点1.1 概述1.2 一些概念1.3 代码1.4 引用 2 基础知识2.1 符号2.2 信息传递神经网络 (MPNN) 3 方法3.1 子图提取3.1.1 基于节点的策略3.1.2 基于图的策略 3.2 随机游走返回概率编码3.3 子图信息注入的信息传递 1 要点 1.1 概述 题目&#xff1a;子结构感知图神经…

adb: failed to install .\xxxxxx.apk: Failure [INSTALL_FAILED_USER_RESTRICTED

开发者模式和USB调试均已打开&#xff0c;adb安装时报错。看了一下&#xff0c;小米手机还需要开启USB安装才行。 问题已解决

基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

目录 项目介绍研究背景国内外研究现状分析研究目的研究意义研究总体设计数据获取网络爬虫介绍豆瓣电影数据的采集 数据预处理数据导入及环境配置Flume介绍Hive介绍MySQL介绍Pyecharts介绍环境配置及数据加载 大数据分析及可视化豆瓣影评结构化分析豆瓣电影类型占比分析豆瓣电影…

C语言数组练习

1、打印杨辉三角 #include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) {int m;printf("please enter a value:");scanf("%d",&m);int arr[m][m];for(int i0;i<m;i){for(int j0;j<m-i;j)printf(" …

【STM32】GPIO

一、GPIO简介 1. 基本介绍 GPIO是通用输入输出端口的简称&#xff0c;STM32芯片通过GPIO与外设连接&#xff0c;从而实现与外设的数据收发。 最基本的输出功能是由STM32控制引脚输出高、低电平&#xff0c;实现开关控制。如把GPIO引脚接入到LED灯控制LED亮灭&#xff0c;或者…

49天精通Java,第0天,编程语言类型有哪些?我心中的TOP1编程语言,什么是java跨平台性?

目录 一、常见的编程语言类型1、机器语言2、汇编语言3、高级语言 二、计算机编程语言三、跨平台性1、跨平台的优势包括&#xff1a;2、实现跨平台的方式包括&#xff1a; 四、Java的跨平台性五、java运行时和虚拟机六、Java内存管理和Java垃圾回收1、Java内存管理2、Java垃圾回…

SSM学习笔记-------SpringMVC(二)

SSM学习笔记-------SpringMVC&#xff08;二&#xff09; SpringMVC_day021、SSM整合1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步…

ACL 2023|如何智能生成吸引人又符合实际的标题?

夕小瑶科技说 原创 作者 | 小戏、Python 标题生成&#xff0c;乍一看似乎并不是一个复杂的任务&#xff0c;要数据简单的爬虫就可以获得许多标题-文本对&#xff0c;要评价通过用户点击与浏览的次数就多少可以区分“好标题”与“坏标题”&#xff0c;万事俱备使用一些经典的监…

HTTP/HTTPS 简介||HTTP 消息结构

HTTP/HTTPS 简介 HTTP 协议是 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&#xff0c;是用于从万维网&#xff08; WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP 是一个基于 TCP/IP 通信协议来传递数据&a…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线&#xff0c;在IBM叫做Storage N series&#xff0c;就是N系列&#xff0c;在2014年IBM终止了和NetApp之间的OEM关系&#xff0c;目前在市场上的OEM的NetApp存储型号主要是 FAS3000&#xff0c;FAS31和FAS32的中端系…

【新星计划·2023】Linux系统的架构和组件讲解

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解Linux系统的架构和组件。 目录 一、Linux系统的架构 1、硬件层 2、内核层 3、进程管理子系统 4、内存管理子系统 5、…

C语言 base32与base64加解密

概述 Base32、Base64编码就是分别用32个、64个可打印字符表示二进制数据。 一、Base32规则 32 2^5&#xff0c;所以需要5 Bit来表示一个base32字符。一个字节8 Bit&#xff0c;5和8的最小公倍数是40。编码的过程中&#xff0c;以5个字节为一组转为8个base32字符&#xff0c;不…

服务端⾼并发分布式结构演进之路

1.前置概念 应⽤&#xff08;Application&#xff09;/系统&#xff08;System&#xff09; 为了完成一整套服务的一个程序或相互配合的程序群 模块&#xff08;Module&#xff09;/组件&#xff08;Component&#xff09; 当应⽤较复杂时&#xff0c;为了分离职责&#xf…

2023年测试之路,从功能测试进阶测试开发工程师,突破内卷...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试开发工程师到…

SpringBoot配置外部Tomcat项目启动流程源码分析

前言 SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat)&#xff0c;该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 【1】创建项目并打War包 ① 同样使用Spring Initializer方式创建项目 …

并发编程_jmm部分

1. JMM 理解 前提&#xff1a;并发编程有3大问题&#xff0c;可见性、有序性、原子性。 导致可见性的原因是缓存&#xff0c;有序性的原因是 编译器优化。解决方法就是直接禁用缓存和编译器优化&#xff0c;导致程序性能堪忧。 因此合理的方案就是按需禁用缓存和编译器优化。 …

JUC之ThreadLocal

文章目录 1 基础知识1.1 强软弱虚四种引用 2 ThreadLocal出现的好处3 ThreadLocal源码分析3.1 ThreadLocal内存泄露问题3.2 ThreadLocal为什么使用的是弱引用3.3 清扫过期的Entry 4 ThreadLocal使用建议 1 基础知识 1.1 强软弱虚四种引用 【整体结构】 【强引用】 【软引用…