CentOS-Linux之ln链接命令详解

11 篇文章 0 订阅
本文介绍了Linux系统中的ln命令,用于创建硬链接和软链接。硬链接通过共享Inode实现,数据同步,不支持跨分区和链接目录。软链接类似Windows快捷方式,有独立Inode,可跨分区和链接目录。文章通过实验详细展示了硬链接和软链接的创建及特点。
摘要由CSDN通过智能技术生成

目录

ln链接命令

1.硬链接实验

2.软链接实验


ln链接命令

ln是linux系统中用于创建硬链接和软链接的命令,英文原意make links between file,命令所在路径/bin/ln,是一个所有用户都有权限操作的命令!主要的功能是在文件间建立链接。本教程以CentOS 7系统环境为例,并结合应用场景为大家清晰明了的介绍ln操作命令的使用方法和实际用途!

ln命令的语法格式如下:

【语法格式】

ln  [选项]  源文件  目标文件

选项描述(仅介绍最常用的选项,如需查看帮助文档可输入ln --help)

选项(注意大小写)

作用

-s

建立软链接文件(如果不加-s选项默认创建硬链接文件)

-f

如果目标文件已经存在,加-f则强制删除目标文件后再建立链接文件

 

1.硬链接实验

【1-1】首先在根目录创建两个空目录a和b;

mkdir /a /b

执行结果

[root@localhost /]# mkdir /a /b

[root@localhost /]# ls /

a  b  bin  boot  dev  etc  home  lib  lib64  ljp  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  tools  usr  var

【1-2】在a目录下创建一个空文件CC;

touch /a/CC

执行结果

[root@localhost /]# touch /a/CC

[root@localhost /]# ls /a/

CC

【1-3】现在可以正式开始实验了,我们先为a目录下的CC文件创建一个硬链接,并挂载到b目录下,然后将硬链接文件改名为DD; 

ln /a/CC /b/DD

此时硬链接已建立,我们输入ll -i /a/ /b/查看一下创建情况;

执行结果

[root@localhost /]# ln /a/CC /b/DD

[root@localhost /]# ll -i /a/ /b/

/a/:

总用量 0

51651196 -rw-r--r--. 2 root root 0 11月 28 20:43 CC

/b/:

总用量 0

51651196 -rw-r--r--. 2 root root 0 11月 28 20:43 DD

通过上图可以看出,硬链接文件DD的信息和源文件CC几乎相同,这个为什么呢?请看下图和解释: 

【操作说明】

□硬链接原理:首先我们要先搞明白一个事情,在Linux系统中任何一个目录和文件都有独自的Inode和block,对于文件, block保存的是文件的数据,但对于目录,block保存的是这个目录下所有子文件或子目录对应的Inode,所以,无论我们是访问目录或文件都得通过Inode来找到对应的block,才能访问和修改其数据。

□其次,通过上图我们可以看出,a和b都是根下的子目录,是保存在根下的block里面的,a和b也都有自己的Inode和block,我们先看看a目录的block,其实保存的是CC的文件的Inode,而CC文件也是有自己的Inode和block的,CC的block保存的是文件的实际数据;再次,我们再看看b目录的block,保存的是DD文件的Inode,但DD是由CC链接而来的硬链接文件,和CC文件用的是同一个Inode;

由此不难看出,无论你是访问a目录的CC或者b目录的DD文件时,其实都是通过Inode(51651196)指向CC这个文件;

所以,即使是你删除了a目录的CC文件,或者b目录的DD文件,只要你不是同时删除两个文件,CC文件的数据都还在,也能正常访问,因为这是硬链接的一个特性,硬链接的数据都是同步进行的;

□但硬链接的标记不清,不能跨分区使用,也不能链接目录,局限也挺大,得根据业务需求来选择;

□硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,一旦删除源文件,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。

2.软链接实验

软链接的理解相对简单一些,你可以把它理解成Windows系统下的文件或目录的快捷方式;

【2-1】还是以a目录的CC为源文件,将CC文件链接到b目录取名EE;

ln -s /a/CC /b/EE 

此时软件链接已建立,我们输入ll -i /a/ /b/查看一下创建情况;

执行结果

[root@localhost a]# ln -s /a/CC /b/EE

[root@localhost a]# ll -i /a/ /b/

/a/:

总用量 0

51651196 -rw-r--r--. 2 root root 0 11月 28 20:43 CC

/b/:

总用量 0

51651196 -rw-r--r--. 2 root root 0 11月 28 20:43 DD

61586 lrwxrwxrwx. 1 root root 5 11月 29 16:48 EE -> /a/CC

【2-2】可以看到b目录下的EE文件是指向a目录的CC文件的,并且Inode是不一样的,具体逻辑见示意图: 

 操作说明

□通过上面的示意图可以看出,CC和EE文件都有自己不同的Inode和block, CC的block保存的是CC的实际数据,而EE是软链接文件,它的block保存的是CC的Inode,换句话说,EE的block除了保存CC文件的Inode外,没有其他意义,所以删除EE文件对CC文件是没有任何影响的,但是如果是删除了CC文件,EE文件也失去了意义。

□和硬链接文件一样,无论你是从a目录或b目录修改文件,数据都是够同步的, 因为最终的访问都是的软链接指向源文件,唯一不同的是软链接文件是没有实际数据的,只保存源文件的Inode,而数据都是保存在源文件里的,而且软链接能跨分区和链接目录,而硬链接不能。

□使用软链接时需要注意,一定要用绝对路径,例如ln -s abc /abc会报错,正确的是ln -s /abc /abc; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值