cheney23reg

技术博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。

 

链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。

 

Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

 

软链接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理;
相反,硬链接为文件开设一个新的目录项,硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件。

 

硬连接就像一个文件有多个文件名,软连接就是产生一个新文件(这个文件内容,实际上就是记当要链接原文件路径的信息),这个文件指向另一个文件的位置,硬连接必须在同一文件系统中,而软连接可以跨文件系统。

 

硬连接:源文件名和链接文件名都指向相同的物理地址,可以节省硬盘空间,由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除软连接(符号连接)用ln -s命令创建文件的符号连接,符号连接是linux特殊文件的一种,作为一个文件,它的存储的内容是它所连接的文件的路径名,类似于硬件方式,我们可以删除原始文件而连接文件仍然存在。

 

软链接是一个完整的文件,而这个文件中存放的是它自己的inode号和真实的那个源文件的路径。作用在这个文件上的操作除了删除都直接转向实际指向文件,由于它是一个真实的文件所以占用磁盘空间。

 

硬链接可以认为不是一个文件,它只是实际文件的一个别名,它的作用是防止真实文件被误操作,给一个文件建立硬链接后,他们互为别名,删除其中任意一个,实际文件并不会被删除。只有链接数为0时,才会删除原始文件。


一、硬链接硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。

可以用:ln命令来建立硬链接。

语法:

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

 

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


常用可选[options]
-f 无论”newfile”存在与否,都创建链接。
-n 如果”newfile”已存在,就不创建链接。


下面举一些例子:

$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2
$ ln file2 file2hard
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard

 

 

注意在创建链接前,file1 显示的链接数目为1,创建链接后
(1)file1和file1hard的链接数目都变为2
(2)file1和file1hard在inode号是一样的
(3)file1和file1hard显示的文件大小也是一样。

 

可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。

 

你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

 

但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了原有的内容。这时,系统就“忘记”了它曾经是硬链接文件,而把他当成一个普通文件。

 

下面的程序,是将dir1目录中所有文件,在目录dir2中建立硬链接:

$mkdir dir2
$ln /home/longcheng/dir1/* /home/longcheng/dir2

 

硬链接文件有两个限制:
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。

 

当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;
还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

 

补充一下:可以通过symlink来查看链接文件,查询 man symlink

 

posted on 2010-08-08 15:28  cheney23reg  阅读(1473)  评论(0编辑  收藏  举报