以前,我对Linux的链接有点陌生,使用上也存在一些问题。 这两天我经常在网上查资料,很好地了解了Linux上的硬链接和软链接。
链接---------一种共享文件并与访问该文件的用户的几个目录条目建立联系的方法。
Linux包含两种类型的链接:“硬链接”(Hard Link )和“软链接”(soft link ),软链接也称为符号链接。
让我们先看看一些名词。索引节点(inode)
要理解链接,必须首先理解索引节点(inode )这一概念。 在Linux系统上,内核将inode分配给每个新创建的文件。 每个文件都有唯一的inode编号,并且inode始终可以很容易地理解为指向此文件的特定位置的指针。 文件属性存储在索引节点上,并在访问文件时将索引节点复制到内存中,从而提供对文件的快速访问。 系统通过索引节点而不是文件名搜索每个文件。硬链接(Hard Link)
硬链接明确地说,是指向文件索引节点的指针,系统不会为其重新分配inode。
:可以使用ln命令建立硬链接。
引用ln [ options ] existing文件新文件
ln [选项] existing file-list directory
使用方法:
第一个是创建“existingfile”的硬链接,文件名为“newfile”。
第二,在“目录”目录中,为“现有文件-列表”中的所有文件创建同名的硬链接。
可选的[ options ]:- f创建链接,无论是否存在“新建文件”。 - n如果“新建文件”已存在,则不会创建链接。软链接(Soft Link)
软链接(也称为符号链接)包含其他文件的路径名。 可以在任何文件或目录中链接不同文件系统的文件。 与win上的快捷方式相同。
:可以使用ln -s命令建立软链接。
引用ln-s扩展文件新文件
ln-s扩展文件列表目录
看看硬链接和软链接的例子。
目前目录中有两个文件: AAA和BBB。
引用$ ls -il
93922-rw-r---r---1 ocean ocean 922007-05-1815336046 AAA
93923-rw-r---r---1 ocean ocean 952007-05-1815336046 BBB
首先制作AAA的硬链接。
引用$ ln AAA AAAhard
$ls -il
93922-rw-r---r---2经合组织922007-05-1815336046 AAA
93922-rw-r---r---2经合组织922007-05-1815336046 AAA hard
93923-rw-r---r---1 ocean ocean 952007-05-1815336046 BBB
在此,在创建链接之前,请注意AAA中显示的链接数为1。 创建链接后
1.AAA和AAAhard的链接数均为2。
2.AAA和AAAhard的索引号相同,均为963922。
3.AAA和AAAhard显示的文件大小也相同,均为92B。
可以看到ln命令的操作结果。 AAA和AAAhard是同一文件的两个名称,它们具有相同的索引节点编号和文件属性。 建立文件AAA的硬链接是在AAA的文件索引节点的当前目录中建立新指针。 删除任何一个指针(如rm AAA )将一次仅删除一个指针,同时减少一个链接。 只有在将指向文件内容的所有指针(即链接数)减少到0时,内核才会从磁盘中删除文件内容。
硬链接是节省空间、Linux系统集成文件系统的传统方法,但也存在一些缺点。
1 .不允许硬链接到目录。
2 .不能在不同文件系统的文件之间建立链接。
接下来,创建指向BBB的软链接。 软链接可以克服硬链接的不足,没有文件系统限制,用户可以创建指向目录的符号链接。 因此,它现在使用更广泛、更灵活,还可以通过不同的计算机和网络链接文件。
引用$ ln -s BBB BBBsoft
$ ls -il
总使用量0
93922-rw-r---r---2经合组织922007-05-1815336046 AAA
93922-rw-r----r-
2 ocean ocean 92 2007-05-18 15:46 AAAhard963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB
963924 lrwxrwxrwx 1 ocean ocean 3 2007-05-18 15:47 BBBsoft -> BBB
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。
区别:
1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
连接计数count:
前面我们介绍了,文件的链接计数域表明本系统中共有几个文件目录项的inode和本文件相同,也就是本文件共有几个硬链接。如上面的例子中AAA和AAAhard文件的count值都是2。
那么对于目录,其count域的含义是什么呢?目录的count同样表示共有多少个目录项指向此目录,不过要详细说明必须进一步解释VFS文件系统的结构,为简单起见,只要这样理解就行了:(count-2)等于本目录包含的直接子目录数(就是只包括儿子,不包括孙子)。
例如:如果一个目录/ln的count域为5,那么/ln目录一定包含3个子目录。
转载于:https://www.cnblogs.com/ovliverlin/archive/2008/10/28/1321521.html