Linux笔记--硬链接与软链接

一、硬链接

1.inode和block

文件包含两部分数据:文件属性和实际内容,属性放在inode中,实际内容放在data block中。还有个超级区块(superblock)记录整个文件系统的整体信息,包括inode和block的总量,使用量,剩余量等。

文件数据包含:文件属性(容量,时间,权限等)和文件实际内容

文件系统各区块:

  • inode:记录文件属性和此文件数据所在的block号码(通过inode可以找到block,索引式文件系统),一个文件占用一个inode
  • block:记录实际内容,若文件太大会占用多个block
  • superblock:记录文件系统整体信息,包括inode/block的总量、使用量、剩余量等(文件系统的挂载时间、最近写入数据实际等相关信息)

目录的block存储什么?

  • 目录下的文件名
  • 文件名对应的inode(inode不记录文件名)

假设:文件夹/bin下面有两个文件:a.c和b.c,读取这两个文件的流程:

2.原理与用法

硬链接,Hard Link(实体链接),就是给文件起个别名。硬链接和源文件除了文件名外其相关信息都一样。创建一个硬链接不占空间只会增加一条记录,不能跨系统创建。

复制代码
ln 源文件 目标文件
#先ls -il展示源文件的inode和硬链接计数,在源文件不同的目录下创建硬链接
ls -il day3/a.txt
ls -il day3/a.txt day4/b.txt
--第二个字段由1变成2,这个字段的含义:有多少文件名链接到这个inode(硬链接计数)

可以通过 day3或 day4目录的inode所指向的block 找到两个不同的文件名,两个不同的文件名都指向同一个inode,并读取到文件的实际内容。无论通过哪一个文件名对文件进行编辑,结果都会写入到同一个inode和block中。

创建硬链接会改变inode或block的数量吗?

创建硬链接没有真正创建一个文件,只是在目录的 block中加了一个关联数据,通常不会增加 inode和block的数量。(当目录的block被填满时,还是会新增一个block,一般硬链接用掉的关联数据很小,所以通常不会增加block)

3.特点

  • 一般不会增加inode和block,不占空间
  • 不能跨文件系统
  • 不能链接目录(目录树可能产生环)
  • 对硬链接进行读写等操作时,操作的是源文件
  • 删除硬链接或源文件,不影响相同inode的其他文件

什么时候真正删除文件?

删除时,硬链接计数减一,减为0时,inode节点被释放。

二、软链接

1.原理与用法

Symbolic Link(符号链接),建立一个独立文件,这个文件会让数据的读写指向它链接的文件(存它链接文件的路径)。但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。当源文件被删除后,软连接也不能打开了。软连接相当于快捷方式。

复制代码
ln -s 原文件 目标文件

源文件和软链接指向不同的inode

软链接移动到其他目录下,是否还能找到源文件?

(源文件使用绝对路径,展示软链接占的不同大小)

软链接,链接源文件没有了,链接文件相当于找不到家了,无法正常使用;而硬链接由于是以副本形式存在,链接源文件没有了,仍旧可以正常使用。

2.特点

  • 相当于快捷方式
  • 存文件路径,软链接文件很小
  • 使用绝对路径
  • 对软链接进行读写操作,系统会自动转换为对源文件的操作(删除链接文件时,删除的是链接文件,不是源文件)
  • 软链接的权限是满的,真正的权限取决于源文件
  • 源文件被删除,软链接无法访问
相关推荐
Hello--_--World几秒前
React:状态管理 官网笔记
前端·笔记·react.js
苦 涩6 分钟前
考研408笔记之操作系统(五)——输入输出(IO)管理
笔记·操作系统·考研408
拾贰_C16 分钟前
【OpenAI | Ubuntu | bigmodel】 openai规范配置bigmodel(zhipu)大模型api
linux·运维·ubuntu
计算机安禾19 分钟前
【Linux从入门到精通】第22篇:Shell变量与数据类型——数字与字符串处理
linux·运维·chrome
桌面运维家25 分钟前
服务器负载均衡异常流量监控与安全防护实战
服务器·安全·负载均衡
他是龙55126 分钟前
DVWA SQL 注入全级别通关笔记(Low / Medium / High / Impossible)
数据库·笔记·sql
idolao30 分钟前
CentOS 7 安装 jprofiler_linux64_7_2_3.tar.gz 详细步骤(解压、配置、远程连接)
linux·python·centos
深邃-35 分钟前
【Web安全】-Kali,Linux配置(1):Kali网络配置,LinuxEnvConfig配置脚本,APT源的讲解,Kali设置中文
linux·运维·开发语言·网络·安全·web安全·网络安全
Hello World . .36 分钟前
Linux驱动编程:内核同步的艺术-从互斥到底半部
linux·开发语言·数据库
Go 言 Go 语37 分钟前
Claude Code 核心加载机制详解
服务器·前端·数据库