要弄清楚2者的区别,首先得明白linux系统中文件是如何存储的.在linux中存储一个文件由3部分组成:
文件名 inode block(数据块)
关于inode:
block用来存储数据.而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小,归属的用户组,读写权限等.inode为每个文件进行信息索引,所以就有了inode的数值.
在来谈谈到底什么是硬连接什么是软连接:
先看下面一个列子:
创建连接文件之前
lvbook@lvbook-desktop:/home/chendan/onetime/3$ ls -il
total 0
149945 -rw-r--r-- 1 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
创建一个硬连接
lvbook@lvbook-desktop:/home/chendan/onetime/3$ sudo ln test1.c hlink
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 hlink
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
可以看到test1.c连接数+1,并且可以看出hlink与test1.c除了文件名不同外,其余都是完全相同的.它们的索引节点相同,读写权限相同.由此我们可以这样理解,所谓硬连接就是原文件的一个克隆体.
创建一个软连接
lvbook@lvbook-desktop:/home/chendan/onetime/3$ sudo ln -s test2.c slink
lvbook@lvbook-desktop:/home/chendan/onetime/3$ ls -il
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 hlink
149944 lrwxrwxrwx 1 root root 7 2010-03-23 23:57 slink -> test2.c
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
可以看到test2.c的连接数没有变,它们的索引节点不同,读写权限不同.我们可以这样理解,当我们创建一个连接文件时,系统为我们的连接文件从新分配了一片小的内存用来存放我们的连接文件的索引,文件名,数据块.而其中的数据块保存的是连接源的文件名.
大家可以参考:
http://blog.chinaunix.net/u3/95713/showart_2056964.html
连接有软连接(symbolic link)和硬连接(hard link)之分,