linux系统下提供ln指令来进行文件链接。文件链接主要分为硬链接和软链接。
硬链接 :
由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。
可以用:ln命令来建立硬链接。语法:
- ln [options] existingfile newfile
- ln[options] existingfile-list directory
硬链接用法:
第一种:为”existingfile”创建硬链接,文件名为”newfile”。
第二种:在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。
硬链接举例:
没有创建硬链接时:
- root@ubuntu:/s3c6410/out# ls -il
- total 4
- 1623439 -rwxrwxrwx 1 root root 20 2010-12-31 16:14 test
可见未创建链接时,文件test的inod是1623439 ,链接数是1;
创建硬链接:
- root@ubuntu:/s3c6410/out# ln test test_h
创建链接后:
- root@ubuntu:/s3c6410/out# ls -il
- total 8
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test_h
可见,创建的硬链接与源文件有相同的inode,文件的链接数都增加为2,而且硬链接文件大小与原文件相同,都相应文件下查看test_h的文件属性发现没有明确指明此文件是test文件的硬链接文件。硬链接是指向原文件的一个指针。
不足:
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:
(1)不可以在不同文件系统的文件间建立链接
(2)只有超级用户才可以为目录创建硬链接。
软链接(符号链接) :
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
如果给ln命令加上- s选项,则建立软链接。如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与 “目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新建的文件实际上是指向原 “目标”的符号链接文件。
软链接举例:
没有创建连接时:
- root@ubuntu:/s3c6410/out# ls -il
- total 8
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test_h
创建软链接:
- root@ubuntu:/s3c6410/out# ln -s test test_s
创建软链接后:
- root@ubuntu:/s3c6410/out# ls -il
- total 8
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test
- 1623439 -rwxrwxrwx 2 root root 20 2010-12-31 16:14 test_h
- 1574128 lrwxrwxrwx 1 root root 4 2010-12-31 16:41 test_s -> test
可见,软链接的inode与原文件不同,而且创建软链接后,链接数并不增加,文件属性中明确指明是指向哪个文件的链接
不足:
因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
软链接和硬链接的区别:
软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文 件&链接文件拥有不同的inode号,表明他们是两个不同的文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件 和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,test大小是20B,而test_s是4B,这里面的4实际上就是“test”的大小。
参考:http://blog.youkuaiyun.com/eroswang/archive/2009/05/12/4173567.aspx