码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 硬链接和软链接的总结

时间:2016-07-29 19:40:54      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:linux   基础命令   

描述:

       链接——是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。在Linux中分为软链接(hard link)和硬链接(soft link),其中软链接又称为符号链接(symbolic link)。

       索引节点:在linux系统中对文件的管理本质上是通过其索引节点进行管理的。从系统的角度来看,文件的索引节点(inode)是文件的唯一标识,它包含了文件系统处理文件所需要的全部信息。实际上存在两种类型的索引节点:

        1,内核索引节点(in-core indoe):保存在内存中,在系统中每个打开的文件都对应着一个内核索引节点

        2,磁盘索引节点(on-disk inode):在文件系统中的每一个文件都有一个磁盘索引节点,保存在磁盘上,它所保存的具体信息与文件系统的类型有关。

   注意:这两种索引节点的关系为:当进程打开一个文件时,文件的磁盘索引节点中的信息就会被载入内存,并建立一个内核索引节点。当内核索引节点被修改后,系统负责将其同步到磁盘上。磁盘索引节点与对应的内核索引节点所保存的信息并不是完全相同的。内核索引节点记录的是关于文件的更通用的一些信息,而忽略掉于具体文件系统类型相关的一些信息。


说明:
        硬链接:就是让一个文件对应一个或者多个文件名,或者说文件名和文件系统使用的节点号链接起来,这些文件可以在同一目录或者不同目录下。一个文件名对应多个文件名,称作该文件的链接数。

  语法格式:

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


        用法
        第一种为”existingfile”创建硬链接,文件名为”newfile”
        第二种在”directory”目录中,为” existingfile-list”中包含的所有文件创建一个同名的硬链接。
        常用可选[options]

        -f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

  特征:

   1,目录不支持硬链接

   2,硬链接不能跨文件系统

   3,创建硬链接会增加inode的引用计数

  
        
软链接:又称为符号链接,实际上是一中特殊的文件,这种文件包含了另一个文集那的人一个路径名。这个路径名指向位于任意一个文件系统的任意一个文件,甚至可以指向一个不存在的文件。系统会自动的把对符号链接的操作转换为对源文件的操作。其使用和硬链接的使用类似,

软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。
         语法格式

        ln -s existingfile newfile
        ln -s existingfile-list directory

        特征

        1,符号链接与文件是两个各自独立的文件,各有自己的inode,对原文件创建符号的链接不会增加引用计数

        2,支持对目录创建符号链接,可以跨文件系统

        3,删除符号链接文件不影响原文件,但删除原文件,符号指定的路径不存在,此时会变成无效链接


示例:

       现在目录下有两个文件,一个名为A ,一个名为B 

[root@localhost tmp]# ls -il
总用量 16
1048592 -rw-r--r--  1 root root 105 7月  29 09:04 A
1048593 -rw-r--r--  1 root root 921 7月  29 09:04 B

    首先做个A文件的硬链接: 

[root@localhost tmp]# ln A Aaa
[root@localhost tmp]# ls -il
总用量 20
1048592 -rw-r--r--  2 root root 105 7月  29 09:04 A
1048592 -rw-r--r--  2 root root 105 7月  29 09:04 Aaa
1048593 -rw-r--r--  1 root root 921 7月  29 09:04 B

这里我们注意到在创建链接前,A显示的链接数目为1,创建链接后发生如下变化:

1,A和Aaa的链接数目都是变为为2.

2,A和Aaa的inode号都是一样的,都是1048592

3,A和Aaa显示的文件大小也是一样的,都是105B

可见进行了ln命令的操作结果:A和Aaa是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件A的硬链接,就是为A的文件索引节点在当前目录上建立一个新指针。可删除其中的任何一个,如rm A,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容才磁盘上删除。

[root@localhost tmp]# \rm A
[root@localhost tmp]# ls -il
总用量 16
1048592 -rw-r--r--  1 root root 105 7月  29 09:04 Aaa
[root@localhost tmp]# \rm Aaa
[root@localhost tmp]# ls -il
总用量 12
1048593 -rw-r--r--  1 root root 921 7月  29 09:04 B

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
1.不允许给目录创建硬链接。

[root@localhost tmp]# ln FILE1 /root
ln: "FILE1": 不允许将硬链接指向目录

2.不可以在不同文件系统的文件间建立链接。


接着我们做一个指向B的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

[root@localhost tmp]# ln -s B Bbb
[root@localhost tmp]# ls -il
总用量 20
1048592 -rw-r--r--  2 root root 105 7月  29 09:42 A
1048592 -rw-r--r--  2 root root 105 7月  29 09:42 Aaa
1048593 -rw-r--r--  1 root root 921 7月  29 09:42 B
1048594 lrwxrwxrwx  1 root root   1 7月  29 09:43 Bbb -> B

   从上面链接后的结果可以看出来软链接与硬链接之间的区别:

1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,B大小是921,而Bbb是1。软链接文件大小是指其指定的文件路径字符串的字节数。
5,删除符号链接文件不影响原文件,但删除原文件,符号指定的路径不存在,此时会变成无效链接,此此时会报错,文件变为红色一直闪烁,如果在当前目录下创建以为名为B的文件,则不会闪烁,因找到文件所指向的路径

[root@localhost tmp]# \rm Bbb
[root@localhost tmp]# ls -il
总用量 20
1048592 -rw-r--r--  2 root root 105 7月  29 09:42 A
1048592 -rw-r--r--  2 root root 105 7月  29 09:42 Aaa
1048593 -rw-r--r--  1 root root 921 7月  29 09:42 B

技术分享

6,允许对目录进行创建符号链接

[root@localhost ~]# ls -s /tmp/file file

技术分享


结束语:

       以上内容是本人对ln命令的总结,由于本人初学Linux,对此命令认识和理解不够全面和深入,难免会有遗漏,望各位路过的达人多多指教,不胜感激!

 

Linux 硬链接和软链接的总结

标签:linux   基础命令   

原文地址:http://suifengsky.blog.51cto.com/11393684/1831605

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!