- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = 

ln -s file1 file2 # 创建文件软链接

软链接,又叫符号链接。

文件用户数据块存放的是另一个文件的路径名的指向。

软链接就是一个普通文件,只是数据块内容有点特殊。

原文件和软链接的inode不同,但修改任何一个文件都会改变文件的内容。


[root@Centos6 ~]# ls -li

total 4

392110 lrwxrwxrwx 1 root root  6 Jun 16 15:20 test.doc -> test.log

 10060 lrwxrwxrwx 1 root root  6 Jun 16 15:20 test.log -> test.txt

392109 -rw-r--r-- 1 root root 24 Jun 16 15:47 test.txt

[root@Centos6 ~]# cat test.txt 

Address: 8.8.8.8

[root@Centos6 ~]# cat test.log 

Address: 8.8.8.8

[root@Centos6 ~]# cat test.doc 

Address: 8.8.8.8

[root@Centos6 ~]# echo -n modified >> test.txt 

[root@Centos6 ~]# cat test.txt 

Address: 8.8.8.8

modified[root@Centos6 ~]# cat test.log 

Address: 8.8.8.8

modified[root@Centos6 ~]# cat test.doc 

Address: 8.8.8.8

modified[root@Centos6 ~]# rm -f test.doc 

[root@Centos6 ~]# ls -li

total 4

 10060 lrwxrwxrwx 1 root root  6 Jun 16 15:20 test.log -> test.txt

392109 -rw-r--r-- 1 root root 32 Jun 16 15:50 test.txt

[root@Centos6 ~]# rm -f test.txt 

[root@Centos6 ~]# ls -li

total 0

 10060 lrwxrwxrwx lrwxrwxrwx 1 root root 6 Jun 16 15:20 test.log -> test.txt

[root@Centos6 ~]# cat test.log 

cat: test.log: No such file or directory


test.txt为原文件

test.log为test.txt的软链接

test.doc为test.log的软链接


各文件的inode不同。当修改任何一个文件时其他文件也跟着改变。

当删除原文件test.txt后,test.log则变成了死链接,ls将显示为红色,并且看不到文件内容了。




- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = 

ln file1 file2       # 创建硬链接
link file1 file2     # 创建硬链接

硬链接就是一个文件使用了多个别名(他们有共同的inode)。

由于硬链接是有着相同inode号仅文件名不同的文件,因此删除一个硬链接文件并不影响其他有相同inode号的文件。

硬链接只能对文件创建,不能对目录创建。

硬链接可由link或者ln命令创建。


[u02@Centos6 ~]$ cat test.txt 

Hello u02

[u02@Centos6 ~]$ ls -li

total 4

128020 -rw-r--r-- 1 u02 u02 10 Jun 16 16:51 test.txt

[u02@Centos6 ~]$ ln test.txt test01.txt

[u02@Centos6 ~]$ ls -li

total 8

128020 -rw-r--r-- 2 u02 u02 10 Jun 16 16:51 test01.txt

128020 -rw-r--r-- 2 u02 u02 10 Jun 16 16:51 test.txt

[u02@Centos6 ~]$ echo "Hello $USER" >> test01.txt

[u02@Centos6 ~]$ cat test01.txt 

Hello u02

Hello u02

[u02@Centos6 ~]$ cat test.txt 

Hello u02

Hello u02

[u02@Centos6 ~]$ rm -f test.txt 

[u02@Centos6 ~]$ cat test01.txt 

Hello u02

Hello u02