Linux中的链接文件_软链接和硬链接

一、链接文件介绍

Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。以下是详细介绍:

  • 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块领域,即进行硬连接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制:
  1. 不能跨文件系统,因为不同的文件系统有不同的inode table;
  2. 不能链接目录。
  • 软链接:与硬链接不同,软链接是建立一个独立的文件,当读取这个链接文件时,它会把读取的行为转发到该文件所链接的文件上。举个例子:现在有一个文件a,我们做了一个软链接文件b,b指向a,当读取b时,b就会把读取的动作转发到a上,这样就读取了文件a。当我们删除文件a时,链接文件b不会被影响,但如果再次读取b时,会提示无法打开文件;然而当我们删除b时,不会对文件a造成任何影响。

二、两者的区别

  • 硬链接记录的是目标的inode,软链接记录的是目标的路径。
  • 软链接就像是快捷方式,而硬链接就像是备份。
  • 软链接可以做跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接。所以,软链接的使用频率要高很多。

三、如何建立软链接和硬链接

ln(link)命令的格式:ln [-s] [来源文件] [目的文件]。该命令常用的选项是-s,如果不加-s选项就是建立硬链接,加上-s选项就建立软链接(可以这样记忆,s->soft(柔软的)),例:

注:上例中的du命令用来计算文件或者目录的大小,-k表示以KB为单位,这里的4,就指的是4KB;ll命令等同于 ls -l。

一开始目录下面只有一个passwd文件,目录总大小为4KB,做了硬链接后,虽然两个文件的大小都为2364B,但目录的总大小没有变化。

所以我们先试着删除源文件,再来比较,例:

在上例中,删除源文件passwd后,文件大小依旧没有改变。说明硬链接文件并不会复制数据块额外占用磁盘空间。

再看硬链接的另外一个限制——不允许目录做硬链接。例:

软链接特性

首先建立一个测试目录456,然后复制/etc/passwd文件来做测试,再给它做一个软链接文件,例:

上例中,如果删除源文件,则不能读取软链接文件,而且使用命令ll查看时发现颜色也有变化。

说明目录不可以做硬链接,但可以做软链接,例:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3165
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5526
来自专栏魂祭心

原 canvas绘制clock

4164
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2576
来自专栏杨龙飞前端

scrollto 到指定位置

2524
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4045
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6918
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4697

扫码关注云+社区