操作系统—软链接和硬链接的介绍、实现、区别

一、前言

有时候我们希望给某个文件取个别名,那么在 Linux 中可以通过硬链接软链接的方式来实现,它们都是比较特殊的文件,但是实现方式也是不相同的。

首先简单介绍一下,Linux文件系统的索引节点(inode)

  • 索引节点,也就是 inode ,用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置 等等。索引节点是文件的唯一 标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间

二、硬链接和软链接的实现

ln命令 用来为文件创建链接,链接类型分为硬链接和软链接两种,默认的链接类型是硬链接。如果要创建软链接必须使用"-s"选项。

硬链接是多个目录项中的「索引节点」指向一个文件 ,也就是指向同一个 inode,但是 inode 是不可能跨越文件系统的,每个文件系统都有各自的 inode 数据结构和列表,所以硬链接是不可用于跨文件系统的 。由于多个目录项都是指向一个 inode,那么只有删除文件的所有硬链接以及源文件时,系统才会彻底删除该文件(源文件会有一个引用计数Links来标记)。

软链接相当于重新创建一个文件,这个文件有独立的 inode ,但是这个文件的内容是另外一个文件的路径 ,所以访问软链接的时候,实际上相当于访问到了另外一个文件,所以软链接是可以跨文件系统的 ,甚至目标文件被删除了,链接文件还是在的,只不过指向的文件找不到了而已。

三、软、硬链接的区别

  1. 与硬链接不同的是,软链接确实是一个新文件,当然它具有不同的索引节点号;而硬链接并没有建立新文件。
  2. 软链接没有硬链接的限制,可以对目录文件做软链接,也可以在不同文件系统之间做软链接。
  3. 用ln -s命令建立软链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行软链接。而当源文件用相对路径时,如果当前的工作路径与要创建的软链接文件所在路径不同,就不能进行链接。
  4. 软链接不增加源文件的Links 值,硬链接会增加源文件的Links值,(Links值可以用 stat + 文件名查看)
相关推荐
bug菌¹5 分钟前
滚雪球学Oracle[2.5讲]:数据库初始化配置
数据库·oracle·数据库初始化·初始化配置
一休哥助手12 分钟前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
这可就有点麻烦了13 分钟前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
DY009J13 分钟前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器
翔云12345620 分钟前
MVCC(多版本并发控制)
数据库·mysql
程序员-珍25 分钟前
虚拟机ip突然看不了了
linux·网络·网络协议·tcp/ip·centos
代码敲上天.37 分钟前
数据库语句优化
android·数据库·adb
盒马盒马1 小时前
Redis:zset类型
数据库·redis
什么鬼昵称1 小时前
Pikachu- Over Permission-垂直越权
运维·服务器
静听山水1 小时前
mysql语句执行过程
数据库·mysql