Linux命令:软链接和硬链接

Posted HelloWhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令:软链接和硬链接相关的知识,希望对你有一定的参考价值。

今天起,决定开始自学Linux命令及Shell脚本,并用Linux学习(命令行,Shell及其他知识点)这一系列记录下自己的心路历程,内容不分先后,只记录自己觉得有必要的,简单的就不记了!

第一个知识点:硬链接和软链接

一、链接的定义:在linux中,如果要维护同一份文件的两份或多份副本,除了保存多份单独的物理副本之外,还可以使用只保存一份物理副本和多份虚拟副本的方式,这种虚拟的副本就称之为链接。---《Linux命令行与脚本大全》

上面的解释来自书本,可以说是解释的很清楚了,按照我自己的理解就是:在linux系统中,如果要备份某个文件,除了复制一份原文件之外,还能使用虚拟文件的方式,相比window而言,确实是多了一种方式,因为windows中

我们通常是使用复制原文件的方式来备份文件。可是如果仅仅看这个解释,我还是不太明白这个虚拟是什么意思,它到底和物理副本有什么区别?通过一番测试和调研后得出如下结论:

链接又分为软链接和硬链接:

1、硬链接:硬链接相当于复制了一份原文件,它和原文件一模一样,包括文件索引节点号,所以它会占用存储空间,如果原文件被删除,它依然存在;

2、软链接:软链接只是创建了一个指向原文件的指针,它有新的文件索引节点号,不会占存储空间,如果原文件被删除,它也会失效;

共同点:当改变原文件内容的时候,链接文件的内容也会被同步修改;

二、命令介绍

创建链接文件的方式有两种,一种是cp命令(复制),一种是ln命令(链接),两种都能实现,从cp我们就能知道,链接其实是备份文件的的一种形式(个人观点!)

cp命令:

创建硬链接:cp -l src des

创建软链接:cp -s src des

ln命令:

创建硬链接:ln src des

创建软链接:ln -s src des

这里需要说一下自己学习过程中的一些心路历程:刚开始创建链接的时候搞不清楚src和des,不知道到底是给哪个文件创建一个副本,传参数的时候src和des到底哪个才是创建之后的文件,主要是因为没有系统的看书,

只是从别人的博客中看,所以直到看了书才明白,src和des的意思是,给源文件src创建一个副本des,所以在传这两个参数的时候,如果两个文件不在同一个目录,我们也可以连同文件所在的目录一起传入,这个地方

真是被自己的悟性蠢哭了呀!!!

三、命令实战

上面是对基本概念的解释,也是必备的理论部分,下面是实践部分,说的对不对,用命令验证一下不就见分晓了吗?

说了使用方式,下面直接上命令吧:我以ln命令为例,cp只要注意参数就行,不举例说明!

 1、创建一个空文件作为源文件

2、给srcfile.txt创建一个硬链接

创建硬链接desfile1.txt后发现这两个文件的文件索引值是一样的,说明它们是完全相同的两个文件。

3、给srcfile.txt创建一个软链接

可以看出软链接文件的文件类型为l,且后面的表现形式也不一样,有一个->这样的符号指向源文件,且索引值也与源文件不一致,并且是新分配的!

这就验证了链接定义中所说的!

4、修改源文件内容查看硬链接文件和软链接文件的内容

从上面的实践可以看出,当源文件内容修改之后,对应的软链接文件和硬链接文件的内容也一并修改了!

5、删除源文件,查看链接文件

从上面的例子可以看出:当删除源文件之后,硬连接的文件依然存在,且有效,内容也能查看,但是软链接的文件失效,查看内容时会提示找不到文件!

这是不是验证了链接定义中的内容!!!

6、将源文件再次创建

从上面的例子可以看出:当我新建一个软链接指向的文件之后,软链接文件恢复,且指向新的文件,同时文件内容也会随着新文件的改变而改变,但是原来的硬链接文件还是删除文件的副本,并不是新建文件的副本。

所以说软链接会随着它所指向的那个文件的改变而改变,只要指向的文件名不变,即便删除再新建也会使其有效,只要文件名存在即可:

但是硬链接就是源文件的一个物理副本,如果原文件被删除,它依然有效,新建一个一模一样的文件,它依然是最原始的源文件;

由此可以看出,这个软链接确实有点花心啊,就像某些男生找女朋友,分了一个觉得自己死了,再找到一个又活过来了,不想硬链接,找到一个就这一直到天荒地老!哈哈~~

好了,对于软链接和硬链接的介绍就到这里,同样的可以用cp命令实现哦!!

以上是关于Linux命令:软链接和硬链接的主要内容,如果未能解决你的问题,请参考以下文章

linux命令大全之ln命令详解(创建软链接和硬链接)

linux中软链接和硬链接的区别与小结

Linux下软链接和硬链接的区别

Linux 软连接和硬链接的区别

Linux 软连接和硬链接的区别

liunx描述Linux下软链接和硬链接的区别