Linux — 硬链接与符号链接
(2008-12-31 01:00)
一键转载
分类: Linux开发
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引( inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。(每添加一个硬链接计数器+1,查处一个硬链接,计数器-1,当计数器为0时,文件即被删除) 符号链接是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。(删除符号链接并不会删除原文件) 硬链接时,新增加一个 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]$ |
|
来自: e3399 > 《Linux系统管理》