您的位置:首页 > 运维架构 > Linux

Linux下的硬链接和符号链接

2010-10-08 20:01 232 查看
硬链接和软链接的几点区别

1.硬链接文件和原文件指向同样的数据块,有相同的inode号和文件属性,当删除原文件时,硬链接文件仍然存在有效。但硬链接文件不同于文件的复制。应该说硬链接文件的产生只是原文件所在目录文件的内容发生改变,原文件的数据并没有得到复制,而复制文件,磁盘上有两份数据。简单说,硬链接就是一个类似于别名的概念。当原来的名字没有了,别名照样可以使用。

2.符号链接也称为软链接,它是包含在文件中的路径名。当系统遇到符号链接时,它沿着符号链接提供的路径名前行,然后继续沿着符号链接后面的任何其余路径前行。如果路径名以一个 / 开始,则系统返回到 /(“根”)目录,并从该目录开始沿着路径前行。如果路径名未以 / 开始,则系统返回到前一级目录,并从那个目录开始沿着符号链接中的路径名前行。符号链接和windows系统的快捷方式含义一样,是新文件,和原文件的inode不同,该文件的内容是指向原文件的路径信息。

3.软链接就好像是指针一样。而硬链接就是引用。

实验举例:

硬链接时,新增加一个 inode 链接到文件的数据块;而符号链接时,只是新创建了一个文件,它指向所链接的文件。

# 1. 使用文件 /oradata2/yct/rc.local 进行测试

[oracle@sbdatabase yct]$ pwd

/oradata2/yct

[oracle@sbdatabase yct]$ ll

total 4

-rwxr-xr-x 1 oracle dba 220 Dec 9 16:30 rc.local

[oracle@sbdatabase yct]$ more rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff. touch /var/lock/subsys/local

# 2. 进行硬链接,inode 数增加

[oracle@sbdatabase yct]$ ln rc.local rc.local_hard.ln

[oracle@sbdatabase yct]$ ll

total 8

-rwxr-xr-x 2 oracle dba 220 Dec 9 16:30 rc.local

-rwxr-xr-x 2 oracle dba 220 Dec 9 16:30 rc.local_hard.ln

# 3. 进行符号链接,inode数并没有增加

[oracle@sbdatabase yct]$ ln -s rc.local rc.local_soft.ln

[oracle@sbdatabase yct]$ ll

total 8

-rwxr-xr-x 2 oracle dba 220 Dec 9 16:30 rc.local

-rwxr-xr-x 2 oracle dba 220 Dec 9 16:30 rc.local_hard.ln

lrwxrwxrwx 1 oracle dba 8 Dec 9 17:03 rc.local_soft.ln -> rc.local

# 4. 删除原文件后,硬链接仍可用,而符号链接失效

[oracle@sbdatabase yct]$ rm rc.local

[oracle@sbdatabase yct]$ ll

total 4

-rwxr-xr-x 1 oracle dba 220 Dec 9 16:30 rc.local_hard.ln

lrwxrwxrwx 1 oracle dba 8 Dec 9 17:03 rc.local_soft.ln -> rc.local

[oracle@sbdatabase yct]$ more rc.local_hard.ln

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff. touch /var/lock/subsys/local

[oracle@sbdatabase yct]$ more rc.local_soft.ln

rc.local_soft.ln: No such file or directory

# 5. 硬链接不能链接目录

[oracle@sbdatabase yct]$ rm -r *

[oracle@sbdatabase yct]$ ll

total 0

[oracle@sbdatabase yct]$ mkdir t1

[oracle@sbdatabase yct]$ ln t1 t1_hard.ln

ln: `t1': hard link not allowed for directory

[oracle@sbdatabase yct]$ ln -s t1 t1_soft.ln

[oracle@sbdatabase yct]$ ll

total 4

drwxr-xr-x 2 oracle dba 4096 Dec 9 17:09 t1

lrwxrwxrwx 1 oracle dba 2 Dec 9 17:09 t1_soft.ln -> t1

[oracle@sbdatabase yct]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: