美文网首页
linux下软连接和硬连接的区别

linux下软连接和硬连接的区别

作者: lwj_ow | 来源:发表于2017-09-09 17:18 被阅读0次

这几天看操作系统的文件系统,看到关于文件连接的问题.文件连接分为两种,软连接和硬连接,其中软连接就是我们通常说的符号连接.

  1. 硬连接
    linux下,文件是通过索引节点(即我们通常说的i节点),硬连接就像是一个指针,指向我们连接的文件的i节点,也就是说对于硬连接,系统并不会为它分配i节点,但是硬连接会增加文件i节点中的连接计数.
    linux下我们可以使用ln命令来建立硬连接.

ln [options] existingfile newfile
ln [options] existingfile-list directory

第一种写法是为existingfile创建一个硬连接,文件名为newfile.第二种写法是在directory目录下为existingfile-list中的所有文件创建一个同名的硬连接.对于options,常用的有-f(force) 意思是无论newfile是否存在,我们都强制创建连接.-n选项是指如果newfile已经存在的话,就不创建链接.

image.png

可以看到在图上,在开始时hello.c文件显示的链接数目为1,创建连接之后hardlink.c后,两个文件的连接计数都变成了2.为了说明硬连接的一些性质,我们再对文件做如下操作:


image.png

可以看到,我们截断hardlink.c的文件size到50之后,hello.c文件的size也被截断到50.另外,如果我们删除掉hello.c,我们可以看到hardlink.c文件依然存在,不过连接计数已经由2变成了1.当连接计数减少到0的时候,操作系统就会把该文件彻底给删除掉.

总结:实际上硬连接并不能算是一个文件,它相当于一个指向原文件的i节点的指针,所以硬连接是很节省磁盘空间的.但是也有几个小缺点,首先是不能在不同文件系统的文件之间建立连接,其次只有拥有超级用户权限才能为目录建立硬连接.第一个缺点在当前计算机发展的背景下显得愈发严重起来了.下面介绍的软连接就没这个问题了.

  1. 软连接(符号连接)
    软连接主要克服了硬连接的一个主要不足,软连接没有任何文件系统的限制,甚至软连接可以跨越不同机器,不同网络对文件进行连接,所以灵活性远远的强于硬连接.
    使用方法:还是linux下的ln命令,不过我们需要加上-s选项来生成软连接文件.

ln -s sourcefile softlink
ln -s soucefile-list directory

如果softlink已经存在但不是目录的话,我们不做连接.同时,softlink也可以是任何一个文件名(可包含路径),也可以是一个目录.对于第二种用法,指令将会在该目录下建立一个或多个与目标同名的文件,此新建的文件就是指向原目标文件的符号连接(软连接).

image.png

上图我们可以看到软连接还是很容易看出来的,ls的时候会标出来是个指向hello.c的符号连接,这个与硬连接区别很明显.另外,我们可以看到hello.c的文件计数仍然是1.值得一提的是,softlink的大小是7,实际上这个是hello.c的长度,7个字节.也就是说,软连接不会增加文件的i节点计数.我们再对softlink文件做一些小操作如下:


image.png

从图中可以看到,我们对softlink进行截断操作,但是实际上softlink的size并没有发生改变,改变的是hello.c的长度,变为了3,而softlink的长度仍然是7,也就是hello.c的长度.我们查看hello.c和softlink的内容,都是一样的,三个字节.最后我们删除hello.c(或者重命名也是一样的),我们可以看到softlink已经失去了意义,不再指向一个有效的文件了.我们再使用ls -il指令查看当前目录,可以看到softlink变成红色,指向的文件也变成红色的,说明指向文件已经消失,该符号连接也没有意义了.


image.png

为了更好的说明,我又做了几个测试,从上面的图中,我们可以很清楚的看到软连接实际上连接的文件的路径,如果源文件被移动或者重命名或者被删除,软连接都会失效,而硬连接则不会.

总结:与硬连接不同,软连接实际上一个新的文件,文件类型是链接文件,有自己的i节点.当我们访问链接文件时,系统会发现其是链接文件,系统会读取链接文件并找到真正要访问的文件.因为链接文件包含了源文件的路径信息,所以源文件和链接文件是否在一个文件系统是没有影响的,这个是它的优点同时也是缺点,因为这个特性也导致了源文件的移动将会使链接文件失效(缺点).另外,软连接也会稍微耗费空间,因为链接文件是一个新的文件,系统需要分配新的i节点,同时需要保存源文件的路径.

相关文章

  • ln -s 软链接

    linux 创建连接命令 ln -s 软链接linux-ln -s(链接)、mount(挂载 软连接和硬连接 硬链...

  • linux下软连接和硬连接的区别

    这几天看操作系统的文件系统,看到关于文件连接的问题.文件连接分为两种,软连接和硬连接,其中软连接就是我们通常说的符...

  • 【LINUX】

    1. 硬链接和软连接区别 硬连接-------指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区...

  • Linux链接文件与查看或者合并文件内容

    04-建立链接文件:ln Linux链接文件类似于Windows下的快捷方式。链接文件分为软连接和硬链接。软连接:...

  • link

    linux 下,为了节省储存成本,可以对文件创建硬链接和软连接linux 下对应的命令为 link/ln 创建硬链...

  • linux创建一个软连接和硬链接的区别

    软连接和硬链接的区别 软连接相当于windows的快捷方式,硬链接相当于重新拷贝了一份文件,并且对硬连接内容的修改...

  • Linux-硬连接不能用于目录的原因

    上文介绍了Linux中的硬连接和软连接。留下了一个问题:硬连接为什么不能用于目录?今天来详细探讨一下。ln.png...

  • 软连接和硬连接区别

    关于硬链接: 硬链接的本质是给文件起一个新的名字,实质上是同一个文件; 创建硬链接的命令是ln 硬链接特性: ...

  • 2018-03-20课后总结

    今天学习了Linux系统的直接路径、间接路径,软连接和硬连接,文件的创建、删除、压缩和解压等。

  • 硬连接和软连接

    硬链接:通过索引节点(inode)来进行链接(创建了一个新的Directory项,但是不占用空间);特点: 一个文...

网友评论

      本文标题:linux下软连接和硬连接的区别

      本文链接:https://www.haomeiwen.com/subject/opfajxtx.html