什么是inode?

每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括:

  • 对应的文件
  • 文件字节数
  • 文件数据块的位置
  • 文件的inode号码
  • 文件的硬链接数
  • 文件的读写权限
  • 文件的时间戳

在Linux系统下,创建一个文件hello.txt

echo 'hello world' -> 'hello.txt'

接着使用stat命令查看hello.txt的inode信息:

stat hello.txt
文件:hello.txt
大小:14 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:34025713 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-08-18 15:44:56.158501724 +0800
最近更改:2022-08-18 15:44:56.158501724 +0800
最近改动:2022-08-18 15:44:56.158501724 +0800
创建时间:2022-08-18 15:44:56.158501724 +0800

inode和文件名

操作系统使用inode号码来识别文件,而人使用文件名来识别文件

人在打开文件的时候,实际上系统是先通过文件名找到对应的inode号码,然后根据inode号码找到文件inode信息,根据inode信息找到文件内容所在的数据块,最后读取数据。

硬链接

文件和inode的关系是一对一,而文件名和inode的关系则是一对多,系统允许多个文件名对应一个inode

inode信息中的硬链接(Links)数,就表示当前有几个文件名对应着该inode,换句话说,每个文件名就是文件的一个硬链接

增加硬链接

使用ln命令为hello.txt生成一个硬链接,格式:ln 源文件名 硬链接文件名

ln hello.txt hello-hard-link.txt

再用stat hello.txt查看源文件的硬链接数,值变为2

删除硬链接

rm -f hello-hard-link.txt

再次查看硬链接数,值为1

当一个文件的硬链接大于1时,删除一个硬链接(也就是文件名),不会影响源文件,只有当硬链接数等于0,系统才会删除源文件

修改源文件

修改源文件内容,会影响所有硬链接,因为硬链接都是指向同一个与源文件的数据块

软链接

软链接也叫符号链接,很好理解,可以理解为window系统里的快捷方式

先创建一个硬链接:

ln hello.txt hello_hard_link.txt

然后,创建一个软链接:

ln -s hello.txt hello_s.txt

此时,文件hello.txt有2个硬链接,1个软链接,接下来,删除刚刚用来创建软链接的文件名:

rm -f hello.txt

这个时候,打开文件hello_s.txt就会报错“No such file or directory”。

这就是软链接和硬链接的区别,软链接指向的是文件名(硬链接),硬链接指向的是文件的inode号码。

本文永久地址GitHub

透过inode来理解硬链接和软链接的更多相关文章

  1. 理解 Linux 的硬链接与软链接【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html 从 inode 了解 Linux 文件 ...

  2. 理解 Linux 的硬链接与软链接(待研究)

    从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...

  3. 硬链接、软链接和inode

    一.inode 在Linux中,“一切皆文件”. 唯一标识文件的是inode而非文件名,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 寻找正确的文件数据块. 什么是数据块呢?文件储存 ...

  4. (转)Linux硬链接、软链接及inode详解

    inode 文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读 ...

  5. 转:理解 Linux 的硬链接与软链接

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程 创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键 ...

  6. 理解 Linux 的硬链接与软链接

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘 ...

  7. [转帖]详解Linux系统inode原理--硬链接、软链接、innodb大小和划分等

    详解Linux系统inode原理--硬链接.软链接.innodb大小和划分等 原创 波波说运维 2019-07-17 00:03:00 https://www.toutiao.com/i6713116 ...

  8. 理解Linux的硬链接与软链接-转载

    理解Linux的硬链接与软链接 来自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

  9. 理解 Linux 的硬链接与软链接(转)

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘 ...

随机推荐

  1. 记一次 JDK SPI 配置不生效的问题 → 这么简单都不会,还是回家养猪吧

    开心一刻 今天去幼儿园接小侄女,路上聊起了天 小侄女:小叔,今天我吃东西被老师发现了 我:老师说了什么 小侄女:她说拿出来,跟小朋友一起分享 我:那你拿出来了吗 小侄女一脸可怜的看向我,说道:没有,我 ...

  2. 聊聊OOP中的设计原则以及访问者模式

    一  设计原则 (SOLID) 1.  S - 单一职责原则(Single Responsibllity Principle) 1.1  定义 一个类或者模块只负责完成一个职责(或功能), 认为&qu ...

  3. 字节开源RPC框架Kitex的日志库klog源码解读

    前言 这篇文章将着重于分析字节跳动开源的RPC框架Kitex的日志库klog的源码,通过对比Go原生日志库log的实现,探究其作出的改进. 为了平滑学习曲线,我写下了这篇分析Go原生log库的文章,希 ...

  4. C# List转String的办法

    2022年5月28日 初始记录 代码: String.Join(",", List.ToArray());

  5. Hexo + VSCode 插入 Markdown 图片解决办法

    最近打开 typora 时发现弹窗强更,不让用 beta 版了 想到自己并不是非常需要 WYSIWYG,而且也不是经常使用 typora,于是直接退回到 VSCode 了,而且在 VSCode 里可以 ...

  6. python小题目练习(13)

    题目:封装用户的上网行为 实现代码: """Author:mllContent:封装用户的上网行为Date:2020-01-19"""def ...

  7. 十进制转换为K进制 Java 代码

    最近在读<计算机科学导论--跨学科方法>(机械工业出版社),习题索引:1.3.21: 编写一个新程序Kary,输入两个命令行参数i和k,并将i转换为基数k的数值表示.假设i是java中的l ...

  8. c# 实现定义一套中间SQL可以跨库执行的SQL语句

    c# 实现定义一套中间SQL可以跨库执行的SQL语句 目前数据的种类非常多,每种数据都支持sql语句,但是大家发现没有每种数据的SQL都有自己的语法特性,都是SQL语句都没有一个特定的语法标准,导致开 ...

  9. # Vue3 toRef 和 toRefs 函数

    Vue3 toRef 和 toRefs 函数 上一篇博文介绍了 vue3 里面的 ref 函数和 reactive 函数,实现响应式数据,今天主要来说一下 toRef 函数和 toRefs 函数的基本 ...

  10. [APIO2008]DNA 题解

    题目链接 首先呢,看到 A C G T 对应不同的权值,第一步就是把字母转换成数字. 我们分别对 A->1 C->2 G->3 T->4 进行标号,之后方便 \(\text{d ...