首页 > 编程语言 >透过inode来理解硬链接和软链接

透过inode来理解硬链接和软链接

时间:2022-08-18 18:22:07浏览次数:87  
标签:文件 文件名 透过 hello txt inode 链接

什么是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_relation

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号码。

ln

本文永久地址GitHub

标签:文件,文件名,透过,hello,txt,inode,链接
From: https://www.cnblogs.com/wangmeijian/p/16599711.html

相关文章

  • 本地navicat链接宝塔服务器的mysql
    1、如果提示hostxxxxnotallowedmysqlserver 处理方式:去my.ini文件添加一下bind-adress=0.0.0.0操作完以后可以重启mysql,在本地的cmd中telnet ip 端口 是不是......
  • 服务器链接工具MobaXterm
        链接:https://pan.baidu.com/s/15zC4JC0XOKYI1lN5bkB3fw提取码:9zc8 每次使用都需要输入密码。修改密码:链接:https://pan.baidu.com/s/1XWqnjYlbfBkbz1Qj7a......
  • 链接redis无权限问题
    docker启动redis,redis.conf中设置了"requirepass123456",但是不想改动配置。因此访问docker:dockerexec-itredisXXXX/bin/sh在/usr/local/bin下找到redis-cli命令,./r......
  • 静态链接 SDL2 程序 (MinGW64)
    引用SDL静态编译教程的话:SDL(SimpleDirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。本文主要介绍SDL库的静态编译方法。SDL当前是第二版......
  • MobaXterm链接linux虚拟机报错Network error: Connection refused
    原文链接使用虚拟机安装Ubuntu,然后在Windows下使用MobaXterm链接。若出现如下报错:Networkerror:Connectionrefused需要安装openssh:sudoaptinstallopens......
  • C++动态链接库(DLL)文件的创建和调用
    出处:蓟_可爱的叔https://www.cnblogs.com/wjq13752525588/p/16364956.html 一、什么是库    我们在编写C/C++等语言程序的时候,经常会遇到很多反复使用的或者......
  • 两种获取链接响应码的方法 (python实现)
    两种获取链接响应码的方法(python实现)背景:工作中需要测试某个包是否正常上传到了yum仓库,所以需要检测对应地址是否有效,发现之前使用requests库写的代码出奇的慢,所以......
  • 软连接与硬链接
      文件软连接     源文件绝对路径    快捷方式绝对路径    三种文件类型:  可以生成多个快捷方式,仅仅指向了源文件     ......
  • Linux系列之链接
    前言在类Unix系统中,一个文件有可能被多个名字引用。我们使用链接来实现这一点,链接共有两种类型:硬链接和软链接,本文分别来介绍它们。硬链接硬链接也允许指向文件,但与符号......